SYSMETS4.docx

上传人:b****8 文档编号:10531697 上传时间:2023-02-21 格式:DOCX 页数:11 大小:15.89KB
下载 相关 举报
SYSMETS4.docx_第1页
第1页 / 共11页
SYSMETS4.docx_第2页
第2页 / 共11页
SYSMETS4.docx_第3页
第3页 / 共11页
SYSMETS4.docx_第4页
第4页 / 共11页
SYSMETS4.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

SYSMETS4.docx

《SYSMETS4.docx》由会员分享,可在线阅读,更多相关《SYSMETS4.docx(11页珍藏版)》请在冰豆网上搜索。

SYSMETS4.docx

SYSMETS4

/*----------------------------------------------------

SYSMETS4.C--SystemMetricsDisplayProgramNo.4

(c)CharlesPetzold,1998

----------------------------------------------------*/

#defineWINVER0x0500

#include

#include"sysmets.h"

LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,

PSTRszCmdLine,intiCmdShow)

{

staticTCHARszAppName[]=TEXT("SysMets4");

HWNDhwnd;

MSGmsg;

WNDCLASSwndclass;

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("ProgramrequiresWindowsNT!

"),

szAppName,MB_ICONERROR);

return0;

}

hwnd=CreateWindow(szAppName,TEXT("GetSystemMetricsNo.4"),

WS_OVERLAPPEDWINDOW|WS_VSCROLL|WS_HSCROLL,

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);

}

returnmsg.wParam;

}

LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)

