2014-10-22 44 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

相关问题