|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1.当消息空闲时,执行其他操作
2.改造消息循环
2.1 vs2008提供的消息循环函数
TranslateAccelerator函数处理菜单命令的快捷键。
- while (GetMessage(&msg, NULL, 0, 0))
- {
- if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- }
复制代码
该函数将WM_KEYDOWN或WM_SYSKEYDOWN消息转换为WM_COMMAND或WM_SYSCOMMAND消息(如果指定的加速器表中有键的条目),然后将WM_COMMAND或WM_SYSCOMMAND消息直接发送到指定的窗口过程。TranslateAccelerator直到窗口过程处理完消息后才返回。
2.2 小甲鱼改造后的消息循环
- while (TRUE)
- {
- if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) //查看其中是否有消息
- {
- if (msg.message == WM_QUIT) //如果退出窗口,直接退出本次循环
- {
- break;
- }
- TranslateMessage(&msg); //处理消息
- DispatchMessage(&msg);
- }
- else
- {
- DrawRectangle(hwnd); //没有消息绘制矩形
- }
- }
- return msg.wParam;
- }
复制代码
可以区扩展阅读中看一下 系统如何销毁一个窗口
传送门:https://fishc.com.cn/forum.php?m ... peid%26typeid%3D405
Peekmessage //
- void DrawRectangle(HWND hwnd)
- {
- HBRUSH hBrush;
- HDC hdc;
- RECT rect;
- if (cxClient == 0 || cyClient == 0)
- return;
- SetRect(&rect, rand() % cxClient, rand() % cyClient, rand() % cxClient, rand() % cyClient);
- hBrush = CreateSolidBrush(RGB(rand() % 256, rand() % 256, rand() % 256));
- hdc = GetDC(hwnd);
- FillRect(hdc, &rect, hBrush);
- DeleteObject(hBrush);
- ReleaseDC(hwnd, hdc);
- }
复制代码 |
|