{

staticintcxChar,cxCaps,cyChar,cxClient,cyClient,iMaxWidth;

HDChdc;

inti,x,y,iVertPos,iHorzPos,iPaintBeg,iPaintEnd;

PAINTSTRUCTps;

SCROLLINFOsi;

TCHARszBuffer[10];

TEXTMETRICtm;

switch(message)

{

caseWM_CREATE:

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);

//Savethewidthofthethreecolumns

iMaxWidth=40*cxChar+22*cxCaps;

return0;

caseWM_SIZE:

cxClient=LOWORD(lParam);

cyClient=HIWORD(lParam);

//Setverticalscrollbarrangeandpagesize

si.cbSize=sizeof(si);

si.fMask=SIF_RANGE|SIF_PAGE;

si.nMin=0;

si.nMax=NUMLINES-1;

si.nPage=cyClient/cyChar;

SetScrollInfo(hwnd,SB_VERT,&si,TRUE);

//Sethorizontalscrollbarrangeandpagesize

si.cbSize=sizeof(si);

si.fMask=SIF_RANGE|SIF_PAGE;

si.nMin=0;

si.nMax=2+iMaxWidth/cxChar;

si.nPage=cxClient/cxChar;

SetScrollInfo(hwnd,SB_HORZ,&si,TRUE);

return0;

caseWM_VSCROLL:

//Getalltheverticalscrollbarinformation

si.cbSize=sizeof(si);

si.fMask=SIF_ALL;

GetScrollInfo(hwnd,SB_VERT,&si);

//Savethepositionforcomparisonlateron

iVertPos=si.nPos;

switch(LOWORD(wParam))

{

caseSB_TOP:

si.nPos=si.nMin;

break;

caseSB_BOTTOM:

si.nPos=si.nMax;

break;

caseSB_LINEUP:

si.nPos-=1;

break;

caseSB_LINEDOWN:

si.nPos+=1;

break;

caseSB_PAGEUP:

si.nPos-=si.nPage;

break;

caseSB_PAGEDOWN:

si.nPos+=si.nPage;

break;

caseSB_THUMBTRACK:

si.nPos=si.nTrackPos;

break;

default:

break;

}

//Setthepositionandthenretrieveit.Duetoadjustments

//byWindowsitmightnotbethesameasthevalueset.

si.fMask=SIF_POS;

SetScrollInfo(hwnd,SB_VERT,&si,TRUE);

GetScrollInfo(hwnd,SB_VERT,&si);

//Ifthepositionhaschanged,scrollthewindowandupdateit

if(si.nPos!

=iVertPos)

{

ScrollWindow(hwnd,0,cyChar*(iVertPos-si.nPos),

NULL,NULL);

UpdateWindow(hwnd);

}

return0;

caseWM_HSCROLL:

//Getalltheverticalscrollbarinformation

si.cbSize=sizeof(si);

si.fMask=SIF_ALL;

//Savethepositionforcomparisonlateron

GetScrollInfo(hwnd,SB_HORZ,&si);

iHorzPos=si.nPos;

switch(LOWORD(wParam))

{

caseSB_LINELEFT:

si.nPos-=1;

break;

caseSB_LINERIGHT:

si.nPos+=1;

break;

caseSB_PAGELEFT:

si.nPos-=si.nPage;

break;

caseSB_PAGERIGHT:

si.nPos+=si.nPage;

break;

caseSB_THUMBPOSITION:

si.nPos=si.nTrackPos;

break;

default:

break;

}

//Setthepositionandthenretrieveit.Duetoadjustments

//byWindowsitmightnotbethesameasthevalueset.

si.fMask=SIF_POS;

SetScrollInfo(hwnd,SB_HORZ,&si,TRUE);

GetScrollInfo(hwnd,SB_HORZ,&si);

//Ifthepositionhaschanged,scrollthewindow

if(si.nPos!

=iHorzPos)

{

ScrollWindow(hwnd,cxChar*(iHorzPos-si.nPos),0,

NULL,NULL);

}

return0;

caseWM_KEYDOWN:

switch(wParam)

{

caseVK_HOME:

SendMessage(hwnd,WM_VSCROLL,SB_TOP,0);

break;

caseVK_END:

SendMessage(hwnd,WM_VSCROLL,SB_BOTTOM,0);

break;

caseVK_PRIOR:

SendMessage(hwnd,WM_VSCROLL,SB_PAGEUP,0);

break;

caseVK_NEXT:

SendMessage(hwnd,WM_VSCROLL,SB_PAGEDOWN,0);

break;

caseVK_UP:

SendMessage(hwnd,WM_VSCROLL,SB_LINEUP,0);

break;

caseVK_DOWN:

SendMessage(hwnd,WM_VSCROLL,SB_LINEDOWN,0);

break;

caseVK_LEFT:

SendMessage(hwnd,WM_HSCROLL,SB_PAGEUP,0);

break;

caseVK_RIGHT:

SendMessage(hwnd,WM_HSCROLL,SB_PAGEDOWN,0);

break;

}

return0;

caseWM_PAINT:

hdc=BeginPaint(hwnd,&ps);

//Getverticalscrollbarposition

si.cbSize=sizeof(si);

si.fMask=SIF_POS;

GetScrollInfo(hwnd,SB_VERT,&si);

iVertPos=si.nPos;

//Gethorizontalscrollbarposition

GetScrollInfo(hwnd,SB_HORZ,&si);

iHorzPos=si.nPos;

//Findpaintinglimits

iPaintBeg=max(0,iVertPos+ps.rcPaint.top/cyChar);

iPaintEnd=min(NUMLINES-1,

iVertPos+ps.rcPaint.bottom/cyChar);

for(i=iPaintBeg;i<=iPaintEnd;i++)

{

x=cxChar*(1-iHorzPos);

y=cyChar*(i-iVertPos);

TextOut(hdc,x,y,

sysmetrics[i].szLabel,

lstrlen(sysmetrics[i].szLabel));

TextOut(hdc,x+22*cxCaps,y,

sysmetrics[i].szDesc,

lstrlen(sysmetrics[i].szDesc));

SetTextAlign(hdc,TA_RIGHT|TA_TOP);

TextOut(hdc,x+22*cxCaps+40*cxChar,y,szBuffer,

wsprintf(szBuffer,TEXT("%5d"),

GetSystemMetrics(sysmetrics[i].iIndex)));

SetTextAlign(hdc,TA_LEFT|TA_TOP);

}

EndPaint(hwnd,&ps);

return0;

caseWM_DESTROY:

PostQuitMessage(0);

return0;

}

returnDefWindowProc(hwnd,message,wParam,lParam);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 互联网

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1