我正在尝试将颜色表(已构建)绘制到窗口中的选定区域 我目前正在学习this来源。但是,在所有给定的代码示例中,只要窗口打开就会执行绘制。
如果我想在单击菜单项时或者不在开头时想要绘图,我该怎么办?
修改
我创建了一个名为GifPanel
的新窗口,将被绘制。
我的变数:
HWND GifPanel;
RECT r;
我的GifPanelProc:
case WM_PAINT:
DrawFrame(GifPanel); // DrawFrame uses BeginPaint, SetPixel, EndPaint in order to draw
break;
接下来,我有一个功能,通过点击执行以下操作:
GetClientRect(GifPanel, &r);
InvalidateRect(GifPanel, &r, FALSE);
首次打开窗口时,我可以看到GifPanel
有红色背景(只是为了测试它是否正常工作)。
执行上述过程后,没有像素被更改。你能解释一下原因吗?
答案 0 :(得分:4)
每当收到WM_PAINT
消息时,都需要一个窗口来绘制自己;通常它会首先获得WM_ERASEBKGND
消息以删除背景。如果您不想绘制表格,则需要保留一个标记,您可以在WM_PAINT
处理程序中测试该标记以跳过表格的绘制。
在菜单处理程序中,首先设置标志,然后使用InvalidateRect
生成WM_PAINT
消息。