Chinaunix首页 | 论坛 | 博客
  • 博客访问: 623401
  • 博文数量: 262
  • 博客积分: 8433
  • 博客等级: 中将
  • 技术积分: 2141
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-31 09:37
文章分类

全部博文(262)

文章存档

2012年(1)

2011年(168)

2010年(92)

2009年(1)

分类: C/C++

2011-02-12 09:04:27

第一种:
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(_T("IDB_BITMAP3"),_T("IDB_BITMAP4"),_T("IDB_BITMAP3"),_T("IDB_BITMAP5"));

m_button.SubclassDlgItem(IDC_BUTTON1, this);
m_button.SizeToContent();

这种方法还可以

阅读(973) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~