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

news2024/12/17 17:50:42

文章目录

  • 前置章节
  • 指定窗口样式
    • 给按钮加边框
    • 扁平化按钮
    • 复选框样式按钮
      • 自动复选框
    • 单选按钮
    • 三态按钮
      • 自动三态按钮
    • 默认按钮样式(对话框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.coloradmin.cn/o/1140263.html

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

相关文章

10G传输分析仪SDH表TFN D450S参数详情

D450S 10G SDH系列 SDH/SONET传输测试模块 D450S系列SDH/SPNET传输测试模块是TFN模块化测试产品中的一款。D450S系列可配置在FT100测试平台上,实现广泛的PDH/DSn和SDH/SONET的测试功能,为城域网提供综合的测试方案,是高性价比的网络测试产品…

500内部服务器错误很常见,但解决方法也很常见

500内部服务器错误是一个非常通用的HTTP状态代码,这意味着网站的服务器出现了问题,但服务器无法更具体地说明具体问题是什么。 HTTP 500内部服务器错误的原因 大多数情况下,当页面或网站的编程出现问题时,就会出现此错误,但问题肯定在你这边。这些问题可能是由浏览器中的…

Linux系统之file命令的基本使用

Linux系统之file命令的基本使用 一、file命令介绍1.1 Linux简介1.2 file命令简介 二、file命令的使用帮助2.1 file命令的help帮助信息2.2 file命令的语法解释2.3 file命令的man手册 三、文件类型介绍四、file命令的基本使用4.1 查询file版本4.2 显示文件类型4.3 输出时不显示文…

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

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

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

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

C++模板类用作参数传递

前言 在模板类<>传递参数的一种实现。记不住&#xff0c;以此记录。 // dome.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #define _CRT_SECURE_NO_WARNINGS #include <iostream> //#include "tools.h" #include <fu…

一种基于屏幕分辨率的RTSP主子码流切换的多路视频监控的播放方案

技术背景&#xff1a; 用户场景下&#xff0c;存在多个监控场所的100路监控摄像头&#xff0c;例如&#xff1a;大华、海康、宇视、杭州宇泛的枪机、球机、半球、NVR、DVR等不同类型的监控设备&#xff0c;通过视频监控平台进行设备的管理&#xff0c;通过RTSP拉流的方案管理监…

python自动化测试平台开发:自动化测试平台简介

一.测试平台简介 为什么需要测试平台 已有的开源测试平台不能满足需要&#xff0c;不要轻易造轮子 需要公司级别的定制 需要整合公司内部的多套平台 例子&#xff1a;DevOps平台、精准化测试平台、质量监控平台等等 常见的测试平台开发模式 大一统模式&#xff08;适合简单的…

鉴源实验室 | AUTOSAR E2E:车载通信的安全保障

作者 | 沈平 上海控安可信软件创新研究院汽车网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 随着汽车行业逐步走向电气化、智能化&#xff0c;车载系统的软件和硬件复杂度不断上升。如何确保这些复杂系统中的数据通讯安全和…

Arduino驱动热敏电阻传感器模块

目录 一、简介二、参数性能三、使用方法四、实验现象 一、简介 点击图片购买 热敏电阻传感器模块采用NTC热敏电阻传感器&#xff0c;灵敏度好&#xff0c;PH2.0接口即插即用&#xff0c;防反接&#xff0c;适用于各类开发板。 二、参数性能 电压5V接口3PIN防反接PH2.0杜邦线尺…

BigDecimal应用——计算费用场景中用到Integer,Double,BigDecimal三种类型出现的意外情况 结合BigDecimal源码分析

引出 在一个计算费用的场景中&#xff0c;用到了Integer&#xff0c;Double&#xff0c;BigDecimal三种类型&#xff0c;在转换为bigdecimal的时候遇到的问题&#xff0c;结合源码进行了分析。 1.在new bigdecimal的时候&#xff0c;最好传入的是字符串&#xff1b;2.double类…

Java集合框架:List、Set、Map类型及泛型详解

文章目录 &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专家博主、清华大学出版社签约作者、产品软文创造者、技术文章评审老师、问卷调查设计师、个人社区创始人、开源项目贡献者。&#x1f30e;跑过十五…

干货!BIM高性能3D Web轻量化引擎——HOOPS Communicator!

HOOPS Communicator是一款简单而强大的工业级高性能3D Web可视化开发包&#xff0c;专注于Web端工程图形渲染。采用了先进的流式加载方式&#xff0c;并支持服务端和客户端渲染&#xff0c;是可以在云端进行部署和无缝集成的新技术平台。灵活且易于部署&#xff0c;可在以工程为…

你绝对不知道的接口加密解决方案:Python的各种加密实现

在现代软件开发中&#xff0c;接口测试已经成为了不可或缺的一部分。随着互联网的普及&#xff0c;越来越多的应用程序都采用了接口作为数据传输的方式。接口测试的目的是确保接口的正确性、稳定性和安全性&#xff0c;从而保障系统的正常运行。 在接口测试中&#xff0c;加密…

InterfaceWave 架构图

场景 正在开发一个Web应用&#xff0c;接口中很多重复逻辑&#xff08;重复逻辑已经被抽象&#xff09;&#xff0c;我使用一个Adapter适配器&#xff0c;就可以自己生成接口&#xff0c;不用再一个一个C S D 写重复逻辑&#xff0c;我只需要在配置文件中配置&#xff0c;接口…

软件测试外包干了4年,感觉废了...

​先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测…

Nokogiri库和OpenURI库使用HTTP做一个爬虫

Nokogiri和OpenURI是两个常用的Ruby库&#xff0c;用于编写爬虫程序。它们的主要功能如下&#xff1a; 1、Nokogiri&#xff1a;Nokogiri是一个强大的HTML和XML解析库&#xff0c;可以用于解析网页内容。它提供了一组简单易用的API&#xff0c;可以方便地遍历和操作HTML或XML文…

对遗留系统的处理——(二)具体方法

对于遗留系统的分析和评价&#xff0c;具体方法是按照业务评价分值和技术水平分值的情况&#xff0c;把评价结果分为4种类型&#xff0c;如下图所示。 &#xff08;1&#xff09;改造 &#xff08;2&#xff09;继承 &#xff08;3&#xff09;淘汰 &#xff08;4&#xff09;集…

如何 通过使用优先级提示,来控制所有网页资源加载顺序

当你打开浏览器的网络标签时&#xff0c;你会看到大量的活动。资源正在下载&#xff0c;信息正在提交&#xff0c;事件正在记录&#xff0c;等等。 由于有太多的活动&#xff0c;有效地管理这些流量的优先级变得至关重要。带宽争用是真实存在的&#xff0c;当所有请求同时触发时…

前端知识储备

前端知识储备 一. 什么是前端? """ 任何与用户直接打交道的操作界面都可以称之为前端 比如:电脑界面 手机界面 平板界面什么是后端后端类似于幕后操作者(一堆让人头皮发麻的代码)不直接跟用户打交道 """ 二. 为什么学前端? ""&quo…