在被叫时画画

时间:2013-08-19 19:41:33

标签: c winapi gdi

我正在尝试将颜色表(已构建)绘制到窗口中的选定区域 我目前正在学习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有红色背景(只是为了测试它是否正常工作)。

执行上述过程后,没有像素被更改。你能解释一下原因吗?

1 个答案:

答案 0 :(得分:4)

每当收到WM_PAINT消息时,都需要一个窗口来绘制自己;通常它会首先获得WM_ERASEBKGND消息以删除背景。如果您不想绘制表格,则需要保留一个标记,您可以在WM_PAINT处理程序中测试该标记以跳过表格的绘制。

在菜单处理程序中,首先设置标志,然后使用InvalidateRect生成WM_PAINT消息。