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.窗口过程函数
时间: 2024-11-02 23:38:58