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. Cycles_per_instruction

    https://en.wikipedia.org/wiki/Cycles_per_instruction

  2. JAVA Lambda Expressions streams

    http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html https:// ...

  3. socket、webService、RMI ?

    网络七层协议为:物理层.数据链路层.网络层.传输层.会话层.表示层.应用层 webService > RMI > socket RMI比socket更高一点 socket 只是 java在 ...

  4. Sklearn库例子3:分类——岭回归分类(Ridge Regression )例子

    为了解决数据的特征比样本点还多的情况,统计学家引入了岭回归. 岭回归通过施加一个惩罚系数的大小解决了一些普通最小二乘的问题.回归系数最大限度地减少了一个惩罚的误差平方和. 这里是一个复杂的参数,用来控 ...

  5. Linux ext2文件系统

    Linux最传统的磁盘文件系统(filesystem)使用的是ext2 1.ext2文件系统结构ext2文件系统划分为多个块组,每个块组拥有独立的inode/block,一个文件系统只有一个Super ...

  6. easyUI之window

    window组件是一个可拖动.浮动的面板,用于显示信息.内容可用 href或ajax获取. window是一个显示窗口,同时也可以显示layout的功能(也就是创建复合的组合窗口),如 <div ...

  7. HtmlEncode、HtmlDecode、UrlEncode、UrlDecode

    HtmlEncode: 将 Html 源文件中不允许出现的字符进行编码.例如:"<".">"."&" 等. HtmlDe ...

  8. spring基础部分——注解

    注解: @Entity @Table @Column @Enumerated @Autowired @Controller @RequestMapping @RequestParam

  9. R(五): R常用函数

    工作笔记记录,会持续更新.... 目录: apply tapply lapply sapply merge substr.substring.strsplit.unlist.paste.paste0. ...

  10. javascript 中根据sort 方法随机数组 (Math.random)

    var arr = [1,2,3,4,5,6,7,8,9,10]; function Arandom(a,b){ return (Math.random() > 0.5) ? 1 : -1;; ...