【MFC】学习笔记:按钮控件(Button)

01.目录

02.按钮控件介绍

按钮,这应该是用的最多,也是见得最多的一种控件。
各大App,不管有名无名,按钮基本上都是不可或缺的控件之一。
比如:王者荣耀登陆界面的“进入游戏”就是一个按钮,只是给他整的花里胡哨了而已。
下面说说按钮控件的概念:

控件是一类特殊的窗口,如按钮、文本框之类的,用来将信息传送给用户或获取用户的输入;

控件都是一些高度封装好的对象,有自己的WM_PAINT处理代码,不必用户自己去重绘控件;

控件的消息机制:当点击控件等操作发生时,用户不用具体去处理这些鼠标消息,MFC会处理这些最基本的控件上的消息并将其转化为“通知”(Notify),比如点击按钮时不需要用户去处理按钮的ButtonDown消息,而是MFC将这种消息转化为一个BN_CLICKED通知,然后用户只需要响应OnButtonClicked函数即可;

PS:
a. 一般普通消息,如WM_LBUTTONDOWN、WM_PAINT等都是基本的消息,这些消息直接反应了触发消息的事件;

b. 通知消息是一种特殊的Windows消息,它主要来自控件,虽然触发通知的都是一些基本消息,如BUTTONDOWN等,但Windows将它们转换成控件发出的通知,通知消息直接反应了触发控件的事件;

控件一般都挂载其它窗口上,因此控件都是其它窗口的子窗口,所以控件有时也叫子窗口控件:

     i. 父窗口移动控件就会跟着移动;

     ii. 父窗口被销毁控件也会跟着被销毁;

     iii. 这些动作都由MFC自动完成;

03.按钮控件分类

按钮控件一般分为:
1.命令按钮(Button)
2.单选按钮(Radio Button)
3.复选按钮或者叫复选框(Check Box)

3.1 命令按钮

命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图。单选按钮使用时,一般是多个组成一组,组中每个单选按钮
的选中状态具有互斥关系,即同组的单选按钮只能有一个被选中。

命令按钮是我们最熟悉也是最常用的一种按钮控件。

3.2 单选按钮

单选按钮有选中和未选中两种状态,为选中状态时单选按钮中心会出现一个蓝点,以标识选
中状态。

一个圆圈+一些字(基本样式),当然这个是可以根据风格改的。
软件中 一般很少用默认样式,除了一些工业软件,比如自己公司做的很多软件就是用默认样式。

3.3 复选按钮

一般的复选框也是有选中和未选中两种状态,选中时复选框内会增加一个“√”,而三态复选框(设置了BS_3STATE风格)有选中、未选中和不确定三种状态,不确定状态时复选框内出现一个灰色“√”。
按钮控件会向父窗口发送通知消息,最常用的通知消息莫过于BN_CLICKED和BN_DOUBLECLICKED了。用户在按钮上单击鼠标时会向父窗口发送BN_CLICKED消息,双击鼠标时发送BN_DOUBLECLICKED消息。

复选框就是正方形 + 一些字(基本样式),一般这种样式都是用于工业软件,不是特别在意界面,但是一些游戏啊,直播啊,都会给这些常用控件“穿一件衣服”。

04.按钮控件的创建

按钮控件的创建有两种方式:
1.第一种是最常用的:拖拽
2.第二种是用于原生控件:程序写出来的控件

4.1 拖拽方式

拖拽方式就比较常见了,没有哪一个程序员会在拖控件和写控件间犹豫,肯定都是选择编译器封装好的直接拖来用就好了,这个就不多说,大致说一下步骤:

新建MFC项目(至于选择单文档,多文档自己决定,均可)——切换视图为资源视图(如果界面没有,点击工具栏的视图->其他视图->资源视图)——选择一个Dialog,没有就创建,如果不知道怎么创建,请回看MFC学习笔记(创建与修改对话框),——选择左侧或者右侧工具栏,是所有按钮都在里面

4.2 重写方式

一般来说这种是用于写原生控件,就是自己写控件,不用系统默认的,自己给他给样式或者属性等等

4.2.1 创建函数原型

MFC提供了CButton类封装按钮控件的所有操作。
之前的教程中,我们是在对话框模板上直接添加的按钮控件资源,但某些特殊情况下需要我们动态创建按钮控件,即通过CButton类的成员函数Create来创建按钮。下面是Create函数的原型:

virtual BOOL Create(
   LPCTSTR lpszCaption,
   DWORD dwStyle,
   const RECT& rect,
   CWnd* pParentWnd,
   UINT nID 
);

参数说明:
lpszCaption:指定按钮控件显示的文本。
dwStyle:指定按钮控件的风格,可以设置为以下按钮风格的任意组合。
BS_AUTOCHECKBOX :同BS_CHECKBOX,不过单击鼠标时按钮会自动反转
BS_AUTORADIOBUTTON: 同BS_RADIOBUTTON,不过单击鼠标时按钮会自动反转
BS_AUTO3STATE :同BS_3STATE,不过单击按钮时会改变状态
BS_CHECKBOX:指定在矩形按钮右侧带有标题的选择框
BS_DEFPUSHBUTTON:指定默认的命令按钮,这种按钮的周围有一个黑框,用户可以按回车键来快速选择该按钮
BS_GROUPBOX:指定一个组框
BS_LEFTTEXT:使控件的标题显示在按钮的左边
BS_OWNERDRAW:指定一个自绘式按钮
BS_PUSHBUTTON:指定一个命令按钮
BS_RADIOBUTTON:指定一个单选按钮,在圆按钮的右边显示正文
BS_3STATE:同BS_CHECKBOX,不过控件有3 种状态—选择、未选择和变灰
当然,除了以上列出的风格,一般还会为按钮设置WS_CHILD、WS_VISIBLE和WS_TABSTOP等风格,WS_TABSTOP风格使按钮控件具有tab停止属性,即按tab键切换焦点控件时能够将焦点
停在按钮控件上。创建一组单选按钮时,第一个按钮的风格应设置为WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,其他单选按钮的风格应
为WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,不包含WS_TABSTOP和WS_GROUP。
在对话框模板上直接添加按钮控件时,它的属性中包含了上述风格,例如,复选框的Tri_state属性实际上代表的就是BS_3STATE风格。
剩下的三个参数与静态文本框的Create函数中的相应参数类似,大家可以参考前面静态文本框的讲解,也可以查阅MSDN。

4.2.2 主要成员函数

下面是CButton类的一些主要的成员函数,至于其他的函数大家可以在MSDN中查看。

		// 设置要在按钮中显示的位图。参数hBitmap为位图的句柄。返回值为按钮原来位图的句柄。
  	   HBITMAP SetBitmap(HBITMAP hBitmap);
   		//获取之前由SetBitmap函数设置的按钮位图的句柄。
       HBITMAP GetBitmap( ) const;
       //设置按钮的风格。参数nStyle指定按钮的风格,bRedraw指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘。 
       void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
       // 获取按钮控件的风格。
       UINT GetButtonStyle( ) const;
      //设置按钮的选择状态。参数nCheck为0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)。
       void SetCheck(int nCheck);
       //获取按钮的选择状态。返回值的意义同SetCheck函数的nCheck参数。
       int GetCheck( ) const;
       //设置要显示到按钮上的光标图。参数hCursor指定了光标的句柄。返回值为按钮原来光标的句柄。
       HCURSOR SetCursor(HCURSOR
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cain Xcy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值