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);
有没有其他方法可以达到这个目的?如果可能的话,请举例说明。
答案 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.
对我来说这很好,因为我只在很少的操作系统上测试过。