《Winodws API每日一练》8.2 static控件

在 Windows 编程中,"Static" 控件是一种常见的用户界面元素,用于显示静态文本或图像,而无法进行用户交互。它通常用于显示标签、标题、说明文本或静态图像等信息。Static 控件是一种静态的、只读的显示元素,不接受用户的输入或操作。

本节必须掌握的知识点:

        静态类

        第51练:静态文本控件

8.2.1 静态类

用CreateWindow函数和“静态” (static)窗口类来创建静态子窗口控件。静态类子窗口控件不接受鼠标或键盘输入,也不会向其父窗口发送WM_COMMAND 消息。

在使用 Win32 API 进行开发时,可以使用 CreateWindow 函数创建 Static 控件。需要指定控件的类名为 "STATIC",样式为 SS_LEFT 或 SS_CENTER 等来控制文本对齐方式。

HWND hStatic = CreateWindow("STATIC", "Static Text", WS_CHILD | WS_VISIBLE, x, y,

width, height, hParent, NULL, hInstance, NULL);

当你在一个静态子窗口上移动或单击鼠标时,子窗口会俘获WM_NCHITTEST消息 并向Windows返回HTTRANSPARENT值。这会导致Windows向其底层窗口(通常是其父窗口)发送相同的WM_NCHITTEST消息。父窗口通常将该消息传给DefWindowProc,在那里它会被转换为客户区鼠标消息。

       ■静态窗口样式

前6个静态窗口样式只是简单地在子窗口的客户区内画一个矩形或框架。“RECT”静

态样式(左栏)是填充的矩形;三个“FRAME”样式(右栏)是内部没有被填充的矩形边框。

SS_BLACKRECT           SS_GRAYFRAME

SS_WHITERECT           SS_BLACKFRAME

SS_GRAYRECT                SS WHITEFRAME

“BLACK”、“GRAY”和“WHITE”并不意味实际的黑色、灰色和白色。它们更多的是基于下表所示的系统颜色。

静态控件

系统颜色

BLACK

COLOR_3DDKSHADOW

GRAY

COLOR_BTNSHADOW

WHITE

COLOR_BTNHIGHLIGHT

对于这些样式,CreateWindow调用的窗口文本字段将被忽略。矩形左上角的x和y 坐标是相对于父窗口的。也可以使用SS_ETCHEDHORZ ,SS_ETCHEDVERT或 SS_ETCHEDFRAME样式来用白色和灰色创建一个阴影框架。

静态类还包括三个文本样式:SS_LEFT,SS_RIGHT和SS_CENTER。这些样式会创建左对齐、右对齐和居中对齐的文本。相应的文本由CreateWindow函数的窗口文本参数指定,可以被SetWindowText修改。当静态控件的窗口过程显示此文本时,它会使用 DT_WORDBREAK, DT_NOCLIP 和 DT_EXPANDTABS 等参数来调用 DrawText 函数。 子窗口矩形框具有文本自动换行功能。

这三个文本样式子窗口的背景颜色通常是COLOR_BTNFACE,文本本身颜色是 COLOR_WINDOWTEXT。你可以俘获 WM_CTLCOLORSTATIC 消息,调用 SetTextColor 和SetBkColor分别改变文本颜色和背景颜色,同时返回背景画刷的句柄。

最后,静态类还包括两个窗口样式,分别为SS_ICON和SS_USERITEM。然而,当它们被用来作为子窗口控件时,这些样式是毫无意义的。我们会在讨论对话框的时候再次讨论它们。

样式

说明

SS_BLACKRECT/SS_BLACKFRAME

填充矩形或画边框,分别对应的系统颜色为COLOR_3DDSHADOWCOLOR_BTNSHADOWCOLOR_BTNHIGHLIGHT。在CreateWindow调用的窗口文本字段将被忽略(因为被填充了)。坐标是相对于父窗口的

SS_GRAYRECT / SS_GRAYRECT

SS_WHITERECT/SS_WHITEFRAME

SS_ETCHEDHORZ

用白色和灰色,建立一个边框,并将顶端边框设置为浮雕风格

SS_ETCHEDVERT

用白色和灰色,建立一个边框,并将左侧边框设置为浮雕风格

SS_ETCHEDFRAME

建立一个浮雕边框(阴影边框)

SS_LEFT

文本的对齐方式,相应的文本由CreateWindow的文本参数指定,可通过SetWindowsText修改。窗口过程内部使用DrawText函数带DT_WORDBREAKDT_NOCLIPDT_EXPANDTABS参数来显文本

SS_RIGHT

SS_CENTER

SS_ICON

作为子窗口控件时,该样式是无意义的。

SS_USERITEM

8.2.2 第51练:静态文本控件

/*------------------------------------------------------------------

051  WIN32 API 每日一练

     第51个例子STATIC_TEXT.C:静态文本控件

     SetWindowText函数

(c) www.bcdaren.com, 2020

----------------------------------------------------------------*/

#include <windows.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

HINSTANCE hInst;//全局变量

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

 PSTR szCmdLine, int iCmdShow)

{

     static TCHAR szAppName[] = TEXT("Static Demo");

    (略)

     return msg.wParam;

}

