0

WTLC++は初めてです。特にフラグの場合、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から最後の1つを引いて入れようとしましたが、Visual Studioは、msdn microsoftを読んだとしても、関数は4つのパラメーターを受け取らないと言っています...

4

2 に答える 2

0

グローバルを呼び出していませんRedrawWindow

3つのパラメーターを受け取るメンバー関数を呼び出していCWindow::RedrawWindowます。

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

編集: これらの3つのパラメーターにはすべてデフォルトの引数RedrawWindow()があります。つまり、単独で指定する必要はなく、機能するはずです。

于 2013-03-26T18:14:09.077 に答える
0

これはあなたが使うべき方法ではなく、あなたはAPIを使うことになっています。マウスボタンハンドラーは、更新が必要であるとマークしているウィンドウの特定の部分を呼び出すInvalidate()必要があります。InvalidateRectその後、ウィンドウはWM_PAINT最初のOSの都合の良いときにイベントを受け取り、ペイントハンドラーが線をペイントします。

RedrawWindow今回はうまくいくかもしれませんが、あなたはすでに間違った道を進んでいるので、すぐに次の問題のベースになる可能性があります。

于 2013-03-26T20:58:59.283 に答える