将DOS C程序转化为Windows C程序的简单方法
DOS 下的c程序是最简单的,也容易入门,很多C语言教材都是以DOS下的Turbo C来讲解C语言。如果我们已经学习C语言多年,已经入门了,还在DOS下打转转,那就得不偿失了:我们学习C语言的目的是为了用,在Windows流行的今天,有谁愿意聘用只会DOS下编程的人员呢?
下面介绍将DOS C程序转化为Windows C程序的简单方法。
这是一个最简单的DOS C 的“Hello World!”程序。
#include "stdio.h"
main()
{
printf("Hello World!");
}
将此程序转化对应的Windows C程序是
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL,"Hello World!","第一个Windows C程序",MB_OK);
return 0;
}

说明:
第1行 #include <windows.h> 是包含windows的头文件windows.h
第2行 WinMain是Windows C程序的入口点,就象DOS C程序的main。其中的参数,这里用不到,暂时不讲。
第4行 MessageBox是消息函数。其中第2个参数是要显示的内容,如“Hello World!”,你可以改成你要显示的内容,第3个参数是标题栏显示的内容,如"第一个Windows C程序",你可以改成你要显示的内容。
第2个求1+2+3+…+100的和的DOS C程序。
#include "stdio.h"
main()
{
int sum=0,i;
for(i=1;i<=100;i++)
{
sum=sum+i;
}
printf("1-100自然书数的和是:%d\n",sum);
}
将此程序转化对应的Windows C程序是
#include <windows.h>
#include <stdlib.h>
#include <string.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
int sum=0,i;
char str1[40]="1-100自然书数的和是:",str2[10];
for(i=1;i<=100;i++)
{
sum=sum+i;
}
itoa(sum,str2,10); /*将整型变量sum的运算结果转化字符串str2,以方便显示*/
strcat(str1,str2); /*将str1的值(1-100自然书数的和是:)与str2连接,以方便显示*/
MessageBox(NULL,str1,"第二个Win32程序",MB_OK);
return 0;
}
运行结果:

试一试:将你以前编写的DOS C程序改写成Windows C程序?
____________________________________________________________
这里使用学习型编程工具《Turbo C/C++ for windows 集成实验与学习环境》。
直接将上面的程序复制下来,粘贴并保存,然后用鼠标单击[工具栏]中的[运行]按钮即可。第一个程序的运行效果如下图。

是不是很简单啊!
另外软件中还带有两个Windows C程序示例,如上图左面可以看到“第一个Win32程序hello",“第二in32程序hello",直接打开即可使用
________________________________________________________________________________
写这个程序的目的是为了引起读者对Windows C的兴趣,期望能抛砖引玉。
下面用Windows C程序的基本结构重写求1-100的和。
#include <windows.h>
#include <stdlib.h>
#include <string.h>
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("一个简单的Windows C程序") ;
HWND hwnd ; //窗口句柄
MSG msg ; //消息结构
WNDCLASS wndclass ; //窗口类结构
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;//加载图标供程序使用
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; //加载鼠标指针供程序使用
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//获取一个图形对象,在这个例子中,是获取绘制窗口背景的刷子
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
if (!RegisterClass (&wndclass))//为程序窗口注册窗口类
{
return 0 ;
}
//根据窗口类创建一个窗口
hwnd = CreateWindow (szAppName,
TEXT ("求1-100所有自然数的和"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL) ;
ShowWindow (hwnd, iCmdShow) ; //在屏幕上显示窗口
UpdateWindow (hwnd) ; //指示窗口刷新自身
while (GetMessage (&msg, NULL, 0, 0)) //从消息队列中获取消息
{
TranslateMessage (&msg) ; //转换某些键盘消息
DispatchMessage (&msg) ; //将消息发送给窗口过程
}
return msg.wParam ;
}
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
int sum=0,i;
char str1[40]="1-100自然书数的和是:",str2[10];
for(i=1;i<=100;i++)
{
sum=sum+i;
}
itoa(sum,str2,10); /*将整型变量sum的运算结果转化字符串str2,以方便显示*/
strcat(str1,str2); /*将str1的值(1-100自然书数的和是:)与str2连接,以方便显示*/
switch (message)
{
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ; //开始窗口绘制
GetClientRect (hwnd, &rect) ; //获取窗口客户区的尺寸
DrawText (hdc, TEXT (str1), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; //显示文本串
EndPaint (hwnd, &ps) ; //结束窗口绘制
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ; //在消息队列中插入一条“退出”消息
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam);//执行默认的消息处理
}
运行结果:
