Windows程序设计-Page79-SYSMETS1

#pragma once
/*-----------------------------------------------
SYSMETS.H -- System metrics display structure
-----------------------------------------------*/
#include <tchar.h>
#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("Screenwidthinpixels"),
	SM_CYSCREEN,TEXT("SM_CYSCREEN"),
	TEXT("Screenheightinpixels"),
	SM_CXVSCROLL,TEXT("SM_CXVSCROLL"),
	TEXT("Verticalscrollwidth"),
	SM_CYHSCROLL,TEXT("SM_CYHSCROLL"),
	TEXT("Horizontalscrollheight"),
	SM_CYCAPTION,TEXT("SM_CYCAPTION"),
	TEXT("Captionbarheight"),
	SM_CXBORDER,TEXT("SM_CXBORDER"),
	TEXT("Windowborderwidth"),
	SM_CYBORDER,TEXT("SM_CYBORDER"),
	TEXT("Windowborderheight"),
	SM_CXFIXEDFRAME,TEXT("SM_CXFIXEDFRAME"),
	TEXT("Dialogwindowframewidth"),
	SM_CYFIXEDFRAME,TEXT("SM_CYFIXEDFRAME"),
	TEXT("Dialogwindowframeheight"),
	SM_CYVTHUMB,TEXT("SM_CYVTHUMB"),
	TEXT("Verticalscrollthumbheight"),
	SM_CXHTHUMB,TEXT("SM_CXHTHUMB"),
	TEXT("Horizontalscrollthumbwidth"),
	SM_CXICON,TEXT("SM_CXICON"),
	TEXT("Iconwidth"),
	SM_CYICON,TEXT("SM_CYICON"),
	TEXT("Iconheight"),
	SM_CXCURSOR,TEXT("SM_CXCURSOR"),
	TEXT("Cursorwidth"),
	SM_CYCURSOR,TEXT("SM_CYCURSOR"),
	TEXT("Cursorheight"),
	SM_CYMENU,TEXT("SM_CYMENU"),
	TEXT("Menubarheight"),
	SM_CXFULLSCREEN,TEXT("SM_CXFULLSCREEN"),
	TEXT("Fullscreenclientareawidth"),
	SM_CYFULLSCREEN,TEXT("SM_CYFULLSCREEN"),
	TEXT("Fullscreenclientareaheight"),
	SM_CYKANJIWINDOW,TEXT("SM_CYKANJIWINDOW"),
	TEXT("Kanjiwindowheight"),
	SM_MOUSEPRESENT,TEXT("SM_MOUSEPRESENT"),
	TEXT("Mousepresentflag"),
	SM_CYVSCROLL,TEXT("SM_CYVSCROLL"),
	TEXT("Verticalscrollarrowheight"),
	SM_CXHSCROLL,TEXT("SM_CXHSCROLL"),
	TEXT("Horizontalscrollarrowwidth"),
	SM_DEBUG,TEXT("SM_DEBUG"),
	TEXT("Debugversionflag"),
	SM_SWAPBUTTON,TEXT("SM_SWAPBUTTON"),
	TEXT("Mousebuttonsswappedflag"),
	SM_CXMIN,TEXT("SM_CXMIN"),
	TEXT("Minimumwindowwidth"),
	SM_CYMIN,TEXT("SM_CYMIN"),
	TEXT("Minimumwindowheight"),
	SM_CXSIZE,TEXT("SM_CXSIZE"),
	TEXT("Min/Max/Closebuttonwidth"),
	SM_CYSIZE,TEXT("SM_CYSIZE"),
	TEXT("Min/Max/Closebuttonheight"),
	SM_CXSIZEFRAME,TEXT("SM_CXSIZEFRAME"),
	TEXT("Windowsizingframewidth"),
	SM_CYSIZEFRAME,TEXT("SM_CYSIZEFRAME"),
	TEXT("Windowsizingframeheight"),
	SM_CXMINTRACK,TEXT("SM_CXMINTRACK"),
	TEXT("Minimumwindowtrackingwidth"),
	SM_CYMINTRACK,TEXT("SM_CYMINTRACK"),
	TEXT("Minimumwindowtrackingheight"),
	SM_CXDOUBLECLK,TEXT("SM_CXDOUBLECLK"),
	TEXT("Doubleclickxtolerance"),
	SM_CYDOUBLECLK,TEXT("SM_CYDOUBLECLK"),
	TEXT("Doubleclickytolerance"),
	SM_CXICONSPACING,TEXT("SM_CXICONSPACING"),
	TEXT("Horizontaliconspacing"),
	SM_CYICONSPACING,TEXT("SM_CYICONSPACING"),
	TEXT("Verticaliconspacing"),
	SM_MENUDROPALIGNMENT,TEXT("SM_MENUDROPALIGNMENT"),
	TEXT("Leftorrightmenudrop"),
	SM_PENWINDOWS,TEXT("SM_PENWINDOWS"),
	TEXT("Penextensionsinstalled"),
	SM_DBCSENABLED,TEXT("SM_DBCSENABLED"),
	TEXT("Double-ByteCharSetenabled"),
	SM_CMOUSEBUTTONS,TEXT("SM_CMOUSEBUTTONS"),
	TEXT("Numberofmousebuttons"),
	SM_SECURE,TEXT("SM_SECURE"),
	TEXT("Securitypresentflag"),
	SM_CXEDGE,TEXT("SM_CXEDGE"),
	TEXT("3-Dborderwidth"),
	SM_CYEDGE,TEXT("SM_CYEDGE"),
	TEXT("3-Dborderheight"),
	SM_CXMINSPACING,TEXT("SM_CXMINSPACING"),
	TEXT("Minimizedwindowspacingwidth"),
	SM_CYMINSPACING,TEXT("SM_CYMINSPACING"),
	TEXT("Minimizedwindowspacingheight"),
	SM_CXSMICON,TEXT("SM_CXSMICON"),
	TEXT("Smalliconwidth"),
	SM_CYSMICON,TEXT("SM_CYSMICON"),
	TEXT("Smalliconheight"),
	SM_CYSMCAPTION,TEXT("SM_CYSMCAPTION"),
	TEXT("Smallcaptionheight"),
	SM_CXSMSIZE,TEXT("SM_CXSMSIZE"),
	TEXT("Smallcaptionbuttonwidth"),
	SM_CYSMSIZE,TEXT("SM_CYSMSIZE"),
	TEXT("Smallcaptionbuttonheight"),
	SM_CXMENUSIZE,TEXT("SM_CXMENUSIZE"),
	TEXT("Menubarbuttonwidth"),
	SM_CYMENUSIZE,TEXT("SM_CYMENUSIZE"),
	TEXT("Menubarbuttonheight"),
	SM_ARRANGE,TEXT("SM_ARRANGE"),
	TEXT("Howminimizedwindowsarranged"),
	SM_CXMINIMIZED,TEXT("SM_CXMINIMIZED"),
	TEXT("Minimizedwindowwidth"),
	SM_CYMINIMIZED,TEXT("SM_CYMINIMIZED"),
	TEXT("Minimizedwindowheight"),
	SM_CXMAXTRACK,TEXT("SM_CXMAXTRACK"),
	TEXT("Maximumdraggablewidth"),
	SM_CYMAXTRACK,TEXT("SM_CYMAXTRACK"),
	TEXT("Maximumdraggableheight"),
	SM_CXMAXIMIZED,TEXT("SM_CXMAXIMIZED"),
	TEXT("Widthofmaximizedwindow"),
	SM_CYMAXIMIZED,TEXT("SM_CYMAXIMIZED"),
	TEXT("Heightofmaximizedwindow"),
	SM_NETWORK,TEXT("SM_NETWORK"),
	TEXT("Networkpresentflag"),
	SM_CLEANBOOT,TEXT("SM_CLEANBOOT"),
	TEXT("Howsystemwasbooted"),
	SM_CXDRAG,TEXT("SM_CXDRAG"),
	TEXT("Avoiddragxtolerance"),
	SM_CYDRAG,TEXT("SM_CYDRAG"),
	TEXT("Avoiddragytolerance"),
	SM_SHOWSOUNDS,TEXT("SM_SHOWSOUNDS"),
	TEXT("Presentsoundsvisually"),
	SM_CXMENUCHECK,TEXT("SM_CXMENUCHECK"),
	TEXT("Menucheck-markwidth"),
	SM_CYMENUCHECK,TEXT("SM_CYMENUCHECK"),
	TEXT("Menucheck-markheight"),
	SM_SLOWMACHINE,TEXT("SM_SLOWMACHINE"),
	TEXT("Slowprocessorflag"),
	SM_MIDEASTENABLED,TEXT("SM_MIDEASTENABLED"),
	TEXT("HebrewandArabicenabledflag"),
	SM_MOUSEWHEELPRESENT,TEXT("SM_MOUSEWHEELPRESENT"),
	TEXT("Mousewheelpresentflag"),
	SM_XVIRTUALSCREEN,TEXT("SM_XVIRTUALSCREEN"),
	TEXT("Virtualscreenxorigin"),
	SM_YVIRTUALSCREEN,TEXT("SM_YVIRTUALSCREEN"),
	TEXT("Virtualscreenyorigin"),
	SM_CXVIRTUALSCREEN,TEXT("SM_CXVIRTUALSCREEN"),
	TEXT("Virtualscreenwidth"),
	SM_CYVIRTUALSCREEN,TEXT("SM_CYVIRTUALSCREEN"),
	TEXT("Virtualscreenheight"),
	SM_CMONITORS,TEXT("SM_CMONITORS"),
	TEXT("Numberofmonitors"),
	SM_SAMEDISPLAYFORMAT,TEXT("SM_SAMEDISPLAYFORMAT"),
	TEXT("Samecolorformatflag")
};