//窗口过程

LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)

{

    PAINTSTRUCT ps;

    HDC hdc;

    //必须被设置为静态变量

    static int iClick = 0;  //鼠标单击次数

    static TCHAR szTextBuf[20];  //static 控件文本(缓冲区)

    static HWND hStatic//static 控件句柄

    static RECT  rect;

    static cxClient,cyClient;

    switch (message)

     {

     case  WM_CREATE:

          //获取窗口客户区宽和高

          GetClientRect(hWnd,&rect);

          hStatic = CreateWindow(

               TEXT("static"), //静态文本框的类名

               TEXT("编程达人"),  //控件的文本

               WS_CHILD| WS_VISIBLE| WS_BORDER|

SS_CENTER| SS_CENTERIMAGE /*垂直居中*/,

               rect.left+50 /*X坐标*/, rect.top+50  /*Y坐标*/,

rect.right/2/*宽度*/, rect.bottom/2 /*高度*/,

               hWnd//父窗口句柄

               (HMENU)1,  //为控件指定一个唯一标识符

               hInst//当前程序实例句柄

               NULL

          );

          break;

     case WM_SIZE:

          cxClient = LOWORD(lParam);

          cyClient = HIWORD(lParam);

//调整窗口          MoveWindow(hStatic,rect.left+cxClient/20,rect.top+cyClient/20,

cxClient/2,cyClient/2,TRUE);

          break;

     case WM_PAINT:

          hdc = BeginPaint(hWnd, &ps);

          // TODO:  在此添加任意绘图代码...

          EndPaint(hWnd, &ps);

          break;

     case WM_LBUTTONDOWN//鼠标左键单击消息

          iClick++;

          wsprintf(szTextBuf, TEXT("鼠标被单击%d次"), iClick);

          SetWindowText(hStatic, szTextBuf);

          break;

     case WM_DESTROY:

          PostQuitMessage(0);

          break;

    }

    return DefWindowProc(hWnd, message, wParam, lParam) ;

}

/******************************************************************************

SetWindowText函数:更改指定窗口标题栏的文本(如果有的话)。如果指定的窗口是控件,则更改控件的文本。

BOOL SetWindowTextA(

  HWND   hWnd,  //要更改其文本的窗口或控件的句柄。

  LPCSTR lpString//新标题或控件文本

);

*/

运行结果:

图8-4 静态文本控件

 

总结

       实例STATIC_TEXT.C的窗口过程在处理WM_CREATE消息时调用CreateWindow函数创建一个“static”子窗口控件。窗口类名使用Windows预定义的静态类”static”,静态类子窗口控件的样式为“WS_CHILD| WS_VISIBLE| WS_BORDER| SS_CENTER| SS_CENTERIMAGE”,WS_CHILD表示子窗口样式,WS_VISIBLE表示可见的,WS_BORDER表示带边框的,SS_CENTER表示文本在窗口客户区内水平方向居中对齐,SS_CENTERIMAGE表示IMAGE图像在窗口客户区内水平垂直居中。CreateWindow返回子窗口控件句柄。使用菜单项ID值1标识静态文本子窗口控件ID。

       WM_SIZE消息调整子窗口控件大小。

       WM_PAINT消息可以在子窗口内绘图。

       M_LBUTTONDOWN消息中,调用SetWindowText指定在静态文本控件中显示鼠标点击次数。

       需要注意的是,Static 控件是一种只读的静态显示元素,无法接收用户的输入或操作。如果需要与用户进行交互,例如允许用户输入文本或点击操作,需要使用其他类型的控件,如 TextBox、Button 等。

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

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

相关文章

秒懂设计模式--学习笔记(6)【创建篇-建造者模式】

目录 5、建造者模式5.1 介绍5.2 建造步骤的重要性5.3 地产开发商的困惑5.4 建筑施工方5.5 工程总监5.6 项目实施5.7 建造者模式的各角色定义5.8 建造者模式 5、建造者模式 5.1 介绍 建造者模式&#xff08;Builder&#xff09;又称为生成器模式&#xff0c;主要用于对复杂对象…

爬虫-豆瓣电影排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析&#xff1a; 导入requests库调用了requests库中的…

明星代言6个提升企业形象的杀手锏-华媒舍

在当今竞争激烈的商业世界中&#xff0c;企业形象的塑造对于品牌的发展至关重要。而明星代言作为一种常见的营销手段&#xff0c;被广泛使用来提升企业形象和产品销售。本文将介绍明星代言的六个杀手锏&#xff0c;帮助您了解如何通过明星代言来提升企业形象。 1. 拥有广泛的影…

关于虚拟机CentOS 7使用ssh无法连接(详细)

虚拟机CentOS 7使用ssh无法连接 猜测&#xff1a;可能是虚拟机软件的网关和和centos7的网关不同导致的问题。 首先打开CentOS7的终端, 输入ifconfig&#xff0c;查看一下系统的ip 打开虚拟机的虚拟网络编辑器, 查看一下网关, 发现确实不一样. 这里有两种方式, 要么修改虚…

Pytorch实战(二):VGG神经网络

