0

WM_ERASEBKGND を無効にする必要があるプログラムに取り組んでいます (ちらつきを避けるため)。

メイン ウィンドウがフォーカスを失い、別のウィンドウ (別のプログラム) がフォーカスを取得すると、問題が発生します。

フォーカスのあるウィンドウ (私のプログラムではない) は、その上を通過するたびに私のプログラムのウィンドウを無効にします! その結果、私のウィンドウの画面は、別のウィンドウが通過したすべての場所で白くなり、その後はほぼ完全に空白のままになります。明らかに、フォーカスが失われるたびに画面が白くなるようなプログラムを作成することはできません。

ウィンドウがフォーカスを失った (WM_KILLFOCUS) 後でも、ウィンドウの描画操作を続行する方法はありますか (たとえば、wm_paint を呼び出し続ける)。

4

1 に答える 1

3

まず、上記のコメントから、またはを使用して手動で送信しないでください。ウィンドウを再描画するように指示するために使用します。WM_PAINTSendMessagePostMessageInvalidateRect

については、ペイント手順を最適化できる場合にWM_ERASEBKGND、戻り値を使用して、背景が消去されたことをハンドラーに示します。WM_PAINT背景が消去されるのを実際に防ぐには、単にDefWndProc()そのメッセージを呼び出さないでください。または、さらに簡単に、ウィンドウ クラスでhbrBackgroundtoを設定します。NULL

他の人が述べたように、フォーカスは再描画とは何の関係もなく、ウィンドウはバックグラウンドであっても通常どおりに描画する必要があります。

于 2012-11-20T21:51:39.910 に答える