c - 调用时绘制

标签 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 有红色背景(只是为了测试它是否正常工作)。

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

最佳答案

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

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

关于c - 调用时绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18321798/

相关文章:

c - c中的时间函数不断返回-1

c - 在 C 中添加到链表的前面

c++ - exe导入dll序号与DLL导出函数名比较?

创建和使用字体/避免 Windows GDI 中的内存泄漏

python - wxPython : GDI ressources are not release after wxFrame. 销毁()

c++ - Windows GDI 上下文 - CreateDIBSection

c - 从函数返回时小数部分丢失

C. 函数修改动态分配的二维数组时的段错误

c++ - Windows 上的 std::conditional_variable::wait_for、std::thread::sleep_for 受调整时钟的影响

winapi - 在纯IPv6机器中使用powershell设置Win32_NetworkAdapterConfiguration的 "SetDNSServerSearchOrder"方法