【问题标题】:Draw when called调用时绘制
【发布时间】:2013-08-21 17:19:38
【问题描述】:

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

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

【问题讨论】:

    标签: c winapi gdi


    【解决方案1】:

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

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

    【讨论】:

    • 您能检查我的编辑吗?我在实施您的解决方案时遇到了一些问题。
    • 做一些调试。您所展示的内容看起来还不错,但是您还没有展示进行绘画的代码。该代码是否执行?你试过让它画一个矩形,这样你就可以看到它正在使用的坐标?
    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多