2013-07-26 62 views
1

我想在我的圖片控件上顯示一個位圖, 但實際上無論我在嘗試什麼,它都不起作用。 現在我的方法是這樣的:C++添加一個位圖從資源到圖片控制

SendDlgItemMessage(hWnd ,picture_CTRL, BM_SETIMAGE , IMAGE_BITMAP, (LPARAM) MAKEINTRESOURCE(IDB_BITMAP1)); 

我也已經嘗試使用

STM_SETIMAGE 

消息,但它不會正常工作。 我的圖片控件屬性「類型」設置爲「位圖」和我的位圖在resource.h中的ID

希望你們能幫助:)

+0

您可能想添加另一個標籤來說明這是什麼。 – Tom

回答

3

首先,你不能只是混搭消息在標準的Windows控件中。 BM_SETIMAGESTM_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

+1

+1問題的好摘要。值得指出的是,在可以使用'MAKEINTRESOURCE'宏的情況下,這將在文檔中清楚地註明。 –