0

私のプログラムは、画面上にランダムな長方形を作成します。マウスの左ボタンをクリックするたびに、ランダムなサイズと色の新しい長方形がウィンドウに追加されます。ただし、ウィンドウのサイズを変更すると、すべての長方形が削除されます。これは発生させたくありません。サイズを変更したときにプログラムが何をするのかわかりませんが、ケースを呼び出していWM_PAINTますか?その場合、サイズ変更時に現在のウィンドウの状態を維持するために何を含める必要がありますか。

4

2 に答える 2

1

WM_PAINTを受信するたびに、状態を保存して再描画する必要があります。これは、Microsoftが決定したプロトコルにすぎません。したがって、ウィンドウの状態をメモリに保持するようにしてください。

サイズ変更の場合、いくつかのサイズ設定メッセージも表示されます。最初にサイズが変更されている間の一連のWM_SIZINGイベント、次にサイズが最終的に設定されたときのWM_SIZEです。間にWM_PAINTメッセージが表示され、これらのイベントのいずれかまたはすべてでアプリケーションを自由に再描画できます。

于 2012-10-13T21:30:02.943 に答える
0

GDIを使用したペイントに関する同様の質問に対する私の回答を参照してください。

https://stackoverflow.com/a/12764607/682404

基本的に、ウィンドウのサイズが変更されると、WM_PAINTWindowsからメッセージを受信するはずです。メッセージハンドラーで、フォームを再描画する必要があります。私がリンクした答えには、ペイントプロセスに関する詳細がいくつかあります。ペイントコードは次のように荒々しく見えます。

PAINTSTRUCT stPaintStruct;
HDC hPaintDC = BeginPaint(hWnd, &stPaintStruct);

if (hPaintDC != HANDLE_NULL)
{
    // establish clipping rect using stPaintStruct.rcPaint

    if (!m_bRendering)
    {
        m_bRendering = TRUE;

        // Render() knows the how to create the output.
        Render ();

        m_bRendering = FALSE;
    }

    EndPaint (hWnd, &stPaintStruct);
    return (TRUE);
}

ウィンドウをペイントする必要があるたびに、常に最初からペイントする必要があるため、長方形の座標をどこかに保存する必要があります。

于 2012-10-13T21:27:32.277 に答える