#include <windows.h>
#include "sysmets.h"


typedef WNDPROC WMPROC;
typedef struct{
	UINT msg;
	WMPROC wmProc;
}MsgWithProc;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT __stdcall WMcreate(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT __stdcall WMpaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
LRESULT __stdcall WMdestory(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

static int cxChar, cxCaps, cyChar;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
	PSTR szCmdLine, int iCmdShow){
	static TCHAR szAppName[] = TEXT("SysMets1");
	HWND hwnd;
	MSG msg;
	WNDCLASS wndclass;

	wndclass.style = CS_HREDRAW | CS_VREDRAW;
	wndclass.lpfnWndProc = WndProc;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	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(NULL, TEXT("This program requires Windows NT!"),
			szAppName, MB_ICONERROR);
		return 0;
	}

	hwnd = CreateWindow(szAppName, TEXT("Get System Metrics No. 1"),
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT,
		NULL, NULL, hInstance, NULL);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	while(GetMessage(&msg, NULL, 0, 0)){
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){

	MsgWithProc msgWithProc[] = {
		{WM_CREATE,WMcreate},
		{WM_PAINT,WMpaint},
		{WM_DESTROY,WMdestory}
	};

	for(MsgWithProc mwp : msgWithProc){
		if(mwp.msg == message){
			return mwp.wmProc(hwnd, message, wParam, lParam);
		}
	}
	return DefWindowProc(hwnd, message, wParam, lParam);
}

LRESULT __stdcall WMcreate(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
	HDC hdc;
	TEXTMETRIC tm;

	hdc = GetDC(hwnd);

	GetTextMetrics(hdc, &tm);
	cxChar = tm.tmAveCharWidth;
	cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
	cyChar = tm.tmHeight + tm.tmExternalLeading;

	ReleaseDC(hwnd, hdc);
	return 0;
}
LRESULT __stdcall WMpaint(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
	int i;
	HDC hdc;
	PAINTSTRUCT ps;
	TCHAR szBuffer[10];

	hdc = BeginPaint(hwnd, &ps);

	for(i = 0; i < NUMLINES; i++){
		TextOut(hdc, 0, cyChar * i,
			sysmetrics[i].szLabel,
			lstrlen(sysmetrics[i].szLabel));

		TextOut(hdc, 22 * cxCaps, cyChar * i,
			sysmetrics[i].szDesc,
			lstrlen(sysmetrics[i].szDesc));

		SetTextAlign(hdc, TA_RIGHT | TA_TOP);

		TextOut(hdc, 22 * cxCaps + 40 * cxChar, cyChar * i, szBuffer,
			wsprintf(szBuffer, TEXT("%5d"),
				GetSystemMetrics(sysmetrics[i].iIndex)));

		SetTextAlign(hdc, TA_LEFT | TA_TOP);
	}
	EndPaint(hwnd, &ps);
	return 0;
}
LRESULT __stdcall WMdestory(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){
	PostQuitMessage(0);
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值