我正在尝试在我的窗口中的选定区域绘制一个颜色表(已经构建)。
我目前正在学习 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
有红色背景(只是为了测试它是否正常工作)。
执行上述过程后,没有像素发生变化。你能解释一下为什么吗?
最佳答案
每当窗口收到WM_PAINT
消息时,它就需要绘制自己;通常它会先收到一条 WM_ERASEBKGND
消息来删除背景。如果您不想绘制表格,则需要保留一个标志,您可以在 WM_PAINT
处理程序中测试该标志以跳过表格的绘制。
在您的菜单处理程序中,首先设置标志,然后使用 InvalidateRect
导致生成 WM_PAINT
消息。
关于c - 调用时绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321798/