WIN32.01.最简单的Windows应用程序

 1 /*
 2 最简单的Windows应用程序
 3 如你所想,这是最简单的Windows应用程序,仅仅启动一个窗体,但是它具备了最大化,最小化,窗口缩放,关闭等基本功能。
 4 此为标准的Windows应用程序,我们可以在此基础上进行扩展,实现更复杂的应用,如添加新控件、菜单,多窗体甚至绘图等。
 5 
 6 Windows程序都要注册窗口类(10个参数,包含窗口处理程序);然后CreateWindow,ShowWindow,UpdateWindow实现窗口
 7 的创建,显示及更新;然后启用消息循环(传输,分发);注意消息处理函数,必须处理WM_DESTROY消息。
 8 关于Windows的消息处理机制,侯捷《深入浅出MFC》一书也有详细的介绍,可以参考。
 9 
10 程序来自《Programming Windows》,作者Chales Petzold,此程序只是备忘。 2010-07-18 Phoenix @home
11 */
12 #include <Windows.h>
13 
14 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
15 {
16     switch (message)
17     {
18     case WM_DESTROY:
19         PostQuitMessage(0);
20         return 0;
21     }
22     return DefWindowProc(hwnd,message,wParam,lParam);
23 }
24 
25 int __stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
26 {
27     TCHAR szAppName[] = L"SimpleWindow";
28     MSG msg;
29     HWND hwndMain;
30     WNDCLASS wndclass;
31 
32     //wndclass 结构共有10个成员,必须要全部设置才能注册成功
33     wndclass.lpszClassName = szAppName;
34     wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
35     wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
36     wndclass.lpfnWndProc = WndProc;    //指定窗口的消息处理过程
37     wndclass.hInstance = hInstance;
38     wndclass.cbClsExtra = 0;
39     wndclass.cbWndExtra = 0;
40     wndclass.style = CS_HREDRAW | CS_VREDRAW;
41     wndclass.lpszMenuName = NULL;
42     wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
43 
44     if (!RegisterClass(&wndclass))    //注册窗口类
45     {
46         MessageBox(NULL,TEXT("This Program requires Windows NT."),TEXT("Windows NT Required"),MB_ICONSTOP);
47         return 0;
48     }
49 
50     //CreateWindow,ShowWindow,UpdateWindow:创建窗口,显示并更新窗口视图
51     hwndMain = CreateWindow(szAppName,TEXT("The Simple Windows Application"),    WS_OVERLAPPEDWINDOW, 
52         CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
53         NULL, NULL,hInstance, NULL);
54     ShowWindow(hwndMain,nShowCmd);
55     UpdateWindow(hwndMain);
56 
57     //Message Loop:启动消息循环
58     while(GetMessage(&msg,NULL,0,0))
59     {
60         TranslateMessage(&msg);
61         DispatchMessage(&msg);
62     }
63 
64     return msg.wParam ;
65 }


原文地址:https://www.cnblogs.com/flaaash/p/1780284.html