使用VC++6中的CBitmapButton类,可以做出效果非常好的图形按钮来。

 

使用方法也非常简单:

1.在对话框上拖放一个普通的按钮控件;

2.声明一个CBitmapButton类的实例;不要使用ClassWizard映射;

3.调用CBitmapButton类实例的LoadBitmaps方法,载入四幅位图。这四幅位图分别对应按钮

的四种状态:正常(U)状态,按下(D)状态,获得输入(F)状态,禁止(X)状态。    
其中参数:    
     
nIDBitmapResource是位图按钮正常状态(U)下的位图的资源ID。         
     
 nIDBitmapResourceSel是位图按钮按下状态(D)下的位图的资源ID。      
     
nIDBitmapResourceFocus是位图按钮获得输入状态(F)下的位图的资源ID。       
      
nIDBitmapResourceDisabled是位图按钮禁止状态(X)下的位图的资源ID。      
     
4.使用CBitmapButton::SubclassDlgItem关联到想要的按钮。其中第一个参数是要关联的按

钮的ID,第二个参数是要关联的按钮所在的窗口的指针,一般来说,传给它this就行了;

5.使用CBitmapButton::SizeToContent函数使按钮适合图片大小;

6.在对话框编辑器(或称窗体编辑器吧 :-) )中,把关联的按钮控件的Owner draw属性选

上。

好了,现在运行你的程序,是不是发现按钮变成图形按钮了,而且效果还不错呢。

不过唯一的遗憾是,现在软件界面流行那种Hover按钮,就是鼠标移到按钮上时,按钮图片

会显示发亮、上移的效果,鼠标移出按钮则按钮恢复原状,而CBitmapButton类只有如上面所说的四种效果图片,

不包含鼠标移到按钮上时的显示图片;我想到了一种办法:利用 lpszBitmapResourceFocus(位图

按钮获得焦点时的位图),当鼠标移动到按钮上的时候,用代码使按钮获得焦点,当鼠标移

出按钮时,用代码使按钮失去焦点,这样就间接的实现了HoverButton,效果还不错;

//实现Hover效果的处理代码:///
//在初始化对话框的时候要用SetTimer函数设置一个定时器,200ms足矣;/
void CCBitmapButtonDlg::OnTimer(UINT nIDEvent)
{
 // TODO: Add your message handler code here and/or call default
 if (1==nIDEvent)
 {
  POINT p;
  GetCursorPos(&p);
  CString s;
  CWnd *hwnd;
  s.Format("%d",hwnd=WindowFromPoint(p));
  this->GetDC()->DrawText(s,CRect(10,10,100,100),0);
  CWnd *hwnd2=GetDlgItem(IDC_BUTTON1);
  if (hwnd2 == hwnd)//如果鼠标在按钮上
  {
   if (GetFocus()!=hwnd2)//如果按钮无焦点,那么设置焦点
    hwnd2->SetFocus() ;
  }
  else//如果鼠标不在按钮上;
  {
   if (GetFocus() == hwnd2 )//如果按钮有焦点,那么去焦点;
    GetDlgItem(IDC_EDIT1)->SetFocus();
  }
  
 }
 CDialog::OnTimer(nIDEvent);
}

转载于:https://www.cnblogs.com/179252o88o/archive/2012/09/20/2696104.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值