为按钮控件添加图片的方法

本文介绍了四种不同的方法来改变MFC应用程序中按钮的显示样式,包括使用Bitmap设置按钮图标、利用CButtonST控件增强按钮功能、通过设置Overdraw属性并自定义绘图逻辑以及使用CBitmapButton类实现更灵活的按钮外观控制。
摘要由CSDN通过智能技术生成
第一种:
Button属性页里Style的Bitmap点上

CBitmap Bitmap;
Bitmap.LoadBitmap(IDB_BITMAP1);
HBITMAP hBitmap=(HBITMAP)Bitmap.Detach();
CButton *pButton=(CButton*)GetDlgItem(IDCANCEL);
pButton->SetBitmap(hBitmap);

感觉效果不是很好。因为图片不会自动拉伸。

第二种:
可以采用CButtonST控件,挺好用的,比MFC的那些封装好用。

第三种:
把button按钮属性设置为ower draw
然后映射onDrawItem消息
在ondraw函数内自己绘制就可以了
void CUi6Dlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
if(nIDCtl == IDC_HELLO_CFAN)
{
//绘制按钮框架
UINT uStyle = DFCS_BUTTONPUSH;
//是否按下去了?
if (lpDrawItemStruct->itemState & ODS_SELECTED)
uStyle |= DFCS_PUSHED;
CDC dc;
dc.Attach(lpDrawItemStruct->hDC);
dc.DrawFrameControl(&lpDrawItemStruct->rcItem, DFC_BUTTON, uStyle);
//输出文字
dc.SelectObject(&m_Font);
dc.SetTextColor(RGB(0, 0, 255));
dc.SetBkMode(TRANSPARENT);
CString sText;
m_HelloCFan.GetWindowText(sText);
dc.TextOut(lpDrawItemStruct->rcItem.left + 20, lpDrawItemStruct->rcItem.top + 20, sText);
//是否得到焦点
if(lpDrawItemStruct->itemState & ODS_FOCUS)
{
//画虚框
CRect rtFocus = lpDrawItemStruct->rcItem;
rtFocus.DeflateRect(3, 3);
dc.DrawFocusRect(&rtFocus);
}
return;
}
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

第四种:


1,按钮属性 Onwer Drew选上,按钮ID: IDC_BUTTON1
2,定义private变量:
CBitmapButton m_button;
3,在初始化里边
m_button.LoadBitmaps(IDB_BITMAP1, IDB_BITMAP2);//IDB_BITMAP1:平时;IDB_BITMAP2:按下
m_button.SubclassDlgItem(IDC_BUTTON1, this);
m_button.SizeToContent();
这种方法还可以。
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值