[C语言](二)01 获取Windows图形构件大小信息
SYSMETS.c
#include <windows.h> #include "SYSMETS.H"//自定义的单元,所以用"",不是用<> //消息循环处理函数,Windows回调函数
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); //Windows程序的入口函数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int ICmdShow) {
static TCHAR szAppName[] = TEXT("windowOfC"); HWND hwnd;//窗体句柄变量
MSG msg;//消息变量
WNDCLASS wndclass;//窗口类变量 //配置窗口类结构
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;//设置处理消息循环的函数
wndclass.cbClsExtra = ;
wndclass.cbWndExtra = ;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)COLOR_WINDOW;
wndclass.lpszMenuName = NULL;
wndclass.lpszClassName = szAppName; //注册窗口类
if (!RegisterClass(&wndclass)) {
MessageBox(NULL, TEXT("注册窗口类失败!"), szAppName, MB_ICONERROR);
return ;
} //创建窗口
hwnd = CreateWindow(szAppName,
TEXT("获取Windows图形构件大小信息"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL); //显示窗口
ShowWindow(hwnd, ICmdShow);
//更新窗口内容
UpdateWindow(hwnd); //得到Windows消息
while (GetMessage(&msg, NULL, , )) {
TranslateMessage(&msg);
DispatchMessage(&msg);
} return msg.wParam;
}; //消息处理方法,windows操作系统的回调函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
HDC hdc;//图形设备描述表变量
PAINTSTRUCT ps; static int cxChar, cxCaps, cyChar;//文字大小的变量
int i;//循环显示构件信息的变量
TCHAR szBuffer[];//输出构建大小的变量
TEXTMETRIC tm;//字体信息结构 int iSysments;//系统返回的Windows构件大小 switch (message) {
case WM_CREATE: //得到设备描述表
hdc = GetDC(hwnd); //获取文字大小信息
GetTextMetrics(hdc, &tm); cxChar = tm.tmAveCharWidth;
cxCaps = (tm.tmPitchAndFamily & ? : )*cxChar / ;
cyChar = tm.tmHeight + tm.tmExternalLeading; //释放设备描述表
ReleaseDC(hwnd, hdc); return ;
case WM_PAINT: //得到设备描述表
hdc = BeginPaint(hwnd, &ps); for (i = ; i < NUMLINES; i++) {
//输出ID
TextOut(hdc, , cyChar*i, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel)); //输出原来的英文描述信息
TextOut(hdc, * cxCaps, cyChar*i, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc));
//设置文字对齐方式
SetTextAlign(hdc, TA_RIGHT | TA_TOP); //得到当前Windows构件大小
iSysments = GetSystemMetrics(sysmetrics[i].iIndex);
TextOut(hdc, * cxCaps + * cxChar, cyChar*i, szBuffer, wsprintf(szBuffer, TEXT("%5d"), iSysments));
//设置文字对齐方式
SetTextAlign(hdc, TA_LEFT | TA_TOP); //输出原来的英文描述信息
TextOut(hdc, * cxCaps + * cxChar, cyChar*i, sysmetrics[i].szCnDesc, lstrlen(sysmetrics[i].szCnDesc));
//设置文字对齐方式
SetTextAlign(hdc, TA_LEFT | TA_TOP);
} //释放设备描述表
EndPaint(hwnd, &ps); return ;
case WM_DESTROY:
PostQuitMessage(); return ;
} return DefWindowProc(hwnd, message, wParam, lParam);
};
SYSMETS.h
#pragma once //保证相同内容只编译一次 #include <windows.h> //宏定义(NUMLINES在预编译时候,直接被后面内容替换掉)
#define NUMLINES ((int)(sizeof sysmetrics/ sizeof sysmetrics[0])) struct
{
int iIndex;
TCHAR * szLabel;
TCHAR * szDesc;
TCHAR * szCnDesc;//这是我增加的内容,显示中文描述信息,对上面英文描述信息的翻译文字
}
/*
1,这是一个结构数组,数组中的每个结构描述当前获取的windows构件
2,数组中的结构元素被我修改了一下,每个结构元素外围都增加了"{}",这样程序可读性应该是更好了,原代码没有"{}"
*/
sysmetrics[] = {
{
SM_CXSCREEN,TEXT("SM_CXSCREEN"),TEXT("Screen width in pixels"),TEXT("屏幕宽度(单位:像素)")
},
{
SM_CYSCREEN,TEXT("SM_CYSCREEN"),TEXT("Screen height in pixels"),TEXT("屏幕高度(单位:像素)")
}
//还有很多,待续
};
[C语言](二)01 获取Windows图形构件大小信息的更多相关文章
- Selenium2学习-022-WebUI自动化实战实例-020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小)
前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域 ...
- Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件
由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...
- 获取windows可执行文件的version信息(版本号)
之前在msdn上Version Information看到文件版本信息的介绍,看着整体比较复杂,就一直没做.现在需要获取ocx文件的版本号,所以查找了下相关资料,比较有用的就是VS_FIXEDFILE ...
- sigar获取Windows系统的硬件信息进行JAVA后台系统资源监控
windows下,将sigar-amd64-winnt.dll复制到jdk的bin目录下或者拷贝到WEB-INF/lib下 linux下,将libsigar-amd64-linux.so拷贝到jdk的 ...
- python使用wmi模块获取windows下的系统信息监控系统-乾颐堂
Python用WMI模块获取Windows系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 本文实例讲述了python使用wmi模块获取w ...
- GDI+入门——带你走进Windows图形的世界
一.GDI+基础 1.GDI+简单介绍 GDI+是微软的新一代二维图形系统,它全然面向对象,要在Windows窗口中显示字体或绘制图形必需要使用GDI+.GDI+提供了多种画笔.画刷.图像等图形对象, ...
- C#/AutoCAD 2018/ObjectArx/二次开发添加图形对象步骤和添加直线的例子(三)
1.创建一个图形对象的步骤如下(1)得到创建对象的图形数据库:(2)在内存中创建实体类的一个对象:(3)定义一个指向当前数据库的事务处理:(4)打开图形数据库的块表:(5)打开一个存储实体的块表记录( ...
- java微信开发API解析(二)-获取消息和回复消息
java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...
- C++通用WMI接口实现获取Windows操作系统内核版本号
作为一名Windows开发者,能熟练掌握WMI技术,在开发Windows应用程序的时候往往能够事半功倍.今天来给大家分享一个使用WMI来获取Windows操作系统内核版本号的例子. 首先我们打开WMI ...
随机推荐
- jsonp 跨域原理详解
JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略).这一策略对于Java ...
- JS页面间传值
一:JavaScript静态页面值传递之URL篇 能过URL进行传值.把要传递的信息接在URL上. 例子: 参数传出页面Post.htm—> <input type="tex ...
- SVG ViewBox
如果svg图形太大或者太小,就可以用ViewBox属性来调整在页面中的显示范围.大小. "像素不能直接换算成英寸.厘米,要在 dpi ( dot per inch 分辨率,概念较多,鼠标 d ...
- ECS 安装redis 及安装PHPredis的扩展
安装redis 1.一条命令就行了:apt-get install redis-server 2.wget http://download.redis.io/releases/redis-3.0.7. ...
- css之opacity
设置div元素的不透明级别 语法: value :从0.0(完全透明)到1.0(完全不透明) inherit:应该从父元素继承opacity属性 z-index 属性设置元素的堆叠顺序,仅能在定位元素 ...
- SQL常见的可优化点
# 索引相关 # ################################################### 1. 查询(或更新,删除,可以转换为查询)没有用到索引 这是最基础的步骤,需要 ...
- You need to use a Theme.AppCompat theme (or descendant) with this activity解决方法
报错如下:java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test2/com.exampl ...
- LINUX常用配置及命令
一. Fedora系统配置 1. [设置网卡IP] 步骤如下: 1) 用root用户登陆,打开/etc/sysconfig/network-scripts/ifcfg-eth0文 ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
- 【Andorid开发框架学习】之Mina开发之客户端开发
昨天我们讲到了Mina的基本知识点.如果还有不懂得同学可以看一下我昨天的博客.http://www.cnblogs.com/getherBlog/p/3934927.html今天我着重来讲一下基于Mi ...