按钮类 (BUTTON) 分为四种类型
1.普通的按钮(PushButton)
2. 单选按钮(RadioBox)
3. 复选框(CheckBox)
4. 分组框样式(GrouPBox)
下面代码演示了四种按钮样式的创建
// 创建按钮类
// 1.普通按钮
// 2.单选按钮
// 3.复选按钮
// 4.组框
// 创建组框
HWND hGroupWnd = CreateWindowEx(0, TEXT("BUTTON"), TEXT("组框1"), WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
10, 10, 300, 200, hWnd, (HMENU)1001, hInstance, 0);
// 创建下压按钮
HWND hBtnWnd1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Button1"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
40, 30, 100, 30, hWnd, (HMENU)1002, hInstance, 0);
HWND hBtnWnd2 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("Button2"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
150, 30, 100, 30, hWnd, (HMENU)1003, hInstance, 0);
// 创建一组单选按钮(WS_GROUP设置分组,放在一组的第一个单选按钮上)
HWND hRadioWnd1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox1"), WS_VISIBLE | WS_CHILD |WS_GROUP| BS_AUTORADIOBUTTON,
40, 70, 100, 30, hWnd, (HMENU)1004, hInstance, 0);
HWND hRadioWnd2 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox2"), WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
150, 70, 100, 30, hWnd, (HMENU)1005, hInstance, 0);
// 创建另一组单选按钮
HWND hRadioWnd3 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox1"), WS_VISIBLE | WS_CHILD | WS_GROUP | BS_AUTORADIOBUTTON,
40, 110, 100, 30, hWnd, (HMENU)1005, hInstance, 0);
HWND hRadioWnd4 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("RadioBox2"), WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON,
150, 110, 100, 30, hWnd, (HMENU)1006, hInstance, 0);
// 创建复选框按钮
HWND hCheckWnd1 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("CheckBox1"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
40, 150, 100, 30, hWnd, (HMENU)1007, hInstance, 0);
HWND hwndCheck2 = CreateWindowEx(0, TEXT("BUTTON"), TEXT("CheckBox2"), WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX,
150, 150, 100, 30, hWnd, (HMENU)1008, hInstance, 0);
图片效果:
按钮风格样式
一直 描述
BS_3STATE 创建与复选框相同的按钮,但该框可以是灰色的,也可以选中或清除。 使用灰色状态显示未确定复选框的状态。
BS_AUTO3STATE 创建与三状态复选框相同的按钮,但当用户选择该按钮时,该框会更改其状态。 状态通过检查、不确定和清除循环。
BS_AUTOCHECKBOX 创建与复选框相同的按钮,但每次用户选中复选框时,复选框状态都会自动切换并清除。
BS_AUTORADIOBUTTON 创建与单选按钮相同的按钮,但当用户选择该按钮时,系统会自动将按钮的检查状态设置为已选中,并自动设置同一组中所有其他按钮的检查状态以清除。
BS_BITMAP 指定按钮显示位图。 请参阅“备注”部分,了解其与BS_ICON的交互。
BS_BOTTOM 将文本置于按钮矩形底部。
BS_CENTER 在按钮矩形中水平居中文本。
BS_CHECKBOX 创建包含文本的小型空复选框。 默认情况下,该文本显示在复选框右侧。 若要显示复选框左侧的文本,请将此标志与BS_LEFTTEXT样式 (或等效的BS_RIGHTBUTTON样式) 组合在一起。
BS_COMMANDLINK 创建一个命令链接按钮,该按钮的行为类似于BS_PUSHBUTTON样式按钮,但命令链接按钮的左侧有一个绿色箭头,指向按钮文本。 可以通过将BCM_SETNOTE消息发送到按钮来设置按钮文本的标题。
BS_DEFCOMMANDLINK 创建类似于BS_PUSHBUTTON样式按钮的命令链接按钮。 如果按钮位于对话框中,用户可以通过按 Enter 键来选择命令链接按钮,即使命令链接按钮没有输入焦点也是如此。 此样式可用于让用户快速选择最有可能 (默认) 选项。
BS_DEFPUSHBUTTON 创建一个类似于BS_PUSHBUTTON样式按钮的推送按钮,但外观明显。 如果按钮位于对话框中,则用户可以通过按 Enter 键来选择该按钮,即使该按钮没有输入焦点也是如此。 此样式可用于让用户快速选择最有可能 (默认) 选项。
BS_DEFSPLITBUTTON 创建一个类似于BS_PUSHBUTTON样式按钮的拆分按钮,但也具有独特的外观。 如果拆分按钮位于对话框中,则用户可以按 Enter 键选择拆分按钮,即使拆分按钮没有输入焦点也是如此。 此样式可用于让用户快速选择最有可能 (默认) 选项。
BS_GROUPBOX 创建一个矩形,在该矩形中可以分组其他控件。 与此样式关联的任何文本都显示在矩形的左上角。
BS_ICON 指定按钮显示图标。 请参阅“备注”部分,了解其与BS_BITMAP的交互。
BS_FLAT 指定按钮为二维;它不使用默认底纹来创建三维图像。
BS_LEFT 左对齐按钮矩形中的文本。 但是,如果按钮是没有BS_RIGHTBUTTON样式的复选框或单选按钮,则文本框或单选按钮右侧的文本左对齐。
BS_LEFTTEXT 与单选按钮或复选框样式结合使用时,将文本放在单选按钮或复选框的左侧。 与BS_RIGHTBUTTON样式相同。
BS_MULTILINE 如果文本字符串太长,无法容纳按钮矩形中的单个行,则将按钮文本包装为多行。
BS_NOTIFY 允许按钮将 BN_KILLFOCUS 和 BN_SETFOCUS 通知代码发送到其父窗口。
请注意,无论按钮是否具有此样式,按钮都会发送 BN_CLICKED 通知代码。 若要获取 BN_DBLCLK 通知代码,按钮必须具有BS_RADIOBUTTON或BS_OWNERDRAW样式。
BS_OWNERDRAW 创建所有者绘制的按钮。 当按钮的视觉方面发生更改时,所有者窗口会收到 WM_DRAWITEM 消息。 请勿将BS_OWNERDRAW样式与其他任何按钮样式组合在一起。
BS_PUSHBUTTON 创建一个推送按钮,当用户选择该按钮时,会将 WM_COMMAND 消息发布到所有者窗口。
BS_PUSHLIKE 使按钮 ((如复选框、三态复选框或单选按钮)) 外观并像按下按钮一样。 按钮在未推送或检查时显示,在按下或选中按钮时会引发。
BS_RADIOBUTTON 使用文本创建一个小圆圈。 默认情况下,文本显示在圆的右侧。 若要显示圆左侧的文本,请将此标志与BS_LEFTTEXT样式 (或等效的BS_RIGHTBUTTON样式) 组合在一起。 对相关组使用单选按钮,但相互排斥的选择。
BS_RIGHT 右对齐按钮矩形中的文本。 但是,如果按钮是没有BS_RIGHTBUTTON样式的复选框或单选按钮,则文本框或单选按钮右侧的文本右对齐。
BS_RIGHTBUTTON 将单选按钮的圆或复选框的正方形放在按钮矩形的右侧。 与BS_LEFTTEXT样式相同。
BS_SPLITBUTTON 创建拆分按钮。 拆分按钮具有下拉箭头。
BS_TEXT 指定按钮显示文本。
BS_TOP 将文本置于按钮矩形的顶部。
BS_TYPEMASK 请勿使用此样式。 在 BS_* 样式位上使用 OR 运算符产生的复合样式位。 它可用于从给定位掩码屏蔽有效的BS_* 位。 请注意,这是过期的,并且未正确包含所有有效样式。 因此,不应使用此样式。
BS_USERBUTTON 已过时,但提供与 16 位版本的Windows兼容。 应用程序应改用BS_OWNERDRAW。
BS_VCENTER 将文本置于按钮矩形的中间 (垂直) 。
按钮常用消息:
BM_CLICK 模拟按钮点击 WPARAM=0,LPARAM=0;
BM_GETCHECK 获取单选按钮或复选框的选中状态 WPARAM=0,LPARAM=0
BM_GETIMAGE 获得按钮的图像(图标或位图)句柄, WPARAM=0,LPARAM=0
BM_GETSTATE 获得单选按钮或复选框状态, WPARAM=0,LPARAM=0;
BM_SETCHECK 设置单选按钮或复选框的选中状态,
WPARAM=BST_CHECKED,BST_INDETERMINATE,BST_UNCHECKED
LPARAM=0;
BM_SETDONTCLICK 在单选按钮上设置一个标志,接收焦点时生成BN_CLICKED消息
WPARAM=BOOL, LPARAM=0;
BM_SETIMAGE 设置新图像(图标或位图)
WPARAM=IMAGE_BITMAP,IMAGE_ICON
LPARAM=HBITMAP,HICON
BM_SETSTATE 设置按钮的选中状态 WPARAM=BOOL, LPARAM=0;
BM_SETSTYLE 设置按钮样式 WPARAM=BS_..(按钮样式) ,LPARAM=BOOL,(是否重绘)
按钮通知消息是向父窗口发送WM_COMMAND消息
WPARAM的低字节为按钮ID,高字节为通知消息
LPARAM 为按钮的句柄
BN_CLICKED // 按钮单击消息
BN_DBLCLK // 双击消息
BN_DISABLE // 禁用按钮消息
BN_DOUBLECLICKED // 双击按钮消息
BN_HILITE // 选择按钮消息
BN_KILLFOCUS // 失去焦点消息
BN_PAINT // 按钮自给消息
BN_PUSHED // 按钮按下消息
BN_SETFOCUS // 按钮获得焦点消息
BN_UNHILITE // 按钮取消选择消息
BN_UNPUSHED // 按钮弹起消息
BN_CUSTOMDRAW // 按钮自定义绘制消息
WM_CTLCOLORBTN // 更改按钮的文本的背景色(自绘按钮才有效)