您的位置:首页 > 其它

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

2011-01-15 20:19 441 查看
第一种:

Button属性页里Style的Bitmap点上

CBitmap Bitmap;

Bitmap.LoadBitmap(IDB_BITMAP1);

HBITMAP hBitmap=(HBITMAP)Bitmap.Detach();

CButton *pButton=(CButton*)GetDlgItem(IDCANCEL);

pButton->SetBitmap(hBitmap);

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

第二种:

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

假设按钮ID为IDC_BUTTON1

1.添加成员变量

CButtonST m_btn;

2.添加位图资源,ID设为IDB_BITMAP1

3.在OnInitDialog函数中初始化按钮m_btn.SubclassDlgItem(IDC_BUTTON1,this);

m_btn.SetBitmaps(IDB_BITMAP1,RGB(0,0,0));

m_btn.OffsetColor(CButtonST::BTNST_COLOR_BK_IN, 30);

注: 上面的SetBitmaps函数会将图片中颜色值为RGB(0,0,0)的点设为透明。

第三种:

把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();

这种方法还可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: