CBitmap :: Setbitmap不能在windows xp上运行?

时间:2014-10-22 04:25:40

标签: mfc windows-xp

CBitmap :: Setbitmap不能与windows xp一起使用。实际上,我正在使用windows7操作系统,我有一个对话框应用程序,我正在使用CBitmap :: Setbitmap将位图加载到按钮上。

当我在Windows XP机器上运行我的应用程序时,我没有得到我在按钮上加载的位图。

这是我加载和设置位图的方式,

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

有没有其他方法可以达到这个目的?如果可能的话,请举例说明。

2 个答案:

答案 0 :(得分: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()。

答案 1 :(得分: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.

对我来说这很好,因为我只在很少的操作系统上测试过。