Win32编程入门

最近学校工程实训,非要我们用MFC编程,没办法,入门研究了一晚上的win32编程。

学习各种东西,总是开头比较麻烦,自己总结了下win32编程的简单流程,直接上代码了。

 1 #include <windows.h>
 2 #include <stdio.h>
 3 
 4 // 窗口过程函数
 5 LRESULT CALLBACK WinSunProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
 6 
 7 int WINAPI WinMain(
 8                    HINSTANCE hInstance,         // handle to current instance
 9                    HINSTANCE hPrevInstance,     // handle to previous instance
10                    LPSTR lpCmdLine,             // command line
11                    int nCmdShow                 // show state
12                    )
13 
14 {
15     // 窗口类
16     WNDCLASS wndcls;
17     wndcls.cbClsExtra = 0;                                          // 类附加内存
18     wndcls.cbWndExtra = 0;                                          // 窗口附加内存
19     wndcls.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);    // 背景画刷句柄
20     wndcls.hCursor = LoadCursor(NULL, IDC_CROSS);                   // 窗口光标句柄
21     wndcls.hIcon = LoadIcon(NULL, IDI_ERROR);                       // 窗口图标句柄
22     wndcls.hInstance = hInstance;                                   // 包含窗口过程函数的程序实例
23     wndcls.lpfnWndProc = WinSunProc;                                // 只想窗口过程函数的指针
24     wndcls.lpszClassName = "Kleist";                                // 窗口类名称
25     wndcls.lpszMenuName = NULL;                                     // 菜单资源
26     wndcls.style = CS_HREDRAW | CS_VREDRAW;                         // 窗口样式
27     RegisterClass(&wndcls);
28 
29     // 创建窗口, 定义一个变量用来保存成功创建窗口后返回的句柄
30     HWND hwnd;
31     hwnd = CreateWindow(        // 窗口创建成功时返回为窗口分配的句柄 失败时返回NULL
32         "Kleist",               // 窗口类名
33         "Hello World",          // 窗口名字
34         WS_OVERLAPPEDWINDOW,    // 窗口样式
35         0, 0,                   // 窗口左上角坐标
36         600, 400,               // 窗口宽高
37         NULL,                   // 父窗口句柄
38         NULL,                   // 窗口菜单句柄
39         hInstance,              // 窗口所属应用程序实例
40         NULL                    // WM_CREATE消息附加参数lParam传入的数据指针
41         );
42 
43     // 显示及刷新窗口
44     ShowWindow(hwnd, SW_SHOWNORMAL);
45     UpdateWindow(hwnd);
46 
47     // 定义消息结构体
48     MSG msg;
49     while (GetMessage(  // WM_QUIT消息返回0 错误返回-1
50         &msg,           // 指向消息的结构体
51         NULL,           // 指定接收属于哪一窗口的消息 通常设为NULL,用来接收属于调用线程的所有窗口的窗口消息
52         0,              // 获取消息的最小值 通常为0
53         0))             // 获取消息的最大值 都设为0表示接收所有消息
54     {
55         TranslateMessage(&msg);     // 将虚拟消息转换为字符消息 投递到调用线程的消息队列中 下次调用GetMessage时被取出
56         DispatchMessage(&msg);      // 将消息传递给操作系统 由操作系统调用窗口过程函数对消息进行处理
57     }
58     return msg.wParam;
59 }
60 
61 // 窗口过程函数
62 LRESULT CALLBACK WinSunProc(
63     HWND hwnd,          // 窗口句柄
64     UINT uMsg,          // 消息代码
65     WPARAM wParam,      // 附加参数
66     LPARAM lParam
67 )
68 {
69     switch(uMsg)
70     {
71     case WM_CHAR:
72         char szChar[20];
73         sprintf(szChar, "char code is %d", wParam);
74         MessageBox(hwnd, szChar, "char", 0);
75         break;
76 
77     default:
78         return DefWindowProc(hwnd, uMsg, wParam, lParam);
79     }
80 
81     return 0;
82 }

 

具体也就是WinMain函数作为程序入口,相当于main函数

然后定义窗口类 绑定过程函数,创建窗口实例,显示并刷新窗口实例,建立消息队列。
对着代码看一些参考资料应该就够了。

posted @ 2012-06-27 18:18  肆然  阅读(1301)  评论(3)    收藏  举报