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图形构件大小信息的更多相关文章

  1. Selenium2学习-022-WebUI自动化实战实例-020-JavaScript 在 Selenium 自动化中的应用实例之二(获取浏览器显示区域大小)

    前几篇文章中简略概述了,如何获取.设置浏览器窗口大小,那么我们该如何获取浏览器显示区域的大小呢?此文讲对此进行简略概述,敬请各位小主参阅.若有不足之处,敬请各位大神指正,不胜感激! 获取浏览器显示区域 ...

  2. Python使用WMI模块获取Windows系统的硬件信息,并使用pyinstaller库编译打包成exe的可执行文件

    由于公司现阶段大多数应用软件都是基于Windows系统开发和部署,很多软件安装部署都是在windows server 2012.windows server 2008之类的服务器上,部门同事每次测试一 ...

  3. 获取windows可执行文件的version信息(版本号)

    之前在msdn上Version Information看到文件版本信息的介绍,看着整体比较复杂,就一直没做.现在需要获取ocx文件的版本号,所以查找了下相关资料,比较有用的就是VS_FIXEDFILE ...

  4. sigar获取Windows系统的硬件信息进行JAVA后台系统资源监控

    windows下,将sigar-amd64-winnt.dll复制到jdk的bin目录下或者拷贝到WEB-INF/lib下 linux下,将libsigar-amd64-linux.so拷贝到jdk的 ...

  5. python使用wmi模块获取windows下的系统信息监控系统-乾颐堂

    Python用WMI模块获取Windows系统的硬件信息:硬盘分区.使用情况,内存大小,CPU型号,当前运行的进程,自启动程序及位置,系统的版本等信息. 本文实例讲述了python使用wmi模块获取w ...

  6. GDI+入门——带你走进Windows图形的世界

    一.GDI+基础 1.GDI+简单介绍 GDI+是微软的新一代二维图形系统,它全然面向对象,要在Windows窗口中显示字体或绘制图形必需要使用GDI+.GDI+提供了多种画笔.画刷.图像等图形对象, ...

  7. C#/AutoCAD 2018/ObjectArx/二次开发添加图形对象步骤和添加直线的例子(三)

    1.创建一个图形对象的步骤如下(1)得到创建对象的图形数据库:(2)在内存中创建实体类的一个对象:(3)定义一个指向当前数据库的事务处理:(4)打开图形数据库的块表:(5)打开一个存储实体的块表记录( ...

  8. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  9. C++通用WMI接口实现获取Windows操作系统内核版本号

    作为一名Windows开发者,能熟练掌握WMI技术,在开发Windows应用程序的时候往往能够事半功倍.今天来给大家分享一个使用WMI来获取Windows操作系统内核版本号的例子. 首先我们打开WMI ...

随机推荐

  1. jquery mouseout事件错误(bug)

    移到子元素上时(例如,处在div中的图像),触发移出事件 (mouseout事件的一个常见错误). 解决办法是使用hover事件 在使用hover事件前,我抓耳挠腮的以为是margin或padding ...

  2. 网络-数据包在路由转发过程中MAC地址和IP地址,变与不变

    关于MAC地址和IP地址在传输过程中变与不变的问题: 结论:MAC地址在同一个广播域传输过程中是不变的,在跨越广播域的时候会发生改变的:而IP地址在传输过程中是不会改变的(除NAT的时候),总结为 路 ...

  3. C++重载,重写,重定义

    1.重载:重载是在一个类中,函数名一样,参数类型或参数个数不同的一系列函数需要注意的是,与返回类型无关. class Test { public: void show(); void show(int ...

  4. PHP获得两个绝对路径的相对路径

    周末在家看面试题,没事儿写了个. 题目: 写一个函数,算出两个文件的相对路径 如 $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php';计算出 $b 相对于 $ ...

  5. EDIUS和VEGAS哪个更好用

    随着数字化电视系统发展的步伐日趋加快,计算机技术逐步渗透到广播电视的各个领域,非线性编辑系统在广播电视行业内占据越来越重要的地位,而且正向多样化 发展.因此,非线性编辑技术的操作应用对于编辑人员有着非 ...

  6. mvc:view-controller

    This tag is a shorcut for defining a ParameterizableViewController that immediately forwards to a vi ...

  7. Java 实现学生信息管理系统

    编写一个简单的学生管理信息系统. 在oracle中设计一张学生表,以学号作为关键字. 其他学生信息有:姓名.手机号. 在进入系统时,显示如下菜单: ************************** ...

  8. wikioi 1475 m进制转十进制

    /*===================================== 1475 m进制转十进制 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转 ...

  9. css之opacity

    设置div元素的不透明级别 语法: value :从0.0(完全透明)到1.0(完全不透明) inherit:应该从父元素继承opacity属性 z-index 属性设置元素的堆叠顺序,仅能在定位元素 ...

  10. C#判断文件及文件夹是否存在并创建(C#判断文件夹存在)

    protected void Button1_Click(object sender, EventArgs e) { if (Directory.Exists(Server.MapPath(" ...