使用VC++6中的CBitmapButton类,可以做出效果非常好的图形按钮来。
2012-09-20 22:32
225 查看
使用方法也非常简单:
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);
}
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);
}
相关文章推荐
- combogrid使用javascript及java做出既可以全部查询也可以模糊查询并显示的效果
- 不使用JS,使用CSS3 target 以及 动画效果实现,点击一下弹出,并且保持弹出状态,然后再点击一下弹回的导航栏(或者可以叫做按钮)
- TImage也有OnClick事件,可以当按钮使用,配上合适的图片(背景透明,效果前凸)更是几乎以假乱真
- 我的VS2005采用的是web开发设置。不知道动到了那里,现在每次按F5启动调试的时候总是不能成功启动调试。效果和按CTRL+F5一样。就是把项目显示在了浏览器之后,那个启动调试的绿色按钮还可以使用,不是暗色的。
- ViewPager和Fragment结合使用,可以做出顶部导航界面滑动效果
- 按钮发送验证码等待时间效果——定时器setInterval使用
- ios霓虹灯效果(没基础也可以做出好看的霓虹灯)
- crt不能打开图形界面可以使用xstart打开图形界面
- sencha touch中按钮的ui配置选项值及使用效果
- 使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
- Android笔记- 使用XML selector 设置按钮点击效果图片
- 使用swiper插件实现qq聊天窗口按钮滑动效果
- vs2010 MFC中如何分别捕获button控件的按下和抬起操作(模拟真实按钮使用效果)
- Android 属性动画(Property Animation 给按钮的添加添加动画效果,同样可以用在整个布局上) (下)(viewGroup创建对象竟然可以用布局的id)
- 使用ToggleButton按钮实现的灯泡开关效果
- 在我工作中,我想让RelativeLayout设置按钮的效果,但是有时候没有效果,下面的方法可以解决问题
- 使用SendMessage方法对窗体上的控件进行截图,该方法的思想就是把控件的句柄拿到,对控件发送WM_PAINT消息,并且把希望得到图形对象的句柄当作wParam参数传过去,这样就可以在图形对象得到想要得图形。
- 使用directx11实现高质量图形效果@CGDC4
- 请写一个简单的幻灯效果页面。如果不使用JS来完成,可以加分。
- jquery若本地文件引用库文件有问题时,可以使用在线的地址调试效果