0

我是 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) 

所以每次我释放鼠标左键时,窗口都会更新。我很难理解进入重绘函数的参数。我尝试将它们全部设为 null 减去最后一个,但 Visual Studio 说该函数不采用 4 个参数,即使我阅读了 msdn microsoft...

4

2 回答 2

0

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

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

于 2013-03-26T20:58:59.283 回答
0

您没有调用全局RedrawWindow.

您正在调用成员函数CWindow::RedrawWindow,它接受 3 个参数。

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

编辑: 这三个参数都有默认参数,这意味着它们不需要RedrawWindow()单独提供。

于 2013-03-26T18:14:09.077 回答