文章目录 一、诞生背景二、VGG网络结构2.1VGG块2.2网络运行流程2.3总结 三、实战3.1搭建模型3.2模型训练3.3训练结果可视化3.4模型参数初始化 一、诞生背景 从网络结构中可看出&#xff0c;所有版本VGG均全部使用33大小、步长为1的小卷积核&#xff0c;33卷积核同时也是最小的能…

Java | Leetcode Java题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isIsomorphic(String s, String t) {Map<Character, Character> s2t new HashMap<Character, Character>();Map<Character, Character> t2s new HashMap<Character, Character>(…

Java-数据结构

数据结构概述 常见的数据结构 栈 队列 数组 链表 二叉树 二叉查找树 平衡二叉树 红黑树 示例&#xff1a;

【Go】编译frp,绕过内网安全工具

文章目录 概述常用命令编译环境配置开发环境拉取依赖打包exe输出运行打包好的exe测试 绕过安全产品实践frp使用教程 本文所提供的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与教学之用。文章作者无法鉴别判断读者使用信息及工具的真实用途&#xff0c;若读者将文章中的…

2024 年第十四届 APMCM 亚太地区大学生数学建模 B题 洪水灾害的数据分析与预测--完整思路代码分享(仅供学习)

洪水是暴雨、急剧融冰化雪、风暴潮等自然因素引起的江河湖泊水量迅速增加&#xff0c;或者水位迅猛上涨的一种自然现象&#xff0c;是自然灾害。洪水又称大水&#xff0c;是河流、海洋、湖泊等水体上涨超过一定水位&#xff0c;威胁有关地区的安全&#xff0c;甚至造成灾害的水…

基于惯性加权PSO优化的目标函数最小值求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于惯性加权PSO优化的目标函数最小值求解matlab仿真。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 &#xff08;完整程序运行后无水印&#xff09;…

使用java stream对集合中的对象按指定字段进行分组并统计

一、概述 有这样一个需求&#xff0c;在一个list集合中的对象有相同的name&#xff0c;我需要把相同name的对象进行汇总计算。使用java stream来实现这个需求&#xff0c;这里做一个记录&#xff0c;希望对有需求的同学提供帮助 一、根据指定字段进行分组 一、先准备好给前端要…

三菱plc gxwork3 0X121201F 报错;三菱标签区域的保留容量不足;

如果占用过多把r文件寄存器的地址范围改小&#xff0c;一般文件寄存器的地址r0-8000足够了

zk集群搭建

zk集群在搭建部署的时候&#xff0c;通常选择2n1奇数台。底层 Paxos 算法支持&#xff08;过半成功&#xff09;。 zk部署之前&#xff0c;保证服务器基础环境正常、JDK成功安装。 服务器基础环境 IP主机名hosts映射防火墙关闭时间同步ssh免密登录 JDK环境 1、虚拟机克隆 …

014-GeoGebra基础篇-快速解决滑动条的角度无法输入问题

有客户反馈&#xff0c;他的Geogebra一直有个bug&#xff0c;那就是输入角度最大值时总不按照他设定的展示&#xff0c;快被气炸了~ 目录 一、问题复现&#xff08;1&#xff09;插入一个滑动条&#xff08;2&#xff09;选择Angle&#xff08;3&#xff09;输入90&#xff0c;…

复现centernet时,报错RuntimeError: CUDA error: out of memory

运行 python test.py ctdet --dataset coco --exp_id coco_dla --load_model /root/CenterNet/exp/ctdet/coco_dla/model_last.pth --gpus 0 --test_scales 1 报错下面&#xff1a; RuntimeError: CUDA error: out of memory明明显存是够用的 解决办法&#xff1a; 找到自己…

代码随想录——无重叠区间(Leetcode435)

题目链接 贪心 排序 class Solution {public int eraseOverlapIntervals(int[][] intervals) {int res 0;if(intervals.length 1 || intervals.length 0){return res;}// 按左边界排序Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] …

Protobuf(三):理论学习,简单总结

1. Protocol Buffers概述 Protocol Buffers&#xff08;简称protobuf&#xff09;&#xff0c;是谷歌用于序列化结构化数据的一种语言独立、平台独立且可扩展的机制&#xff0c;类似XML&#xff0c;但比XML更小、更快、更简单protobuf的工作流程如图所示 1.1 protobuf的优点…

【第17章】MyBatis-Plus自动维护DDL

文章目录 前言一、功能概述二、注意事项三、代码示例四、实战1. 准备2. ddl配置类3. 程序启动4. 效果(数据库) 总结 前言 在MyBatis-Plus的3.5.3版本中&#xff0c;引入了一项强大的功能&#xff1a;数据库DDL&#xff08;数据定义语言&#xff09;表结构的自动维护。这一功能…

告别高查重率,AI降重工具帮你快速过关

高查重率是许多毕业生的困扰。通常&#xff0c;高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法&#xff0c;如修改文本和增添原创内容&#xff0c;虽必要但耗时且成效不一。 鉴于此&#xff0c;应用AI工具进行AIGC降重成为了一个高效的解决方案。这些工具…