【问题标题】:Erase previously drawn window in mfc擦除先前在 mfc 中绘制的窗口
【发布时间】:2016-11-26 05:55:19
【问题描述】:

我试图移动一个基类为 CWnd 的自定义按钮,我正在使用 MoveWindow() 方法,但每次我移动窗口时,之前绘制的窗口仍然可见。我尝试在父窗口上调用 InvalidateWindow、InvalidateRect 和 UpdateWindow,但都不起作用。我也试过 RedrawWindow 什么也没发生。如何使用按钮的新位置正确更新父窗口? 这是我的示例代码

void CCalendarCtrl::Shift()
{
   RECT rc;
   m_Up.GetWindowRect(&rc);
   rc.top -= 20;
   rc.bottom -=20;
   m_Up.MoveWindow(&rc,TRUE);
   RedrawWindow();

}

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:

    在 movewindow() 之后调用 Invalidate()

    【讨论】:

      【解决方案2】:

      https://social.msdn.microsoft.com/Forums/en-US/d6da8041-747c-4b31-b493-343e4516b452/are-the-coordinates-returned-by-cwndgetwindowrect-mfc-and-cwndmovewindow-mfc?forum=vcmfcatl

      GetWindowRect 返回屏幕坐标。 MoveWindow 使用客户端坐标工作。所以你需要在两次调用之间做 ScreenToClient(&rc)。

      【讨论】:

        猜你喜欢
        • 2015-06-19
        • 1970-01-01
        • 2011-11-24
        • 1970-01-01
        • 2013-07-27
        • 2012-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多