将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);//执行默认的消息处理
}

运行结果: