2014-10-22 54 views
-1

CBitmap :: Setbitmap不能與Windows XP一起使用。實際上,我使用的是Windows7操作系統,我有一個對話框應用程序,使用CBitmap :: Setbitmap將位圖加載到按鈕上。CBitmap :: Setbitmap不適用於Windows XP?

當我在windows xp機器上運行我的應用程序時,我沒有獲得我在按鈕上加載的位圖。

這是怎麼了裝載和設置位圖,

CButton *pMyButton = (CButton*)GetDlgItem(IDC_ADD_BTN); 
BitmapStd.LoadBitmap(IDB_STANDARD_IDEAL_BMP); 
HBITMAP hBitmap = (HBITMAP)BitmapStd.GetSafeHandle(); 
pMyButton->SetBitmap(hBitmap); 

是否有任何其他的方式來實現這一目標?如果可能的話,請解釋一下我用一個例子。

+0

請顯示您使用的確切代碼。沒有它,我們無法幫助。 – user1793036 2014-10-22 05:45:16

+0

正如你所說我編輯了我的原始文章。請看看這個,請讓我知道一個解決方案。 – Siva 2014-10-27 06:21:35

回答

0

由於@Pierre Fournier建議修改我的加載BITMAP的代碼,如下所示。

爲了加載在任何操作系統上,這是一個按鈕位圖來完成,

CButton *pMyButton = reinterpret_cast<CButton*>GetDlgItem(IDC_MY_BUTTON); 
HANDLE handle = LoadImage(GetModuleHandle(bitmpa.dll), MAKEINTRESOURCE(IDB_MY_BMP), 
          IMAGE_BITMAP, 64, 64, 0); 
HBITMAP hBmp = static_cast<HBITMAP >(handle); 
SendMessage(pMyButton->GetSafeHwnd(), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBmp); 

DeleteObject(hBmp);//Deletes the attached Windows GDI object from memory by freeing all system //storage associated with the Windows GDI object. 

這是爲我工作的罰款,我在幾個操作系統只測試。

1

這是我要做的事在Win32中

HWND ctrl = GetDlgItem(m_hWnd, IDC_BUTTON_PREVIOUS); 
HANDLE handle = LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_BLUELEFT), 
          IMAGE_ICON, 16, 16, 0); 
HICON m_iconPrevious = static_cast<HICON>(handle); 
SendMessage(ctrl, BM_SETIMAGE, IMAGE_ICON, (LPARAM)m_iconPrevious); 

一定要調用DestroyIcon當你完成()。

+0

我想加載一個位圖不是一個圖標,我明白你說的,它很不錯,我的疑問是如果我加載一個位圖,那麼我如何銷燬該對象HBITMAP在我的情況。我認爲沒有API可用於銷燬位圖。請讓我知道我該怎麼做。替代IMAGE_ICON,我放置了IMAGE_BITMAP,並且在HICON的位置放置了HBITMAP。因此,我的問題是如何銷燬它。 – Siva 2014-10-28 13:58:07

+0

使用'DeleteObject()'刪除一個HBITMAP' – 2014-10-28 17:14:25

相關問題