【发布时间】:2014-12-12 20:03:04
【问题描述】:
这是我关于 stackoverflow 的第一个问题,我希望我做的一切都是正确的:S
正如我的标题中所述,我正在与 mfc 合作进行视觉工作室(2012)项目。 我尝试向我的 cbutton 添加一个位图,该位图被插入到我的对话框的设计视图中。
我读过的所有帖子都描述了使用 setBitmap 或 sendMessage 来做到这一点。 我总是尝试在对话框的 onInit() 函数中执行此操作。 当我(尝试)像这样使用 setBitmap() 时:
m_backButton.Attach (LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BACK_BUTTON))); //m_backButton is a private CBitmap member of my dialog
CButton* pButton = (CButton* )GetDlgItem(IDC_BUTTON1);
pButton->SetBitmap(m_backButton);
这会导致 IntelliSense 错误:
IntelliSense:类“CButton”没有成员“setBitmap”
另一个尝试是使用 sendMessage:
m_backButton.Attach (LoadBitmap (AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BACK_BUTTON)));
CButton* pButton = (CButton* )GetDlgItem(IDC_BUTTON1);
HBITMAP hBitmap = (HBITMAP)m_backButton;
pButton->SendMessage(BM_SETIMAGE,(WPARAM)IMAGE_BITMAP,(LPARAM)hBitmap);
首先我得到另一个 IntelliSense 错误:
IntelliSense:标识符“BM_SETIMAGE”未定义
就像我在另一篇文章中读到的那样,我自己定义了“BM_SETIMAGE”:
#define BM_SETIMAGE 0x00F7
现在代码可以编译了,但是按钮仍然没有显示位图... 由于互联网上的每个帖子都使用这两种解决方案之一,我很无奈。 有人知道有什么问题吗? 如果没有,也感谢您的阅读:)
【问题讨论】:
-
哪个操作系统?根据
BM_SETIMAGEdocumentation 上的 cmets,XP 和 7 之间的某个地方发生了变化。 -
最终代码在紧凑的嵌入式设备上运行。它使用 Microsoft Compact Embedded 2013。
-
我查看了ce sdk的winuser.h,找不到标签BM_SETIMAGE。这种情况下是不是不能用位图来做按钮?
-
是的,CE 本身很可能不支持位图按钮。您始终可以自己使用所有者绘制来完成,但工作量要大得多。
-
CButton函数是SetBitmap,不是setBitmap。另外,请确保按钮属性在资源编辑器属性中设置了位图样式。
标签: visual-c++ mfc cbitmap cbutton