Windows窗口创建的基本代码:
#include <Windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in LPSTR lpCmdLine, __in int nShowCmd ) { TCHAR* appName = TEXT("Demo"); HWND hwnd; MSG msg; WNDCLASS wndClass; wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.lpfnWndProc = WndProc; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = hInstance; wndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndClass.hCursor = LoadCursor(NULL, IDC_ARROW); wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wndClass.lpszMenuName = NULL; wndClass.lpszClassName = appName; if(!RegisterClass(&wndClass)) { MessageBox(NULL, TEXT("Register Class Error"), appName, 0); return 0; } hwnd = CreateWindow( appName, TEXT("Demo"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); ShowWindow(hwnd, nShowCmd); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch(msg) { case WM_CREATE: { return 0; } case WM_PAINT: { hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); DrawText(hdc, TEXT("Ray_xujianguo"), -1, &rect, DT_SINGLELINE|DT_CENTER|DT_VCENTER); EndPaint(hwnd, &ps); return 0; } case WM_DESTROY: { PostQuitMessage(0); return 0; } } return DefWindowProc(hwnd, msg, wParam, lParam); }
下面一部分一部分来解释:
1.里面有一些函数我们来看看它们的作用
LoadIcon 加载图标
LoadCursor 加载鼠标光标
GetStockObject 获取一个图形对象,本例子是获取一个画刷
RegisterClass 注册一个窗口类
MessageBox 消息框
CreateWindow 创建一个窗口
ShowWindow 显示窗口
UpdateWindow 重绘窗口
GetMessage 从消息队列中获取信息
TranslateMessage 翻译键盘消息
DispatchMessage 将消息转发给窗口
BeginPaint 窗口开始绘制
GetClientRect 获取窗口客户区的尺寸
DrawText 显示一个文本字符串
EndPaint 结束窗口的绘制
PostQuitMessage 将”退出“消息插入消息队列中
DefWindowProc 执行默认的消息处理
2.一些数值常量
在上面的程序中我们看到了CW_USEDEFAULT等常量,其实我们从前面的大写字母就可以看到这个常量的类型是什么了。
前缀 常量
CS 类风格选项
CW 创建窗口选项
DT 文本绘制选项
IDI 图标的ID号
IDC 光标的ID号
MB 消息框选项
WM 窗口消息
WS 窗口风格
3.理解句柄
HINSTANCE 实例句柄-程序本身
HWND 窗口句柄
HDC 设备环境句柄
4.窗口类的注册
看看WNDCLASS的内容:
5.窗口的创建
窗口类只是定义了窗口的一般特征,因此基于同一窗口类可以创建许多不同的窗口,在调用CreateWindow函数来创建窗口的时候,可以指定更多细节。
6.窗口的显示
7.消息循环
先是从消息队列中获取消息,然后翻译键盘的消息,再把消息转发给窗口过程函数处理,窗口程序函数处理完毕后,就立即进行下一轮的消息循环。
8.窗口过程函数