第六章 键盘(SYSMETS4)
- //SYSMETS.H -- System metrics display structure
- #include <Windows.h>
- #define NUMLINES ((int) (sizeof(sysmetrics) / sizeof(sysmetrics[0])))
- struct
- {
- int iIndex;
- TCHAR *szLabel;
- TCHAR *szDesc;
- }
- sysmetrics[] =
- {
- SM_CXSCREEN, TEXT("SM_CXSCREEN"), TEXT("Screen width in pixels"),
- SM_CYSCREEN, TEXT("SM_CYSCREEN"), TEXT("Screen height in pixels"),
- SM_CXVSCROLL, TEXT("SM_CXVSCROLL"), TEXT("Vertical scroll width"),
- SM_CYHSCROLL, TEXT("SM_CYHSCROLL"), TEXT("Horizontal scroll height"),
- SM_CYCAPTION, TEXT("SM_CYCAPTION"), TEXT("Caption bar height"),
- SM_CXBORDER, TEXT("SM_CXBORDER"), TEXT("Window border width"),
- SM_CYBORDER, TEXT("SM_CYBORDER"), TEXT("Window border height"),
- SM_CXFIXEDFRAME, TEXT("SM_CXFIXEDFRAME"), TEXT("Dialog window frame width"),
- SM_CYFIXEDFRAME, TEXT("SM_CYFIXEDFRAME"), TEXT("Dialog window frame height"),
- SM_CYVTHUMB, TEXT("SM_CYVTHUMB"), TEXT("Vertical scroll thumb height"),
- SM_CXHTHUMB, TEXT("SM_CXHTHUMB"), TEXT("Horizontal scroll thumb width"),
- SM_CXICON, TEXT("SM_CXICON"), TEXT("Icon width"),
- SM_CYICON, TEXT("SM_CYICON"), TEXT("Icon height"),
- SM_CXCURSOR, TEXT("SM_CXCURSOR"), TEXT("Cursor width"),
- SM_CYCURSOR, TEXT("SM_CYCURSOR"), TEXT("Cursor height"),
- SM_CYMENU, TEXT("SM_CYMENU"), TEXT("Menu bar height"),
- SM_CXFULLSCREEN, TEXT("SM_CXFULLSCREEN"), TEXT("Full screen client area width"),
- SM_CYFULLSCREEN, TEXT("SM_CYFULLSCREEN"), TEXT("Full screen client area height"),
- SM_CYKANJIWINDOW, TEXT("SM_CYKANJIWINDOW"), TEXT("Kanji window height"),
- SM_MOUSEPRESENT, TEXT("SM_MOUSEPRESENT"), TEXT("Mouse present flag"),
- SM_CYVSCROLL, TEXT("SM_CYVSCROLL"), TEXT("Vertical scroll arrow height"),
- SM_CXHSCROLL, TEXT("SM_CXHSCROLL"), TEXT("Horizontal scroll arrow width"),
- SM_DEBUG, TEXT("SM_DEBUG"), TEXT("Debug version flag"),
- SM_SWAPBUTTON, TEXT("SM_SWAPBUTTON"), TEXT("Mouse buttons swapped flag"),
- SM_CXMIN, TEXT("SM_CXMIN"), TEXT("Minimum window width"),
- SM_CYMIN, TEXT("SM_CYMIN"), TEXT("Minimum window height"),
- SM_CXSIZE, TEXT("SM_CXSIZE"), TEXT("Min/Max/Close button width"),
- SM_CYSIZE, TEXT("SM_CYSIZE"), TEXT("Min/Max/Close button height"),
- SM_CXSIZEFRAME, TEXT("SM_CXSIZEFRAME"), TEXT("Window sizing frame width"),
- SM_CYSIZEFRAME, TEXT("SM_CYSIZEFRAME"), TEXT("Window sizing frame height"),
- SM_CXMINTRACK, TEXT("SM_CXMINTRACK"), TEXT("Minimum window tracking width"),
- SM_CYMINTRACK, TEXT("SM_CYMINTRACK"), TEXT("Minimum window tracking height"),
- SM_CXDOUBLECLK, TEXT("SM_CXDOUBLECLK"), TEXT("Double click x tolerance"),
- SM_CYDOUBLECLK, TEXT("SM_CYDOUBLECLK"), TEXT("Double click y tolerance"),
- SM_CXICONSPACING, TEXT("SM_CXICONSPACING"), TEXT("Horizontal icon spacing"),
- SM_CYICONSPACING, TEXT("SM_CYICONSPACING"), TEXT("Vertical icon spacing"),
- SM_MENUDROPALIGNMENT, TEXT("SM_MENUDROPALIGMENT"), TEXT("Left or right menu drop"),
- SM_PENWINDOWS, TEXT("SM_PENWINDOWS"), TEXT("Pen extensions installed"),
- SM_DBCSENABLED, TEXT("SM-DBCSENABLED"), TEXT("Double-Byte Char Set enable"),
- SM_CMOUSEBUTTONS, TEXT("SM_CMOUSEBUTTONS"), TEXT("Number of mouse buttons"),
- SM_SECURE, TEXT("SM_SECURE"), TEXT("Security present flag"),
- SM_CXEDGE, TEXT("SM_CXEDGE"), TEXT("3-D border width"),
- SM_CYEDGE, TEXT("SM_CYEDGE"), TEXT("3-D border height"),
- SM_CXMINSPACING, TEXT("SM_CXMINSPACING"), TEXT("Minimized window spacing width"),
- SM_CYMINSPACING, TEXT("SM-CYMINSPACING"), TEXT("Minimized window spacing height"),
- SM_CXSMICON, TEXT("SM_CXSMICON"), TEXT("Small icon width"),
- SM_CYSMICON, TEXT("SM_CYSMICON"), TEXT("Small icon height"),
- SM_CYSMCAPTION, TEXT("SM_CYSMCAPTION"), TEXT("Small caption height"),
- SM_CXSMSIZE, TEXT("SM_CXSMSIZE"), TEXT("Small caption button width"),
- SM_CYSMSIZE, TEXT("SM_CYSMSIZE"), TEXT("Small caption button height"),
- SM_CXMENUSIZE, TEXT("SM_CXMENUSIZE"), TEXT("Menu bar button width"),
- SM_CYMENUSIZE, TEXT("SM_CYMENUSIZE"), TEXT("Menu bar button height"),
- SM_ARRANGE, TEXT("SM_ARRANGE"), TEXT("How minimized windows arranged"),
- SM_CXMINIMIZED, TEXT("SM_CXMINIMIZED"), TEXT("Minimized window width"),
- SM_CYMINIMIZED, TEXT("SM_CYMINIMIZED"), TEXT("Minimized window height"),
- SM_CXMAXTRACK, TEXT("SM_CXMAXTRACK"), TEXT("Maximum draggable width"),
- SM_CYMAXTRACK, TEXT("SM_CYMAXTRACK"), TEXT("Maximum draggable height"),
- SM_CXMAXIMIZED, TEXT("SM_CXMAXIMIZED"), TEXT("Width of maximized window"),
- SM_CYMAXIMIZED, TEXT("SM_CYMAXIMIZED"), TEXT("Height of maximized windwo"),
- SM_NETWORK, TEXT("SM_NETWORK"), TEXT("Network present flag"),
- SM_CLEANBOOT, TEXT("SM_CLEANBOOT"), TEXT("How system was booted"),
- SM_CXDRAG, TEXT("SM_CXDRAG"), TEXT("Avoid drag x tolerance"),
- SM_CYDRAG, TEXT("SM_CYDRAG"), TEXT("Avoid drag x tolerance"),
- SM_SHOWSOUNDS, TEXT("SM_SHOWSOUNDS"), TEXT("Present sounds visually"),
- SM_CXMENUCHECK, TEXT("SM_CXMENUCHECK"), TEXT("Menu check-mark width"),
- SM_CYMENUCHECK, TEXT("SM_CYMENUCHECK"), TEXT("Menu check-mark height"),
- SM_SLOWMACHINE, TEXT("SM_SLOWMACHINE"), TEXT("Slow processor flag"),
- SM_MIDEASTENABLED, TEXT("SM_MIDEASTENABLE"), TEXT("Hebrew and Arabic enabled flag"),
- SM_MOUSEWHEELPRESENT, TEXT("SM_MOUSEWHEELPRESENT"), TEXT("Mouse wheel present flag"),
- SM_XVIRTUALSCREEN, TEXT("SM_XVIRTUALSCREEN"), TEXT("Virtual screen x origin"),
- SM_YVIRTUALSCREEN, TEXT("SM_YVIRTUALSCREEN"), TEXT("Virtual screen y origin"),
- SM_CXVIRTUALSCREEN, TEXT("SM_CXVIRTUALSCREEN"), TEXT("Virtual screen width"),
- SM_CYVIRTUALSCREEN, TEXT("SM_CYVIRTUALSCREEN"), TEXT("Virtual screen height"),
- SM_CMONITORS, TEXT("SM_CMONITORS"), TEXT("Number of monitors"),
- SM_SAMEDISPLAYFORMAT, TEXT("SM_SAMEDISPLAYFORMAT"), TEXT("Same color format flag")
- };
SYSMETS.H
- /*-----------------------------------------------
- SYSMETS4.C -- System Metrics Display Program No.4
- (c) Charles Petzold, 1998
- -----------------------------------------------*/
- #include <Windows.h>
- #include "SYSMETS.h"
- LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
- int WINAPI WinMain( __in HINSTANCE hInstance
- , __in_opt HINSTANCE hPrevInstance
- , __in LPSTR lpCmdLine
- , __in int nShowCmd )
- {
- static TCHAR szAppName[] = TEXT("SysMets4");
- 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)GetStockObject(WHITE_BRUSH);
- wndclass.lpszMenuName = NULL;
- wndclass.lpszClassName = szAppName;
- if (!RegisterClass(&wndclass))
- {
- MessageBox(hwnd, TEXT("Program requires Windows NT !")
- , szAppName, MB_ICONERROR);
- return ;
- }
- hwnd = CreateWindow(szAppName, TEXT("Get System Metrics No.4")
- , WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL
- , CW_USEDEFAULT, CW_USEDEFAULT
- , CW_USEDEFAULT, CW_USEDEFAULT
- , NULL, NULL, hInstance, NULL);
- ShowWindow(hwnd, nShowCmd);
- UpdateWindow(hwnd);
- while (GetMessage(&msg, NULL, , ))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- static int cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth;
- HDC hdc;
- int i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd;
- PAINTSTRUCT ps;
- SCROLLINFO si;
- TCHAR szBuffer[];
- TEXTMETRIC tm;
- 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);
- //save the width of the three columns
- iMaxWidth = * cxChar + * cxCaps;
- return ;
- case WM_SIZE:
- cxClient = LOWORD(lParam);
- cyClient = HIWORD(lParam);
- //set vertical scroll bar range and page size
- si.cbSize = sizeof(si);
- si.fMask = SIF_RANGE | SIF_PAGE;
- si.nMin = ;
- si.nMax = NUMLINES - ;
- si.nPage = cyClient / cyChar;
- SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
- //set horizontal scroll bar range and page size
- si.cbSize = sizeof(si);
- si.fMask = SIF_RANGE | SIF_PAGE;
- si.nMin = ;
- si.nMax = + iMaxWidth / cxChar;
- si.nPage = cxClient / cxChar;
- SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
- return ;
- case WM_VSCROLL:
- //get all the vertical scroll bar information
- si.cbSize= sizeof(si);
- si.fMask = SIF_ALL;
- GetScrollInfo(hwnd, SB_VERT, &si);
- //save the position for comparison later on
- iVertPos = si.nPos;
- switch (LOWORD(wParam))
- {
- case SB_TOP:
- si.nPos = si.nMin;
- break;
- case SB_BOTTOM:
- si.nPos = si.nMax;
- break;
- case SB_LINEUP:
- si.nPos -= ;
- break;
- case SB_LINEDOWN:
- si.nPos += ;
- break;
- case SB_PAGEUP:
- si.nPos -= si.nPage;
- break;
- case SB_PAGEDOWN:
- si.nPos += si.nPage;
- break;
- case SB_THUMBTRACK:
- si.nPos = si.nTrackPos;
- break;
- default:
- break;
- }
- //Set the position and then retrieve it. Due to adjustments
- //by windows it might not be the same as the value set.
- si.fMask = SIF_POS;
- SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
- GetScrollInfo(hwnd, SB_VERT, &si);
- //if the position has changed, scroll the window and update it
- if (si.nPos != iVertPos)
- {
- ScrollWindow(hwnd, , cyChar * (iVertPos - si.nPos), NULL, NULL);
- UpdateWindow(hwnd);
- }
- return ;
- case WM_HSCROLL:
- //get all the horizontal scroll bar information
- si.cbSize = sizeof(si);
- si.fMask = SIF_ALL;
- //save the position for comparison later on
- GetScrollInfo(hwnd, SB_HORZ, &si);
- iHorzPos = si.nPos;
- switch (LOWORD(wParam))
- {
- case SB_LINELEFT:
- si.nPos -= ;
- break;
- case SB_LINERIGHT:
- si.nPos += ;
- break;
- case SB_PAGELEFT:
- si.nPos -= si.nPage;
- break;
- case SB_PAGERIGHT:
- si.nPos += si.nPage;
- break;
- case SB_THUMBPOSITION:
- si.nPos = si.nTrackPos;
- break;
- default:
- break;
- }
- //Set the position and then retrieve it. Due to adjustments
- //by window it might not be the same as the value set.
- si.fMask = SIF_POS;
- SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
- GetScrollInfo(hwnd, SB_HORZ, &si);
- //if the position has changed, scroll the window.
- if (si.nPos != iHorzPos)
- {
- ScrollWindow(hwnd, cxChar * (iHorzPos - si.nPos), , NULL, NULL);
- UpdateWindow(hwnd);
- }
- return ;
- case WM_KEYDOWN:
- switch (wParam)
- {
- case VK_HOME:
- SendMessage(hwnd, WM_VSCROLL, SB_TOP, );
- break;
- case VK_END:
- SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, );
- break;
- case VK_PRIOR:
- SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, );
- break;
- case VK_NEXT:
- SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, );
- break;
- case VK_UP:
- SendMessage(hwnd, WM_VSCROLL, SB_LINEUP, );
- break;
- case VK_DOWN:
- SendMessage(hwnd, WM_VSCROLL, SB_LINEDOWN, );
- break;
- case VK_LEFT:
- SendMessage(hwnd, WM_HSCROLL, SB_PAGEUP, );
- break;
- case VK_RIGHT:
- SendMessage(hwnd, WM_HSCROLL, SB_PAGEDOWN, );
- break;
- }
- return ;
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- //get vertical scroll bar position
- si.cbSize = sizeof(si);
- si.fMask = SIF_POS;
- GetScrollInfo(hwnd, SB_VERT, &si);
- iVertPos = si.nPos;
- //get horizontal scroll bar position
- GetScrollInfo(hwnd, SB_HORZ, &si);
- iHorzPos = si.nPos;
- //find paintint limits
- iPaintBeg = max(, iVertPos + ps.rcPaint.top / cyChar);
- iPaintEnd = min(NUMLINES - , iVertPos + ps.rcPaint.bottom / cyChar);
- for (i = iPaintBeg; i <= iPaintEnd; ++i)
- {
- x = cxChar * ( - iHorzPos);
- y = cyChar * (i - iVertPos);
- TextOut(hdc, x, y, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel));
- TextOut(hdc, x + * cxCaps, y, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc));
- SetTextAlign(hdc, TA_RIGHT | TA_TOP);
- TextOut(hdc, x + * cxCaps + * cxChar, y, szBuffer
- , wsprintf(szBuffer, TEXT("%5d"), GetSystemMetrics(sysmetrics[i].iIndex)));
- SetTextAlign(hdc, TA_LEFT | TA_TOP);
- }
- EndPaint(hwnd, &ps);
- return ;
- case WM_DESTROY:
- PostQuitMessage();
- return ;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
SYSMETS4.C
第六章 键盘(SYSMETS4)的更多相关文章
- JavaScript DOM编程艺术-学习笔记(第五章、第六章)
第五章: 1.题外话:首先大声疾呼,"js无罪",有罪的是滥用js的那些人.js的father 布兰登-艾克,当初为了应付工作,10天就赶出了这个js,事后还说人家js是c语言和s ...
- 《Linux命令行与shell脚本编程大全》第十六章 控制脚本
一些控制脚本的方式:向脚本发送信号.修改脚本优先级,在脚本运行时切换到运行模式 16.1 处理信号 linux利用信号与运行在系统中的进程进行通信. 也可以通过对脚本进行编程,使其在收到特定信号时执行 ...
- Java 第六章
第六章 for语法:for(表达式①;表达式②;表达式③){ //④循环操作}表达式含义:表达式1:赋值语句, 它用来给循环变量赋初值 例如:int i = 1;表达式2:循环条件,一个关系表达式, ...
- 第六章、Linux 的文件权限与目录配置
第六章.Linux 的文件权限与目录配置 1. 使用者与群组 2. Linux文件权限概念 2.1 Linux文件属性 2.2 如何改变文件属性与权限: chgrp, chown, chmod 2.3 ...
- C++ Primer Plus学习:第六章
C++入门第六章:分支语句和逻辑运算符 if语句 语法: if (test-condition) statement if else语句 if (test-condition) statement1 ...
- ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Deskto ...
- 精通Web Analytics 2.0 (8) 第六章:使用定性数据解答”为什么“的谜团
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第六章:使用定性数据解答"为什么"的谜团 当我走进一家超市,我不希望员工会认出我或重新为我布置商店. 然而, ...
- 《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章 继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (37) ------ 第六章 继承与建模高级应用之独立关联与外键关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-13 在基类中应用条件 问题 你想从一个已存在的模型中的实体派生一个新的实体, ...
随机推荐
- Ubuntu16.04安装Anaconda (转)
一. Anaconda下载 Anaconda 官方下载链接: https://www.continuum.io/downloads 根据自己的系统选择下载32位还是64位. 二. 进入下载目录 如 ...
- java——IObufferedReader文件输入输出流
package com.jredu.ch02_lianxi; import java.io.BufferedReader;import java.io.BufferedWriter;import ja ...
- Mysql-8 配置主从复制(基于二进制日志)
目录 1. 实验环境 2. 安装MySQL8 3. 配置主从复制 4. 配置复制用户 5. 数据的同步 6. 配置从节点 7. 测试主从复制 1. 实验环境 System IP Host CentOS ...
- AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署
AWS DevOps – 配合Jenkins和CodeDeploy实现代码自动化部署 Amazon ElastiCache 连接至 Redis 节点 通过 AWS Command Line Inter ...
- 强烈推荐:240多个jQuery插件
概述 jQuery 是继 prototype 之后又一个优秀的 Javascript 框架.其宗旨是—写更少的代码,做更多的事情.它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不 ...
- jQuery基础教程
1.使用$()函数 $()函数其实是创建了一个jQuery对象. 这个函数接受CSS选择符作为参数,充当一个工厂, 返回包含页面中对应元素的jQuery对象. 所有能在样式表中使用的选择符都可以传给这 ...
- 【Mybatis】1、Mybatis拦截器学习资料汇总
MyBatis拦截器原理探究 http://www.cnblogs.com/fangjian0423/p/mybatis-interceptor.html [myBatis]Mybatis中的拦截器 ...
- Linux下编译、链接和装载
——<程序员的自我修养>读书笔记 编译过程 在Linux下使用GCC将源码编译成可执行文件的过程可以分解为4个步骤,分别是预处理(Prepressing).编译(Compilation). ...
- jQuery点击页面其他部分隐藏下拉菜单
一.开发小要点 web页面中,我们一般不用select.option来实现下拉菜单效果,因为下拉框的样式丑且难以美化,所以我们选择控制ul显示隐藏来实现同样且高大上的效果,但是不能像下拉框那样点击页面 ...
- 【pygame游戏编程】第一篇-----创建一个窗口
下面我们一起来创建一个背景为蓝色的窗口作为游戏编程的开始: import sys import pygame def creat_screen(): #初始化pygame pygame.init() ...