1

我正在尝试将颜色表(已经构建)绘制到窗口中的选定区域。
我目前正在从这个来源学习。但是,在所有给定的代码示例中,只要打开窗口,就会执行绘制。

如果我希望在单击菜单项时出现绘图,或者只是在开始时不出现,我应该怎么做?

编辑:

我创建了一个名为的新窗口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有一个红色背景(只是为了测试它是否正常工作)。

执行上述过程后,没有任何像素发生变化。你能解释一下为什么吗?

4

1 回答 1

4

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

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

于 2013-08-19T19:48:26.360 回答