擦除以前在mfc中绘制的窗口

时间:2016-11-25 05:50:30

标签: c++ mfc

我正在尝试移动基类为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();

}

2 个答案:

答案 0 :(得分:1)

在movewindow()之后调用Invalidate()

答案 1 :(得分:1)

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)。