まず、標準の Windows コントロールでメッセージを単純に組み合わせることはできません。BM_SETIMAGEとSTM_SETIMAGE全く異なる価値観を持っています。スタティック コントロールを使用している場合は、 を使用しますSTM_SETIMAGE。Button コントロールを使用している場合は、 を使用しますBM_SETIMAGE。
次に、 のドキュメントにSTM_SETIMAGEは、LPARAMがイメージのハンドルである必要があると記載されています。リソース ID を渡しています。LoadImage最初に呼び出してハンドルを取得する必要があります。例えば:
HBITMAP hBitmap = reinterpret_cast<HBITMAP>(LoadImage(
GetModuleHandle(NULL),
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP,
0,
0,
0));
SendDlgItemMessage(
hWnd,
picture_CTRL,
STM_SETIMAGE,
IMAGE_BITMAP,
reinterpret_cast<LPARAM>(hBitmap));
ドキュメンテーションによると、ビットマップを使い終わったら、ビットマップを削除する責任があることに注意してください。
編集: 元のバージョンのコードに 2 つの問題があったことに注意してください。どちらも質問からのコピーと貼り付けが原因です。ハンドルをLPARAM自分自身として渡すのに失敗し、BM_SETIMAGE代わりにを使用しましたSTM_SETIMAGE。また、Cody Gray が指摘したように、関数またはメッセージの MSDN ドキュメントで、 を使用できるかどうかがわかりますMAKEINTRESOURCE。