minigui学习笔记-按钮


    CTRL_BUTTON 为控件类
    普通按钮是一个矩形,其中显示了通过 CreateWindow 传递的窗口标题。
    按钮控件主要用来触发一个立即回应的动作,并且不会长久保持开关信息。风格和 BS_DEFPUSHBUTTON 风格的作用不同,具有 BS_DEFPUSHBUTTON 的按钮将是默认接收 ENTER 键输入的按钮,而不管当前的输入焦点处于哪个控件上。但是当用作普通主窗口的控件时,两种型态的按钮作用相同,只是具有 BS_DEFPUSHBUTTON 风格的按钮的边框要粗一些。
    当鼠标光标处在按钮中时,放开鼠标按键时,就恢复按钮的原貌,并向父窗口发送一个 MSG_COMMAND 消息和 BN_CLICKED 通知码,当按钮拥有输入焦点时,在文字的周围就有虚线,按下及释放空格键与按下及释放鼠标按键具有相同的效果。
    通常情况下,按钮文本会以单行的形式在垂直和水平方向居中显示,不会自动换行。应用程序也可以通过指定 BS_MULTLINE 风格来指定显示多行文本。
    另外,也可以在普通按钮上显示位图或图标,这时要使用 BS_BITMAP 或者 BS_ICON风格,并通过 dwAddData 参数传递位图对象的指针或图标句柄。默认情况下位图或图标会缩放显示以充满整个按钮窗口范围,使用 BS_REALSIZEIMAGE风格将使位图或图标显示在控件中部,不作任何缩放。
    复选框是一个文字方块,文字通常出现在复选框的右边(如果你在建立按钮时指定了BS_LEFTTEXT 风格,那么文字会出现在左边)。复选框通常用于允许用户对选项进行选择的应用程序中。复选框的常用功能如同一个开关:单击一次将显示选中标记,再次单击则会清除选中标记。
    常用风格是BS_CHECKBOX和BS_AUTOCHECKBOX在使用BS_CHECKBOX时,应用程序需要自己向该控件发送消息来设定选中标记;而使用BS_AUTOCHECKBOX 风格时,控件会自动在选中和非选中状态之间切换。   其余两种复选框风格是 BS_3STATE 和 BS_AUTO3STATE,两种风格能显示第三种状态——复选框内是灰色的,这种状态表明该复选框不能被选择或者禁止使用。
   默认情况下,复选框沿矩形的左边框对齐,并位于控件窗口范围的顶边和底边之间。使用 BS_LEFTTEXT 风格将直居中
BS_LEFT 、BS_CENTER、BS_RIGHT、BS_TOP、BS_VCENTER、BS_BOTTOM 等可用于复选框。
   另外,使用 BS_PUSHLIKE 风格将使复选框以普通按钮的形式显示:选中时显示为按下状态,未选中时显示为正常状态。
   
   单选按钮就像收音机上选台按钮一样,每一个按钮都对应一个频道,而且一次只能有一个按钮被按下。在对话框中,单选按钮组常常用来表示相互排斥的选项。与复选框不同,单选按钮的工作方式不同于开关,也就是说,当第二次按单选按钮时,它的状态会保持不变。
   BS_RADIOBUTTON 或BS_AUTORADIOBUTTON 两种,后者会自动显示用户的选择情况,而前者不会。
   默认情况下,单选按钮沿控件窗口的左边框对齐,并位于控件窗口范围的顶边和底边之
BS_LEFTTEXTBS_CENTER、BS_RIGHT、BS_TOP、BS_VCENTER、BS_BOTTOM 等可用于单选按钮。
                                                                                      另外,使用 BS_PUSHLIKE 风格将使单选按钮以普通按钮的形式显示:选中时显示为按下状态,未选中时显示为正常状态。
    单选按钮通常成组使用,同一组单选按钮每一刻只能有一个被选中。在创建一组单选按钮时,我们需要设定它们的状态是互斥的,因此,要在创建第一个单选按钮时使用WS_GROUP 风格,以将其设置为该组单选按钮的“打头按钮”。
    应用程序通过给按钮发送消息来实现如下目的:
        查询/设置复选框或者单选钮的选中状态:BM_GETCHECK、BM_SETCHECK
        查 询 / 设 置 普 通 按 钮 或 者 复 选 框 的 按 下 或 释 放 状 态 : BM_GETSTATE 、
        BM_SETSTATE
        获取/设置位图按钮上的位图或者图标:BM_GETIMAGE、BM_SETIMAGE
        发送 BM_CLICK 模拟用户鼠标的单击操作wParam 等 于 BST_CHECKED
BM_SETCHECK 消息来显示其处于选中状态:
SendMessage (hwndButton, BM_SETCHECK, BST_CHECKED, 0);
    其实 wParam 可取的值一共有三个,见表 20.1。这些值也是通过 BM_GETCHECK 消
息返回的选中状态值。
                             表 20.1  复选框和单选钮的选中状态
                      BST_UNCHECKED(0)         未选中
                      BST_CHECKED(1)           已选中
                      BST_INDETERMINATE(2) 不可用状态
     我们可以通过给窗口发送 BM_SETSTATE 消息来模拟按钮闪动。以下的操作将导致按钮被按下:
SendMessage (hwndButton, BM_SETSTATE, BST_PUSHED, 0) ;
     下面的调用使按钮恢复正常:
SendMessage (hwndButton, BM_SETSTATE, 0, 0) ;
     对位图按钮,可使用 BM_GETIMAGE 和 BM_SETIMAGE 消息获取或设置位图对象或图标句柄:
int image_type;
PBITMAP btn_bmp;
HICON btn_icon;
int ret_val = SendMessage (hwndButton, BM_GETIMAGE, (WPARAM)&image_type, 0) ;
if (image_type == BM_IMAGE_BITMAP) {
    /* 该按钮 使用的 是位图 对象 */
    btn_bmp = (PBITMAP) ret_val;
}
else {
    /* 该按钮 使用的 是图标 对象 */
    btn_icon = (HICON) ret_val;
}
/* 将按钮 图象 设置为 位图对 象 */
SendMessage (hwndButton, BM_SETIMAGE, BM_IMAGE_BITMAP, btn_bmp) ;
/* 将按钮 图象 设置为 图标对 象 */
SendMessage (hwndButton, BM_SETIMAGE, BM_IMAGE_ICON, btn_icon) ;
     另外,我们在应用程序中也可以通过向按钮发送 BM_CLICK 消息来模拟用户在按钮上的单击操作。
     具有 BS_NOTIFY 风格的按钮可产生的通知码主要有:
         BN_CLICKED:表明用户单击此按钮。该通知码的值为 0,因此,如果要在按钮的
         MSG_COMMAND 消息的 wParam 参数是否等于按钮的标识符即可。该通知的产
         生是默认的,将忽略按钮控件的 BS_NOTIFY 风格。
         BN_PUSHED:表明用户将此按钮按下。
         BN_UNPUSHED:表明用户将此按钮释放。
         BN_DBLCLK:表明用户在此按钮上进行了鼠标左键的双击操作。
         BN_SETFOCUS:表明按钮获得了输入焦点。
         BN_KILLFOCUS:表明按钮失去了输入焦点。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值