首先,你不能只是混搭消息在標準的Windows控件中。 BM_SETIMAGE
和STM_SETIMAGE
具有完全不同的值。如果您使用的是靜電控制,請使用STM_SETIMAGE
。如果您使用Button控件,請使用BM_SETIMAGE
。
其次,documentation for STM_SETIMAGE
表示LPARAM
必須是圖像的句柄。您正在傳遞資源ID。您需要先撥打來獲取句柄。例如:
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));
請注意,根據文檔,您負責在完成位圖時刪除位圖。
EDITS:請注意,我在原始版本的代碼中有兩個問題,都是由問題複製和粘貼引起的。我自己沒有通過LPARAM
來處理句柄,我用BM_SETIMAGE
代替STM_SETIMAGE
。我還會在答案中添加一個註釋,正如Cody Gray所指出的,函數或消息的MSDN文檔將告訴您是否可以使用MAKEINTRESOURCE
。
您可能想添加另一個標籤來說明這是什麼。 – Tom