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

news2025/1/13 15:43:23

在 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.coloradmin.cn/o/1895746.html

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

相关文章

ConsiStory:无需训练的一致性文本到图像生成技术

随着大规模文本到图像&#xff08;T2I&#xff09;扩散模型的发展&#xff0c;用户可以更自由地通过文本指导图像生成过程。然而&#xff0c;要在不同的提示中保持同一主题的视觉一致性仍然是一个挑战。现有的方法通常需要对模型进行微调或预训练&#xff0c;以教授新词汇来描述…

信息安全驱动汽车行业快速向数字化转型

开发一款安全性良好的软件是困难的&#xff0c;它需要专业知识的积累以及对常见编程缺陷和规则的了解&#xff0c;例如检查输入范围、管理内存分配和回收、寻址字符串格式、避免悬空指针等等。通常情况下&#xff0c;编写安全代码与开发人员编写“流畅”代码的自然愿望形成了对…

滤波算法学习笔记

目录 引言 一、定义 二、分类 三、常见滤波算法 四、应用与优势 五、发展趋势 例程 1. 均值滤波&#xff08;Moving Average Filter&#xff09; 2. 中值滤波&#xff08;Median Filter&#xff09; 3. 高斯滤波&#xff08;Gaussian Filter&#xff09; 4.指数移动…

新技术 高效的碳捕捉技术设计

网盘 https://pan.baidu.com/s/1mUlEhbQ6LBHYdmfg-du9bw?pwdc7gk 一种用于高效捕集CO_Sub_2__Sub_的生物炭颗粒吸附剂及其制备方法和应用.pdf 基于双相离子溶液的高效碳捕集及节能再生装置.pdf 基于水合物法低温液化的高效碳捕集系统及其操作方法.pdf 碳捕集系统及方法.pdf 高…

Feign远程调用,请求头丢失情况

现象 解决方案 import feign.RequestInterceptor; import feign.RequestTemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestContextHolde…

一篇文章说清楚Filter(过滤器)、Interceptor(拦截器)和AOP(切面儿)

文章目录 前言一、Filter&#xff08;过滤器&#xff09;1.说明2.实现filterChain.doFilter() 3.order优先级4.解决跨域5.拦截返回错误信息JSON 二、Interceptor&#xff08;拦截器&#xff09;1.说明2.实现preHandlepostHandleafterCompletion 3.执行顺序图4.排除特定路径拦截…

C#/.NET/.NET Core编程技巧练习集

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集&#xff0c;配套详细的文章教程讲解&#xff0c;助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。 GitHub开源地址&#xff1a;https://…

MedCLIP:CLIP + 医学语义匹配策略,解决模型误将不同患者同病症视为不相关

MedCLIP&#xff1a;CLIP 医学语义匹配策略&#xff0c;解决模型误将不同患者同病症视为不相关 提出背景流程图解法拆解子解法1&#xff1a;知识提取子解法2&#xff1a;视觉和文本编码器子解法3&#xff1a;语义匹配损失 提出背景 论文&#xff1a;https://arxiv.org/pdf/22…

【SkiaSharp绘图15】SKPath属性详解:边界、填充、凹凸、类型判断、坐标、路径类型

文章目录 SKPath 构造函数SKPath 属性Bounds 边界(宽边界)TightBounds紧边界FillType填充方式IsConcave 是否凹/ IsConvex 是否凸IsEmpty是否为空IsLine是否为线段IsRect是否为矩形IsOval是否为椭圆或圆IsRoundRect是否为圆角矩形Item[] 获取路径的坐标LastPoint最后点的坐标Po…

JavaScript——while类型

目录 任务描述 相关知识 while类型 编程要求 任务描述 质数的定义如下&#xff1a;大于1的自然数&#xff0c;且除了1和本身外没有别的因数。如2、3、5、7。 本关任务&#xff1a;利用循环结构求质数的和。 相关知识 在选择结构中&#xff0c;条件会被测试一次&#xff…

第一百四十三节 Java数据类型教程 - Java Boolean包装类

Java数据类型教程 - Java Boolean包装类 布尔类的对象包装一个布尔值。 Boolean.TRUE和Boolean.FALSE是布尔类型的两个常量&#xff0c;用于表示布尔值true和false值。 我们可以使用构造函数或valueOf()工厂方法创建一个布尔对象。 当解析字符串时&#xff0c;此类将处理“t…

复现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; 找到自己…

RK3568平台(opencv篇)ubuntu18.04上安装opencv环境

一.什么是 OpenCV-Python OpenCV-Python 是一个 Python 绑定库&#xff0c;旨在解决计算机视觉问题。   Python 是一种由 Guido van Rossum 开发的通用编程语言&#xff0c;它很快就变得非常流行&#xff0c;主要是 因为它的简单性和代码可读性。它使程序员能够用更少的代码行…

LVS-DR负载均衡

LVS-DR负载均衡 LVS—DR工作模式 原理 客户端访问调度器的VIP地址&#xff0c;在路由器上应该设置VIP跟调度器的一对一的映射关系&#xff0c;调度器根据调度算法将该请求“调度“到后端真实服务器&#xff0c;真实服务器处理完毕后直接将处理后的应答报文发送给路由器&#xf…

[Redis]哨兵机制

哨兵机制概念 在传统主从复制机制中&#xff0c;会存在一些问题&#xff1a; 1. 主节点发生故障时&#xff0c;进行主备切换的过程是复杂的&#xff0c;需要人工参与&#xff0c;导致故障恢复时间无法保障。 2. 主节点可以将读压力分散出去&#xff0c;但写压力/存储压力是无法…

二、基础—常用数据结构:列表、元祖、集合、字典、函数等(爬虫及数据可视化)

二、基础—常用数据结构&#xff1a;列表、元祖、集合、字典、函数等&#xff08;爬虫及数据可视化&#xff09; 1&#xff0c;字符串2&#xff0c;最常用的是列表&#xff08;重点掌握&#xff09;3&#xff0c;元组4&#xff0c;字典&#xff08;重要&#xff09;5&#xff0…

卫星IoT产品发展前景

卫星IoT产品发展前景 一、概述 卫星IoT产品是指利用卫星通信技术实现物联网设备互联互通的解决方案。随着卫星互联网技术的快速发展&#xff0c;卫星IoT产品正逐渐成为解决偏远地区、海洋、航空等场景下物联网连接问题的重要手段。 二、性能特点 广泛覆盖&#xff1a; 卫星…

搜维尔科技:如何使用 SenseGlove Nova 加速手部运动功能的恢复

District XR 的VR 培训 5 年多来&#xff0c;District XR 一直在为最大的工业公司创建 VR 和 AR 项目。 客户&#xff1a;District XR 客户代表&#xff1a;尼古拉沃尔科夫 他的角色&#xff1a;District XR 首席执行官 面临解决的挑战 该公司正在寻找一种方法来加速身体伤…

k8s离线安装安装skywalking9.4

目录 概述资源下载Skywalking功能介绍成果速览实践rbacoapoap-svcuiui-svc 结束 概述 k8s 离线安装安装 skywalking9.4 版本&#xff0c;环境&#xff1a;k8s版本为&#xff1a;1.27.x 、spring boot 2.7.x spring cloud &#xff1a;2021.0.5 、spring.cloud.alibab&#xff1…