技术小咖之基于SDK的第一个windows图形界面程序

第一个SDK应用程序hello world

1、利用vc6.0创建第一个SDK的windows图形界面应用程序

运行Microsoft Visual C++ 6.0,选择file-->new子菜单,弹出相应窗口。

该对话框有四个选项卡:Files、Projects、workspace以及Othere Documents。

Files与创建文件有关。比如头文件、源文件。

Projects与创建工程有关。

Workspace与创建工作区有关。

Othere Documents 与创建微软的其他文件有关,比如word文档等。

我们选择Projects选项卡,Microsoft Visual C++ 6.0可以创建很多类型的工程,以适应不同的应用需求。其中常用的6种在图中用数字标示出来了。每种创建的工程如下:

①用于创建MFC 动态链接库

②用于创建MFC的应用程序

③用于创建SDK的win32应用程序

④用于创建控制台应用程序

⑤用于创建win32动态链接库(基于SDK的动态链接库 )

⑥用于创建win32的静态链接库(基于SDK的静态链接库 )

 

我们在学习c语言或c++时,都是创建的控制台应用程序,也就是选择的第4种。现在我们创建一个SDK的win32应用程序,必须选择第三项,也就是图中蓝色的选项。

控制台应用程序和SDK的win32应用程序有什么区别呢?

主要是Microsoft Visual C++ 6.0运行时库调用的入口函数不一样。

控制台应用程序调用的入口函数是:main函数。其函数原型为:

main( int argc, char *argv[ ], char *envp[ ] )。

win32应用程序应用程序的入口函数为:WinMain函数。其函数原型为:

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)。

一定要注意,如果创建的是控制台应用程序,而主函数使用的是 WinMain函数,编译是会出错的,因为控制台应用程序入口函数都是main函数。(初学者经常会犯这种错误而不自知)。

在Project name 中输入项目名the hello program。

在location文本框中输入项目的路径,或者点击location文本框后面的文件浏览按钮来选择文件路径。点击OK。

选择单选框的第二项。点Finish。

在新创建的工程中会自动给我们创建一个与工程名相同的.cpp文件。在文件中添加代码。其中加粗的部分为新添加的代码:

#include <windows.h>     //1:必须包含头文件windows.h

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; //2:声明窗口过程函数

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

                    PSTR szCmdLine, int iCmdShow)     //3:windows应用程序的入口函数

{

     static TCHAR szAppName[] = TEXT ("HelloWin") ;   //4:定义窗口类型名变量

     HWND         hwnd ;                           //5:定义窗口句柄

     MSG          msg ;                             //6:定义消息结构体对象

     WNDCLASS     wndclass ;                       //7:定义要注册的窗口结构体

     wndclass.style         = CS_HREDRAW | CS_VREDRAW ;   //8: 窗口风格

     wndclass.lpfnWndProc   = WndProc ;                       //9: 窗口过程函数

     wndclass.cbClsExtra    = 0 ;                       //10:该类型窗口的附加内存

     wndclass.cbWndExtra    = 0 ;                      //11:窗口对象的附加内存

     wndclass.hInstance     = hInstance ;   //12:窗口的应用程序实例句柄(产生窗口时有操作系统生成)

     wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ; //13:应用程序图标

     wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;    //14:应用程序光标

     wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;//15:应用程序背景刷

     wndclass.lpszMenuName  = NULL ;                  //16:应用程序菜单

     wndclass.lpszClassName = szAppName ;               //17:窗口类型

     if (!RegisterClass (&wndclass))           //18:在操作系统中注册第7~17步中定义的窗口类型

     {

          MessageBox (NULL, TEXT ("This program requires Windows NT!"),

                      szAppName, MB_ICONERROR) ;

          return 0 ;

     }

     hwnd = CreateWindow (szAppName,       //19:创建窗口,第一个参数为注册时的窗口类型名           

                       TEXT ("The Hello Program"),   //20:窗口标题

                        WS_OVERLAPPEDWINDOW, //21:窗口风格                              

                       CW_USEDEFAULT,          //22:窗口初始位置x坐标                                 

                       CW_USEDEFAULT,          //23:窗口初始位置y坐标                                  

                       CW_USEDEFAULT,          //24:窗口大小之宽度                              

                       CW_USEDEFAULT,          //25:窗口大小之高度                              

                       NULL,                     //26:父窗口句柄 

                       NULL,                     //27:窗口菜单句柄                         

                       hInstance,                   //28:应用程序实例句柄,与第12步中的一样

                       NULL                      //29:传递给窗口过程函数的lParam参数指针   

         ) ;

     ShowWindow (hwnd, iCmdShow) ;                //30:显示窗口

     UpdateWindow (hwnd) ;                         //31:更新窗口

     while (GetMessage (&msg, NULL, 0, 0))           //32:消息循环

     {

          TranslateMessage (&msg) ;                 //33:消息转换

          DispatchMessage (&msg) ;                 //34:分派消息

     }

     return msg.wParam ;

}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)

{//35:窗口过程函数,也叫回调函数

     HDC         hdc ;        //36:设备上下文句柄

     PAINTSTRUCT ps ;        //37:调用BeginPaint获取设备句柄是需要传递的参数

     RECT        rect ;        //38:矩形结构体对象

     switch (message)           //39:处理消息

     {

     case WM_CREATE:        //40:处理WM_CREATE消息

          PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ;

          return 0 ;

     case WM_PAINT:         //41:处理WM_PAINT

          hdc = BeginPaint (hwnd, &ps) ;

          GetClientRect (hwnd, &rect) ;

          DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect,

                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

          EndPaint (hwnd, &ps) ;

          return 0 ;

     case WM_DESTROY:    //42:处理WM_DESTROY

          PostQuitMessage (0) ;   //43:发送一个WM_QUIT消息

          return 0 ;

     }

     return DefWindowProc (hwnd, message, wParam, lParam) ;  //44:调用windows默认的窗口过程函数

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术小咖龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值