spongebobyey 发表于 2019-10-12 23:27:09

随机矩形

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?mod=viewthread&tid=48214&extra=page%3D1%26filter%3Dtypeid%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);
}
页: [1]
查看完整版本: 随机矩形