C语言编写图形化界面-创建按钮-为其指定样式

文章目录

  • 前置章节
  • 指定窗口样式
    • 给按钮加边框
    • 扁平化按钮
    • 复选框样式按钮
      • 自动复选框
    • 单选按钮
    • 三态按钮
      • 自动三态按钮
    • 默认按钮样式(对话框Enter键)
  • 设置按钮位置和大小
  • 封装函数

前置章节

开始之前,需要学习以下章节:
创建窗口
窗口过程函数
创建按钮

指定窗口样式

CreateWindow函数的第三个参数是窗口样式,它是一个用于指定窗口的外观和行为的标志的组合。

这里我们需要使用一些预定义的符号常量,通过位掩码的形式将这些符号常量进行一个组合。

在上面的示例中,我们使用了如下的定义:

WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON

WS_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});

可以发现,调用的代码量大大缩减,当然我们没有为其样式做形参,如果你有需求的话,也可以修改函数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120342.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣第435题 无重叠区间 c++ 贪心思维

题目 435. 无重叠区间 中等 相关标签 贪心 数组 动态规划 排序 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,…

Python的Pandas库(二)进阶使用

Python开发实用教程 DataFrame的运算 DataFrame重载了运算符,支持许多的运算 算术运算 运算方法运算说明df.add(other)对应元素的加,如果是标量,就每个元素加上标量df.radd(other)等效于otherdfdf.sub(other)对应元素相减,如果…

NAT技术与代理服务器

目录 一、NAT与NAPT技术 1.NAT技术 2.NAPT技术 (1)四元组的唯一性 (2)数据的传输过程 (3)NAPT的缺陷 二、代理服务器 1.正向代理和反向代理 2.代理服务器的应用 (1)游戏加…

图纸管理制度《四》

1、目的 使公司的图纸得到有效的控制,确保生产所用的图纸为最新有效版本,避免因图纸管理不当造成的损失。 2、定义 本制度所述的图纸包括产品总装图、装配图、零件图、工装图纸、检具图纸、包装图纸、工艺流程 3、范围 客户提供的图纸,技…

Kotlin 使用@BindingAdapter编译出错

在 Kotlin 中使用 BindingAdapter 注解时,需要确保你的项目正确配置了 Data Binding。 首先,请确保在项目的 build.gradle 文件中启用了 Data Binding: android {// ...dataBinding {enabled true} }接下来,请确保你在正确的地…

selenium+python web自动化测试框架项目实战实例教程

自动化测试对程序的回归测试更方便。 由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行... 可以运行更加繁琐的测试 自动化测试的一个明显好处就是可以在很短的时间内运行更多的测试。学习自动化测试最终目的是应用到实际项目中&…

LabVIEW应用开发——基本函数(一)

前面我们介绍了一些控件的介绍和属性的配置,想要完成一个软件只会拖控件肯定是不行的,没办法实现既有的功能。比如我们要实现从串口中读到数据,根据一定的协议解析,然后转换成各个参数的值的显示,包括时间、电压、电流…

796. 子矩阵的和(左上角前缀和)

题目: 796. 子矩阵的和 - AcWing题库 思路: 1.暴力搜索(搜索时间复杂度为O(n2),很多时候会超时) 2. 前缀和(左上角前缀和):本题特殊在不是直接求前n个数的和,而是求…

第1篇 目标检测概述 —(3)目标检测评价指标

前言:Hello大家好,我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标,主要包括几个指标:精确率(Precision)、召回率(Recall)、交并比(IoU)、平均…

最后一个单词的长度[简单]

优质博文:IT-BLOG-CN 一、题目 给你一个字符串s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1: 输入:s Hell…

UI自动化测试是什么?什么项目适合做UI自动化测试

UI 测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的 BUG。了解用户将如何在用户和网站之间进行交互以执行 UI 测试至关重要,通过执行 UI 测试…

Flink Hive Catalog操作案例

在此对Flink读写Hive表操作进行逐步记录,需要指出的是,其中操作Hive分区表和非分区表的DDL有所不同,以下分别记录。 基础环境 Hive-3.1.3 Flink-1.17.1 基本操作与准备 1、上传依赖jar包到flink/lib目录下 cp flink-sql-connector-hive-…

【成功实现】CentOS磁盘扩容

对服务器磁盘扩容操作步骤 查看磁盘信息 fdisk -l 创建新分区 fdisk /dev/sda P n p … t 回车 8e w 重启虚拟机 reboot mkfs.ext4 /dev/sda4 查看磁盘信息 fdisk -l 创建物理卷 pvcreate /dev/sda4 y 创建卷组 并绑定物理卷 vgcreate centos /dev/sda4 创建逻辑…

golang小技巧

1/有时需要把json内容返回给前段进行文本编辑json字段,那么最好是能返回格式化后的json,这样对于用户编辑页方便。这时候可以利用json.MarshalIndent(data, "", "\t")来进行格式化,带有缩进的marshal。 2/对holders的填…

如何使用SpringBoot处理全局异常

如何使用SpringBoot处理全局异常 使用ControllerAdvice 和 ExceptionHandler处理全局异常 参考: ControllerAdvice ResponseBody Slf4j public class ExceptionHandler {ResponseStatus(HttpStatus.OK)org.springframework.web.bind.annotation.ExceptionHandler…

基于springboot实现校友社交平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现校友社交平台管理系统演示 摘要 校友社交系统提供给用户一个校友社交信息管理的网站,最新的校友社交信息让用户及时了解校友社交动向,完成校友社交的同时,还能通过论坛中心进行互动更方便。本系统采用了B/S体系的结构,使用了java技…

Linux下的文件操作和文件管理

文章目录 应用编程文件操作文件描述符open函数write函数read函数close函数lseek函数文件操作例子 文件管理文件基本知识文件类型文件共享空洞文件错误处理退出程序原子操作fcntl和ioctl截断文件stat函数软链接和硬链接 应用编程 系统调用(system call)是Linux内核提供给应用层…

【ARM Coresight 系列文章 15.2 – components power domain 详细介绍】

【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 1.1. Coresight 电源域模型1.1.1 CDBGPWRUPREQ 和 CDBGPWRUPACK1.1.2 CSYSPWRUPREQ 和 CSYSPWRUPACK1.1.3 Power Domain ID In RomTable1.1.4 Power domain entries1.1.5 Algorithm to discover power domain IDs1.1.6 De…

便利连锁:如何增加收益?教你一招轻松搞定!

自动售货机,作为零售行业的一项颠覆性技术,正逐渐改变着我们的购物方式和商业格局。这一创新技术不仅重新定义了零售业务模式,还为企业提供了更多的机会来满足不断演变的消费者需求。 客户案例 便利连锁店 成都某便利连锁店面临一系列挑战&am…

[Pytorch] 保存模型与加载模型

1、保存模型 # 定义模型 model BPNetModel(n_featuren_feature,n_hiddenn_hidden,n_outputn_output) #调用网络# 保存模型 torch.save(model, BPNetModel0.pth) 2、加载模型 import torch## 读取模型 model torch.load(BPNetModel0.pth) 3、保存模型参数 #调用网络 mode…