网站树状型结构优化,网页制作教程和素材,深圳电商网站建设,重庆巫山网站设计公司文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式#xff08;对话框Enter键#xff09; 设置按钮位置和大小封装函数 前置章节
开始之前#xff0c;需要学习以下章节#xff1a; 创建窗口 窗口过… 文章目录 前置章节指定窗口样式给按钮加边框扁平化按钮复选框样式按钮自动复选框 单选按钮三态按钮自动三态按钮 默认按钮样式对话框Enter键 设置按钮位置和大小封装函数 前置章节
开始之前需要学习以下章节 创建窗口 窗口过程函数 创建按钮
指定窗口样式
CreateWindow函数的第三个参数是窗口样式它是一个用于指定窗口的外观和行为的标志的组合。
这里我们需要使用一些预定义的符号常量通过位掩码的形式将这些符号常量进行一个组合。
在上面的示例中我们使用了如下的定义
WS_VISIBLE | WS_CHILD | BS_PUSHBUTTONWS_VISIBLE (0x10000000)表示创建后控件可见。如果不设置此标志控件将在创建后不可见。
WS_CHILD (0x40000000)表示创建为父窗口的子窗口。子窗口是在父窗口的客户区内显示的独立窗口。如果没有设置此标志那么按钮将会独立弹出一个窗口也就是自己单独成个家与父窗口分家了。
BS_PUSHBUTTON (0x00000000)表示创建一个普通按钮样式。此样式用于创建一个可以按下和释放的按钮。看到其符号常量的十六进制值想必我不说你也能看出来这就是默认值也就是说就算我们不使用此标志也是没有关系的默认创建的就是这个。
如上所述我们通过按位或操作符 | 将这些常量组合在一起并且可以同时设置多个样式。
给按钮加边框
我们可以使用WS_BORDER (0x00800000)来为窗口创建一个边框。边框样式可以根据操作系统的外观进行绘制。
代码如下所示
HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD | WS_BORDER,50, 50, 100, 30,hWnd, NULL, NULL, NULL);扁平化按钮
使用BS_FLAT (0x8000)可以创建一个扁平的按钮也就是没有凸起的边框。这个样式的按钮更趋近于我们现代的程序样式。 代码如下所示 HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD | BS_FLAT,50, 50, 100, 30,hWnd, NULL, NULL, NULL);复选框样式按钮
使用BS_CHECKBOX (0x00000002)创建一个复选框样式的按钮。 代码如下 HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD | BS_CHECKBOX,50, 50, 100, 30,hWnd, NULL, NULL, NULL);自动复选框
前面那个复选框你可以发现他点击后并没有勾选使用BS_AUTOCHECKBOX (0x00000003)可以创建一个自动复选框样式的按钮。当用户单击按钮时按钮的选中状态将自动切换。 代码如下 HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD |BS_AUTOCHECKBOX,50, 50, 100, 30,hWnd, NULL, NULL, NULL);单选按钮
有了复选按钮自然少不了单选按钮。使用BS_RADIOBUTTON (0x00000004)创建一个单选按钮样式的按钮。 代码如下 HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD |BS_RADIOBUTTON,50, 50, 100, 30,hWnd, NULL, NULL, NULL);三态按钮
使用BS_3STATE (0x00000005)创建一个三态按钮。按钮可以处于选中、未选中和半选中三种状态之一。 代码如下 HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD |BS_3STATE,50, 50, 100, 30,hWnd, NULL, NULL, NULL);自动三态按钮
显然上面的三态按钮点击并不会有反应我们可以使用BS_AUTO3STATE (0x00000006)创建一个自动三态按钮。按钮的状态会自动切换。 代码如下 HWND hButton CreateWindow(BUTTON, 确认, WS_VISIBLE | WS_CHILD |BS_AUTO3STATE,50, 50, 100, 30,hWnd, NULL, NULL, NULL);默认按钮样式对话框Enter键
使用BS_DEFPUSHBUTTON (0x00000001)创建一个默认的按钮通常是对话框中的 Enter 键默认按钮。
设置按钮位置和大小
CreateWindow 函数的第四个参数是按钮控件的位置和大小。 代码如下 HWND hButton CreateWindow(BUTTON, text, WS_VISIBLE | WS_CHILD |BS_FLAT,20, 50, 100, 40,hWnd, NULL, NULL, NULL);如上所示20, 50 是按钮的左上角位置的 x 和 y 坐标而 100, 40 是按钮的宽度和高度。 封装函数
可以发现CreateWindow 函数的自由度还是比较高的但创建的时候需要填写的内容太多了我们之前只是简单的进行了一个封装使其完全丧失了自由度接下来我们进行新一轮的封装让其为我们后续的开发提供更大的便利。 代码如下
typedef struct _Vector2
{int x;int y;
}Vector2;
void CreateButton(HWND hWnd,char *text,Vector2 position,Vector2 size);
void CreateButton(HWND hWnd,char *text,Vector2 position,Vector2 size)
{HWND hButton CreateWindow(BUTTON, text, WS_VISIBLE | WS_CHILD |BS_FLAT,position.x, position.y, size.x, size.y,hWnd, NULL, NULL, NULL);
}我们声明了一个Vector2类型用于表示我们的二维坐标用其修改我们的位置和大小。 然后弄一个字符指针指向一个常量字符串用于指定我们按钮上的文字。
最后的调用示例如下
CreateButton(hWnd,按钮,(Vector2){10,30},(Vector2){100,20});可以发现调用的代码量大大缩减当然我们没有为其样式做形参如果你有需求的话也可以修改函数。