MFC 为按键设置图片怎么不行

本文深入探讨了在Windows应用开发中,如何正确使用自绘控件(OwnerDraw)与按钮属性OwnerDraw,以及设置自绘控件时应注意的问题。重点介绍了设置自绘控件后按钮完全看不见的原因,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在.h中
public:
	CBitmap m_bitmap;
在dlg的initiate里
CButton *p2=(CButton*)this->GetDlgItem(IDC_BUTTON2);
	this->m_bitmap.LoadBitmapA(IDB_BITMAP2);
	p2->SetBitmap(this->m_bitmap);

运行效果是这个大按键完全看不见 ( 按键属性OwnerDraw已设置为true )

果按键属性OwnerDraw已设置为true ,则需要自绘控件,所以运行的时候按钮会看不见,需要自己绘制按钮,因此也称控件自绘。如果使用SetBitmap来设置按钮,只需要把按钮设置为位图按钮控件即可,不能把按键属性OwnerDraw已设置为true。

要在MFC中实现按键切换显示的png图片,你需要按照以下步骤进行操作: 1. 将要显示的png图片添加到MFC资源中,可以使用Visual Studio的资源编辑器进行添加。 2. 在对话框类中添加一个成员变量来保存图片控件的句柄,例如: ``` CStatic m_ImageCtrl; ``` 3. 在OnInitDialog函数中初始化图片控件,并且设置初始显示图片,例如: ``` m_ImageCtrl.SubclassDlgItem(IDC_IMAGE_CTRL, this); m_ImageCtrl.SetBitmap(LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_DEFAULT_IMAGE))); ``` 其中IDC_IMAGE_CTRL是在对话框中添加的图片控件的ID,IDB_DEFAULT_IMAGE是初始显示图片MFC资源中的ID。 4. 在对话框类中添加处理按键消息的函数,例如: ``` BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) { if(pMsg->message == WM_KEYDOWN) { switch(pMsg->wParam) { case VK_LEFT: m_ImageCtrl.SetBitmap(LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_LEFT_IMAGE))); return TRUE; case VK_RIGHT: m_ImageCtrl.SetBitmap(LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_RIGHT_IMAGE))); return TRUE; default: break; } } return CDialogEx::PreTranslateMessage(pMsg); } ``` 在这个函数中,我们使用了LoadBitmap函数来加载图片资源,根据不同的按键设置不同的图片。 5. 最后,别忘了在对话框的消息映射中添加WM_KEYDOWN消息的处理函数,例如: ``` BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_KEYDOWN() //其他消息映射 END_MESSAGE_MAP() ``` 这样,按下左右箭头键时,就能切换显示不同的png图片了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值