ビットマップが STM_SETIMAGE メッセージで変更された後、静的コントロールがその領域を無効にしないのが正常かどうかを誰かに教えてもらえますか?
SS_BITMAP スタイルの静的コントロールを使用し、次のコードでその画像を設定します
HBITMAP DestBmp;
// Paint on DestBmp...
HBITMAP hOldBmp = (HBITMAP) ::SendMessage(hStatic, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM) DestBmp);
if (hOldBmp)
DeleteObject(hOldBmp);
// *** Why do I need this? ***
::InvalidateRect(hStatic, NULL, FALSE);
InvalidateRect を呼び出さないと、静的コントロールはそれ自体を再描画しません。これは STM_SETIMAGE の通常の動作ですか、それとも何か間違っていますか? MSDNのドキュメントには、STM_SETIMAGE の後に InvalidateRect を呼び出す必要があることについては何も言及されていません。たとえば、SetWindowText の後に InvalidateRect を呼び出す必要はありません。これは、私のコードに何か問題があるのではないかと考えさせます。
アップデート
これは、私の.rcファイルでコントロールが定義されている方法です
CONTROL "",IDC_IMAGE_PREVIEW,"Static",SS_BITMAP | NOT WS_VISIBLE,29,293,15,13
NOT WS_VISIBLE
フラグは問題ありません。後でコントロールを表示しますShowWindow(SW_SHOW);
。