まず、標準の 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
。