自绘控件之按钮类

准备制作自己的控件类,按钮是第一个,我会将我在其中遇到困难和大家分享一些,只要实现下面的功能,按钮类就可以满足大部分的需求

按钮类功能:

1、正常

2、光标在按钮区域上

3、按下

4、当前按钮为活动按钮

5、按钮不可用

6、位图按钮上显示名称

7、制作圆角矩形、圆形按钮

其中前三个都很好实现,下面是响应函数;

OnMouseLeave()//光标离开按钮区域

OnMouseHover()//光标在按钮区域

OnLButtonDown//按下

OnLButtonUp//松开

//以下4个问题都是在DrawItem(DRAWITEMSTRUCT  lpdrawitemstruct)中添加代码

第四个问题的解决方式:

函数:DrawItem(DRAWITEMSTRUCT  lpdrawitemstruct)
lpdrawitemstruct->itemState();//itemState:指定了当前绘制操作完成后,所绘项的可见状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值可以为下表中所示值的一个或者多个的联合。
【ODS_FOCUS=H8:如果菜单项将被选中,则可设置该值。该值只对菜单项有用。】

所以只要通过判断lpdrawitemstruct->itemState();是否等于ODS_FOCUS=H8:就可以设置按钮为当前活动按钮时的响应了。

第五个问题

函数:DrawItem(DRAWITEMSTRUCT  lpdrawitemstruct)
lpdrawitemstruct->itemState();//itemState:指定了当前绘制操作完成后,所绘项的可见状态。例如,如果菜单项应该被灰色显示,则可以指定ODS_GRAYED状态标志。其取值可以为下表中所示值的一个或者多个的联合。
【ODS_DISABLED=H4:如果控件将被禁止,则设置该值。】

所以只要通过判断lpdrawitemstruct->itemState();是否等于ODS_DISABLED=H4:就可以设置按钮为不可用按钮时的响应了。

第六个问题:按钮上的名称怎么显示(我的按钮的几个状态都是位图切换)

CString add;

CDC ButtonDC;

ButtonDC.Attach(lpdrawitemstruct->hDC);//获取DC

ButtonDC.SetBkMode(TRANSPARENT);//字体背景透明

GetWindowText(add);

.DrawText(add,CRect(5,5,10,10),DT_CENTER | DT_VCENTER | DT_SINGLELINE);

第七个问题:怎么制作圆形按钮或者是圆角按钮

CRng rc;

rc.CreateRoundRect(0,0,rect.Width(),rect.Heignt(),50,50);//获取一个圆角矩形区域

::GetWindowRgn(lpdrawitemstruct->hwndItem,rc);

ButtonDC.SelectClipRng(&rc);

SetWindowRgn(rc,true)//有效区域

最后记得释放内存

ButtonDC.DeleteDC();

http://blog.csdn.net/bigtree_mfc/article/details/42269417

时间: 2024-10-20 18:12:55

自绘控件之按钮类的相关文章

背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton

原文:背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton [源码下载] 作者:webabcd 介绍背水一战 Windows 10 之 控件(按钮类) ButtonBase Button HyperlinkButton RepeatButton ToggleButton AppBarButto

控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton

介绍背水一战 Windows 10 之 控件(按钮类) ButtonBase Button HyperlinkButton RepeatButton ToggleButton AppBarButton AppBarToggleButton 示例1.ButtonBase(基类) 的示例Controls/ButtonControl/ButtonBaseDemo.xaml <Page x:Class="Windows10.Controls.ButtonControl.ButtonBaseDemo

Swift - 生成各种控件的工厂类(包含标签,按钮,输入框等)

在iOS开发中,页面里有时会大量的用到一些控件,如果要一个个单独创建再设置样式的话就显得很麻烦.我们可以创建一个生成各种控件的工厂类,这样在需要的时候调用下就可以了. 下面以一个自定义的工厂类为例,其中提供了文本标签,按钮,文本输入框,分段单选控件的生成,效果图如下: 工厂类:ViewFactory.swift 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34

(转载)VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

因为私人问题,鸡啄米暂停更新了几天,首先向关注鸡啄米动态的朋友说一声抱歉. 言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图.单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有

MFC自绘控件学习总结

前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或者有更好的方法,请不吝赐教.我的机器环境是:Windows7旗舰版 Service Pack 1,Visual studio 20051).重绘某个控件时,强烈推荐使用子类化方法,比如想自绘Button控件, 首先添加自己的类CMYButton 继承自 CButton ,声明一个CMYButton

MFC自绘控件学习总结第二贴

首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/20110710/19/5209f358-31c8-4057-b108-02155a417fd0.html 1).补充个高级可重载函数PreSubclassWindow(),我的理解是允许用户在子类化之前再做一额外些处理 ,这个重载函数也是非常重要的,要引起相当的注意.可以在这里改变控件的大小,位置,窗口样式,字

MFC之自绘控件

在描绘MFC界面时,MFC自带的控件样式是绝对不满足界面的需求的. 所以我们就要在MFC自带控件基础上对控件样式进行重绘. 在采用自绘前界面样式 采用自绘后界面样式 是不是自绘控件后看起来正常了很多? 自绘控件的步骤: 我们以做一个关闭按钮为例 先创建一个MFC类继承自CButton. 给这个类添加 一个虚函数DrawItem()和 一个afx BOOL OnEraseBkgnd()函数(一般以afx开头的函数都会在消息映射里面有一条映射) DrawItem()是控件的自绘处理函数,在这个函数中

VS2010-MFC(常用控件:按钮控件Button、Radio Button和Check Box)

转自:http://www.jizhuomi.com/software/182.html 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图.单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有一个被选中. 命令按钮是我们最熟悉也是最常用的一种按钮控件,而单选按钮

MFC串口的编程 mscomm控件与SerialPort类

MFC制作上位机,首先需要了解的是串口的编程,一般有两种方法,一个是使用ActiveX控件,例如mscomm串口控件,还有一个是用SerialPort类或者一些其他的串口类,这两个的区别是使用SerialPort类不需要注册控件,在其他没有安装控件的电脑上也能够用. 一·使用mscomm串口控件 使用mscomm串口控件的方法网上一大堆,大致说一些方法和一些需要注意的地方.如果是使用VC6.0在WIN7上来编写就会有个问题会通常说添加控件的方法为选中项目à“工程”à“添加到工程”à“Compon