《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 等。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 快递100wms工具类

快递wms工具类 import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.kuaidi100.sdk.api.QueryTrack; import com.kuaidi100.sdk.api.Subscribe; import com.kuaidi100.sdk.contant.ApiInfoConstant; import c…

11.SQL注入-盲注基于(base on boolian)

SQL注入-盲注基于boolian案例利用 首先总结一下sql语句中的函数意思 #查看当前所在的数据库 mysql> select database(); ------------ | database() | ------------ | pikachu | ------------ 1 row in set (0.00 sec)#函数substr里1是从第几位开始取字符&#xff0c;2…

mybatis-使用自动生成(根据数据库反向生成pojo、映射文件,映射接口)

1.在pom.xml中导入依赖和插件 <dependencies> <!-- 导入自动生成依赖--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.4.0</version>&…

【PCIe】P2P DMA

PCIe P2P (peer-to-peer communication)是PCIe的一种特性&#xff0c;它使两个PCIe设备之间可以直接传输数据&#xff0c;而不需要使用主机RAM作为临时存储。如下图3的走向 比如EP1要发送和数据给EP2,操作流程如下&#xff1a; 1. 打开EP1的dma控制器&#xff1b;--client侧 …

go开源webssh终端源码main.go分析

1.地址: https://github.com/Jrohy/webssh.git 2.添加中文注释地址: https://github.com/tonyimax/webssh_cn.git main.go分析 主包名&#xff1a;main package main //主包名 依赖包加载 //导入依赖包 import ("embed" //可执行文件…

密码学复习

目录 基础 欧拉函数 欧拉函数φ(n)定义 计算方法的技巧 当a=a_1*a_2*……*a_n时 欧拉定理 剩余系 一些超简单密码 维吉尼亚 密钥fox 凯撒(直接偏移) 凯特巴氏(颠倒字母表) 摩斯密码(字母对应电荷线) 希尔(hill)密码 一些攻击 RSA 求uf+vg=1 快速幂模m^…

苹果获得OpenAI董事会观察员职位、Runway最新估值40亿美元

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 据知情人士透露&#xff0c;苹果应用商店&#xff08;App Store&#xff09;负责人、前营销主管Phil Schiller被选中担任这一职位。这位知情人士说&#xff0c;作为董事会观察员&#xff0c;他不会以正…

二次搭建无人车平台遇到的问题(mid360+joy游戏手柄操纵无人车)

joy节点启动 报错&#xff1a; ROS path [0]/opt/ros/noetic/share/ros ROS path [1]/home/jetson/yahboomcar_ws/src/yahboomcar_autodrive ROS path [2]/home/jetson/yahboomcar_ws/src/yahboomcar_bringup ROS path [3]/home/jetson/yahboomcar_ws/src/yahboomcar_ctrl ROS…

【2024版】Microsoft Azure 管理员培训课程招生简章(8月有开班)

课程介绍 本课程专为希望深入了解和精通Microsoft Azure管理的IT专业人员设计。在为期三天的培训中&#xff0c;学员将全面学习如何管理Azure订阅&#xff0c;保护标识&#xff0c;配置虚拟网络&#xff0c;以及实现存储解决方案和虚拟机。此外&#xff0c;课程还涵盖了实现We…

传感器标定(一)摄像头内参标定

一、使用ROS进行手动标定安装 1、安装 image-view &usb_cam ⽤于驱动相机 sudo apt-get install ros-melodic-image-view sudo apt-get install ros-melodic-usb-cam2、查看系统视频设备 v4l2- ctl -d /dev/video0 --all 查询所有相机具体的参数包括width和height ls /…

Excel数据截取及合并多行多列数据

公式一&#xff1a;RIGHT(A2,LEN(A2)-FINDB(")",A2)) 公式二&#xff1a;PHONETIC(C2:D19) 详情可以看附件。

JMeter--定时执行的方法

原文网址&#xff1a;JMeter--定时执行的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍JMeter如何使用定时器定时执行测试任务。 Java技术星球&#xff1a;way2j.com 方法 第一步&#xff1a;新建定时器 右键测试任务> Add > Timer> Constant Timer 如下图所示…

【python数据处理】— “2020-01-01 05:20:15“日期格式数据

文章目录 一、数据说明及目标二、实现方式1.提取date2.提取hour3.提取weekday4.提取month 一、数据说明及目标 数据说明 数据表有一列名为"datetime"表示时间数据&#xff0c;该列的数据格式是"2020-01-01 05:20:15"。 import pandas as pd datapd.read_e…

云动态摘要 2024-07-04

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 数据库上云优选 阿里云 2024-07-04 RDS、PolarDB、Redis、MongoDB 全系产品新用户低至首年6折起&#xff01; [免费体验]智能助手ChatBI上线 腾讯云 2024-07-02 基于混元大模型打造&…

搜维尔科技:【研究】Scalefit人体工程学测量系统为预防肌肉骨骼疾病提供生物力学分析

与工作相关的肌肉骨骼疾病(MSE)是工作生活中的一个持续的伴侣。总部位于科隆的Scaleit公司生产的移动生物力学测量系统Industrial Athlete有助于在工作场所立即发现疾病&#xff0c;伤害和损伤的原因。 Scalefit是一个跨学科网络的一部分&#xff0c;在德国科隆体育大学和职业…

【CT】LeetCode手撕—232. 用栈实现队列

目录 题目1- 思路2- 实现⭐232. 用栈实现队列——题解思路 3- ACM 实现 题目 原题连接&#xff1a;232. 用栈实现队列 1- 思路 思路 ① 用两个栈来实现队列&#xff0c;一个 in 入栈 和一个 out 出栈② push 入队&#xff1a;入栈逻辑&#xff1a;即将元素加入到 in 栈 里即…

spring6框架解析(by尚硅谷)

文章目录 spring61. 一些基本的概念、优势2. 入门案例实现maven聚合工程创建步骤分析实现过程 3. IoC&#xff08;Inversion of Control&#xff09;基于xml的bean环境搭建获取bean获取接口创建实现类依赖注入 setter注入 和 构造器注入原生方式的setter注入原生方式的构造器注…

Android studio开发入门教程详解(复习)

引言 本文为个人总结Android基础知识复习笔记。如有不妥之处&#xff0c;敬请指正。后续将持续更新更多知识点。 文章目录 引言UITextView文本基本用法实际应用常用属性和方法 Button按钮处理点击事件 EditText输入框基本属性高级特性 ImageView图片ImageView的缩放模式 Prog…

实战教程:如何用JavaScript构建一个功能强大的音乐播放器,兼容本地与在线资源

项目地址&#xff1a;Music Player App 作者&#xff1a;Reza Mehdikhanlou 视频地址&#xff1a;youtube 我将向您展示如何使用 javascript 编写音乐播放器。我们创建一个项目&#xff0c;您可以使用 javascript 从本地文件夹或任何 url 播放音频文件。 项目目录 assets 1…

图DFS遍历

DFS遍历图 伪代码 俩函数。 判断图有几个连通分支&#xff1f;就是图的遍历&#xff0c;dfs完了就给他 #include <iostream> #include <cstdlib> #include <bits/stdc.h> #include <vector> using namespace std; const int N102; int n,m,temp1,te…