WTL RedrawWindow参数

时间:2013-03-26 17:54:21

标签: c++ redraw wtl

我是WTL C ++的新手。我真的很困惑RedrawWindows函数中的参数,特别是对于标志。我只是想在每次画线时更新一个窗口,但我并不完全理解如何

LRESULT  CDrawView::OnLButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    int xPos= GET_X_LPARAM(lParam);
    int yPos = GET_Y_LPARAM(lParam);
    end.X = xPos;
    end.Y = yPos;

    Pen pen(Color(0, 0, 255));
    m_GraphicsImage.DrawLine(&pen, start.X, start.Y, end.X, end.Y);

我尝试在这里调用RedrawWindow,

RedrawWIndow(NULL,NULL, NULL, RDW_INTERNALPAINT) 

所以每当我释放鼠标左键时,窗口都会更新。我很难理解Redraw功能中的参数。我尝试将它们全部置为null而不是最后一个但是Visual Studio说该函数不会占用4个参数,即使我读过msdn microsoft ...

2 个答案:

答案 0 :(得分:0)

您没有致电全球RedrawWindow

您正在调用成员函数CWindow::RedrawWindow,该函数需要3个参数。

BOOL RedrawWindow(
   LPCRECT lpRectUpdate = NULL,
   HRGN hRgnUpdate = NULL,
   UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE 
); throw() 

修改 这三个参数都有默认参数,这意味着它们不需要单独提供RedrawWindow()就可以了。

答案 1 :(得分:0)

这不是您应该使用的方式,您应该使用API​​。您的鼠标按钮处理程序应该使用您标记为需要更新的窗口的特定部分来调用Invalidate()InvalidateRect。然后,您的窗口将在第一次操作系统方便时接收WM_PAINT事件,您的绘制处理程序将绘制该线。

RedrawWindow这次可能会解决,但很快可能会成为下一个问题的基础,因为你已经走错了路。