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 }
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 }