WIN32窗口模板

  1 // WINATLTest.cpp : 定义应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include "WINATLTest.h"
  6 
  7 #define MAX_LOADSTRING 100
  8 
  9 // 全局变量:
 10 HINSTANCE hInst;                                // 当前实例
 11 TCHAR szTitle[MAX_LOADSTRING];                    // 标题栏文本
 12 TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
 13 
 14 // 此代码模块中包含的函数的前向声明:
 15 ATOM                MyRegisterClass(HINSTANCE hInstance);
 16 BOOL                InitInstance(HINSTANCE, int);
 17 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
 18 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 19 
 20 int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
 21                      _In_opt_ HINSTANCE hPrevInstance,
 22                      _In_ LPTSTR    lpCmdLine,
 23                      _In_ int       nCmdShow)
 24 {
 25     UNREFERENCED_PARAMETER(hPrevInstance);
 26     UNREFERENCED_PARAMETER(lpCmdLine);
 27 
 28      // TODO: 在此放置代码。
 29     MSG msg;
 30     HACCEL hAccelTable;
 31 
 32     // 初始化全局字符串
 33     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 34     LoadString(hInstance, IDC_WINATLTEST, szWindowClass, MAX_LOADSTRING);
 35     MyRegisterClass(hInstance);
 36 
 37     // 执行应用程序初始化:
 38     if (!InitInstance (hInstance, nCmdShow))
 39     {
 40         return FALSE;
 41     }
 42 
 43     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINATLTEST));
 44 
 45     // 主消息循环:
 46     while (GetMessage(&msg, NULL, 0, 0))
 47     {
 48         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
 49         {
 50             TranslateMessage(&msg);
 51             DispatchMessage(&msg);
 52         }
 53     }
 54 
 55     return (int) msg.wParam;
 56 }
 57 
 58 
 59 
 60 //
 61 //  函数: MyRegisterClass()
 62 //
 63 //  目的: 注册窗口类。
 64 //
 65 ATOM MyRegisterClass(HINSTANCE hInstance)
 66 {
 67     WNDCLASSEX wcex;
 68 
 69     wcex.cbSize = sizeof(WNDCLASSEX);
 70 
 71     wcex.style            = CS_HREDRAW | CS_VREDRAW;
 72     wcex.lpfnWndProc    = WndProc;
 73     wcex.cbClsExtra        = 0;
 74     wcex.cbWndExtra        = 0;
 75     wcex.hInstance        = hInstance;
 76     wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINATLTEST));
 77     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
 78     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
 79     wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_WINATLTEST);
 80     wcex.lpszClassName    = szWindowClass;
 81     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 82 
 83     return RegisterClassEx(&wcex);
 84 }
 85 
 86 //
 87 //   函数: InitInstance(HINSTANCE, int)
 88 //
 89 //   目的: 保存实例句柄并创建主窗口
 90 //
 91 //   注释:
 92 //
 93 //        在此函数中,我们在全局变量中保存实例句柄并
 94 //        创建和显示主程序窗口。
 95 //
 96 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 97 {
 98    HWND hWnd;
 99 
100    hInst = hInstance; // 将实例句柄存储在全局变量中
101 
102    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
103       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
104 
105    if (!hWnd)
106    {
107       return FALSE;
108    }
109 
110    ShowWindow(hWnd, nCmdShow);
111    UpdateWindow(hWnd);
112 
113    return TRUE;
114 }
115 
116 //
117 //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
118 //
119 //  目的: 处理主窗口的消息。
120 //
121 //  WM_COMMAND    - 处理应用程序菜单
122 //  WM_PAINT    - 绘制主窗口
123 //  WM_DESTROY    - 发送退出消息并返回
124 //
125 //
126 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
127 {
128     int wmId, wmEvent;
129     PAINTSTRUCT ps;
130     HDC hdc;
131 
132     switch (message)
133     {
134     case WM_COMMAND:
135         wmId    = LOWORD(wParam);
136         wmEvent = HIWORD(wParam);
137         // 分析菜单选择:
138         switch (wmId)
139         {
140         case IDM_ABOUT:
141             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
142             break;
143         case IDM_EXIT:
144             DestroyWindow(hWnd);
145             break;
146         default:
147             return DefWindowProc(hWnd, message, wParam, lParam);
148         }
149         break;
150     case WM_PAINT:
151         hdc = BeginPaint(hWnd, &ps);
152         // TODO: 在此添加任意绘图代码...
153         EndPaint(hWnd, &ps);
154         break;
155     case WM_DESTROY:
156         PostQuitMessage(0);
157         break;
158     default:
159         return DefWindowProc(hWnd, message, wParam, lParam);
160     }
161     return 0;
162 }
163 
164 // “关于”框的消息处理程序。
165 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
166 {
167     UNREFERENCED_PARAMETER(lParam);
168     switch (message)
169     {
170     case WM_INITDIALOG:
171         return (INT_PTR)TRUE;
172 
173     case WM_COMMAND:
174         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
175         {
176             EndDialog(hDlg, LOWORD(wParam));
177             return (INT_PTR)TRUE;
178         }
179         break;
180     }
181     return (INT_PTR)FALSE;
182 }
View Code
原文地址:https://www.cnblogs.com/elitiwin/p/4204800.html