WM_PAINT メッセージ

WM_PAINT メッセージは、システムまたは別のアプリケーションがアプリケーションのウィンドウの一部を描画する要求を行ったときに送信されます。 メッセージは、UpdateWindow または RedrawWindow 関数が呼び出されたとき、またはアプリケーションが GetMessage または PeekMessage 関数を使用してWM_PAINT メッセージを取得するときに DispatchMessage 関数によって送信されます

ウィンドウは、 WindowProc 関数を介してこのメッセージを受け取ります。

LRESULT CALLBACK WindowProc(
  HWND hwnd, 
  UINT  uMsg, 
  WPARAM wParam, 
  LPARAM lParam     
);

パラメーター

wParam

このパラメーターは使用されません。

lParam

このパラメーターは使用されません。

戻り値

このメッセージを処理する場合、アプリケーションは 0 を返します。

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);

            // All painting occurs here, between BeginPaint and EndPaint.
            FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
            EndPaint(hwnd, &ps);
        }
        return 0;
    }

    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

GitHub Windowsクラシック サンプルの例。

注釈

WM_PAINT メッセージはシステムによって生成されるため、アプリケーションから送信しないでください。 ウィンドウを強制的に特定のデバイス コンテキストに描画するには、WM_PRINTまたは WM_PRINTCLIENT メッセージ 使用します。 これには、ターゲット ウィンドウで WM_PRINTCLIENT メッセージをサポートする必要があることに注意してください。 最も一般的なコントロールでは 、WM_PRINTCLIENT メッセージがサポートされています。

DefWindowProc 関数は、更新リージョンを検証します。 また、ウィンドウ フレームを描画する必要がある場合は 、ウィンドウ プロシージャにWM_NCPAINT メッセージを送信し、ウィンドウの背景を消去する必要がある場合は WM_ERASEBKGND メッセージを送信することもできます。

システムは、アプリケーションのメッセージ キューに他のメッセージがない場合に、このメッセージを送信します。 DispatchMessage は、 メッセージを送信する場所を決定します。 GetMessage は、ディスパッチするメッセージを決定します。 GetMessage は、アプリケーションのメッセージ キューに他のメッセージがない場合に WM_PAINT メッセージを返し、 DispatchMessage は 適切なウィンドウ プロシージャにメッセージを送信します。

ウィンドウは、RDW_INTERNALPAINT フラグを設定して RedrawWindow を呼び出した結果、内部ペイント メッセージを受信する場合があります。 この場合、ウィンドウに更新領域がない可能性があります。 アプリケーションは 、GetUpdateRect 関数を呼び出して、ウィンドウに更新領域があるかどうかを判断できます。 GetUpdateRect が 0 を返す場合、アプリケーションは BeginPaint 関数と EndPaint 関数を呼び出す必要はありません。

WM_PAINT メッセージは NULL 以外の更新領域と、RDW_INTERNALPAINT フラグが設定された RedrawWindow の呼び出しの両方によって引き起こされた可能性があるため、アプリケーションは、各WM_PAINT メッセージの内部データ構造を調べることで、必要な内部絵画を確認する必要があります。

システムは、内部 WM_PAINT メッセージを 1 回だけ送信します。 GetMessage または PeekMessage から内部WM_PAINT メッセージが返された後、または UpdateWindow によってウィンドウに送信された後、システムは、ウィンドウが無効になるまで、または RDW_INTERNALPAINT フラグが設定された RedrawWindow が再度呼び出されるまで、メッセージをさらにWM_PAINT投稿または送信しません。

一部の一般的なコントロールでは、既定 のWM_PAINT メッセージ処理で wParam パラメーターがチェックされます。 wParam が NULL 以外の場合、コントロールは値が HDC であると見なし、そのデバイス コンテキストを使用して描画します。

要件

要件
サポートされている最小のクライアント
Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー
Windows 2000 Server [デスクトップ アプリのみ]
ヘッダー
Winuser.h (Windows.h を含む)

こちらもご覧ください

描画と描画の概要

メッセージの描画と描画

BeginPaint

DefWindowProc

DispatchMessage

EndPaint

GetMessage

GetUpdateRect

PeekMessage

RedrawWindow

UpdateWindow

WM_ERASEBKGND

WM_NCPAINT

WM_PRINT

WM_PRINTCLIENT