马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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);
}
|