眉、Windows園殻岻獄強訳!獄強訳嶧連
壓喘報炎汽似獄強訳賜宀溶強壌強圭翠扮?Windows公完笥嶧連侃尖殻會窟僕WM_VSCROLL?工貧和卞強?才WM_HSCROLL?工恣嘔卞強?嶧連。壓獄強訳貧議耽倖報炎強恬脅崛富恢伏曾倖嶧連?匯訳壓梓和報炎梓泥扮恢伏?匯訳壓瞥慧梓泥扮恢伏。
才侭嗤議嶧連匯劔?WM_VSCROLL才WM_HSCROLL匆揮嗤wParam才lParam嶧連歌方。斤噐栖徭恬葎完笥議匯何蛍遇秀羨議獄強訳嶧連?艇辛參策待lParam?万峪喘噐恬葎徨完笥遇秀羨議獄強訳?宥械壓斤三崇坪?。
wParam嶧連歌方瓜蛍葎匯倖詰忖怏才匯倖互忖怏。wParam議詰忖怏頁匯倖方峙?万峺竃阻報炎斤獄強訳序佩議荷恬。宸倖方峙瓜心恬匯倖仝宥岑鷹々。宥岑鷹議峙喇參SB?旗燕仝scroll bar?獄強訳?々?蝕遊議炎紛憲協吶。參和頁壓WINUSER.H嶄協吶議宥岑鷹?
#define SB_LINEUP 0 #define SB_LINELEFT 0 #define SB_LINEDOWN 1 #define SB_LINERIGHT 1 #define SB_PAGEUP 2 #define SB_PAGELEFT 2 #define SB_PAGEDOWN 3 #define SB_PAGERIGHT 3 #define SB_THUMBPOSITION 4 #define SB_THUMBTRACK 5 #define SB_TOP 6 #define SB_LEFT 6 #define SB_BOTTOM 7 #define SB_RIGHT 7 #define SB_ENDSCROLL 8
淫根LEFT才RIGHT議炎紛憲喘噐邦峠獄強訳?淫根UP、DOWN、TOP才BOTTOM議炎紛憲喘噐換岷獄強訳。報炎壓獄強訳議音揖曝囃汽似侭恢伏議宥岑鷹泌夕4-7侭幣。
泌惚壓獄強訳議光倖何了梓廖報炎囚?殻會祥嬬辺欺謹倖獄強訳嶧連。輝瞥慧報炎囚朔?殻會氏辺欺匯倖揮嗤SB_ENDSCROLL宥岑鷹議嶧連。匯違辛參策待宸倖嶧連?Windows音氏肇個延壌強圭翠議了崔?遇艇辛參壓殻會嶄柵出SetScrollPos栖個延壌強圭翠議了崔。
輝委報炎議高炎慧壓壌強圭翠貧旺梓廖報炎囚扮?艇祥辛參卞強壌強圭翠。宸劔祥恢伏阻揮嗤SB_THUMBTRACK才SB_THUMBPOSITION宥岑鷹議獄強訳嶧連。壓wParam議詰忖怏頁SB_THUMBTRACK扮?wParam議互忖怏頁聞喘宀壓溶強壌強圭翠扮議朕念了崔。乎了崔了噐壌強双袈律議恷弌峙才恷寄峙岻寂。壓wParam議詰忖怏頁SB_THUMBPOSITION扮?wParam議互忖怏頁聞喘宀瞥慧報炎囚朔壌強圭翠議恷嶮了崔。斤噐凪万議壌強双荷恬?wParam議互忖怏哘乎瓜策待。
葎阻公聞喘宀戻工指澄?Windows壓艇喘報炎溶強壌強圭翠扮卞強万?揖扮艇議殻會氏辺欺SB_THUMBTRACK嶧連。隼遇?泌惚音宥狛柵出SetScrollPos栖侃尖SB_THUMBTRACK賜SB_THUMBPOSITION嶧連?壓聞喘宀瞥慧報炎囚朔?壌強圭翠氏儻堀柳指圻栖議了崔。
殻會嬬校侃尖SB_THUMBTRACK賜SB_THUMBPOSITION嶧連?徽匯違音揖扮侃尖曾宀。泌惚侃尖SB_THUMBTRACK嶧連?壓聞喘宀溶強壌強圭翠扮艇俶勣卞強?塋焦瘕魑陳敞檗6甗膵蔲??SB_THUMBPOSITION嶧連?夸峪俶壓聞喘宀唯峭溶強壌強圭翠扮卞強?塋焦瘕魑陳敞檗4??SB_THUMBTRACK嶧連厚挫匯乂?徽厚是佃??斤噐蝶乂侏蓑議方象?艇議殻會辛嬬載佃効貧恢伏議嶧連。
WINUSER.H燕遊猟周珊淫凄SB_TOP、SB_BOTTOM、SB_LEFT才SB_RIGHT宥岑鷹?峺竃獄強訳厮将瓜卞欺阻万議恷弌賜恷寄了崔。隼遇?斤噐恬葎哘喘殻會完笥匯何蛍遇秀羨議獄強訳栖傍?喟垓音氏俊辺欺宸乂宥岑鷹。
壓獄強訳袈律聞喘32了議峙匆頁嗤丼議?勝砿宸音械需。隼遇?wParam議互忖怏峪嗤16了議寄弌?万音嬬癖輝仇峺竃SB_THUMBTRACK才SB_THUMBPOSITION荷恬議了崔。壓宸嶽秤趨和?俶勣聞喘GetScrollInfo痕方?壓和中宙峰?栖誼欺佚連。
壓SYSMETS嶄紗秘壌強孔嬬
念中議傍苧厮将載峋勝阻?孖壓?勣繍椎乂叫廉強返恂恂心阻。斑厘断蝕兵扮酒汽乂?貫換岷壌強彭返?咀葎厘断糞壓湊俶勣換岷壌強阻?遇壙扮珊辛參音喘邦峠壌強。SYSMET2泌殻會4-3侭幣。宸倖殻會辛嬬頁獄強訳議恷酒汽議哘喘。
/*------------------------------------------------------------------
SYSMETS2.C -- System Metrics Display Program No. 2
(c) Charles Petzold, 1998
------------------------------------------------------------------*/
#include <windows.h>
#include "sysmets.h"
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("SysMets2") ;
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. 2"),
WS_OVERLAPPEDWINDOW | WS_VSCROLL,
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)
{
static int cxChar, cxCaps, cyChar, cyClient, iVscrollPos ;
HDC hdc ;
int i, y ;
PAINTSTRUCT ps ;
TCHAR szBuffer[10] ;
TEXTMETRIC tm ;
switch (message)
{
case WM_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) ;
SetScrollRange (hwnd, SB_VERT, 0, NUMLINES - 1, FALSE) ;
SetScrollPos (hwnd, SB_VERT, iVscrollPos, TRUE) ;
return 0 ;
case WM_SIZE:
cyClient = HIWORD (lParam) ;
return 0 ;
case WM_VSCROLL:
switch (LOWORD (wParam))
{
case SB_LINEUP:
iVscrollPos -= 1 ;
break ;
case SB_LINEDOWN:
iVscrollPos += 1 ;
break ;
case SB_PAGEUP:
iVscrollPos -= cyClient / cyChar ;
break ;
case SB_PAGEDOWN:
iVscrollPos += cyClient / cyChar ;
break ;
case SB_THUMBPOSITION:
iVscrollPos = HIWORD (wParam) ;
break ;
default :
break ;
}
iVscrollPos = max (0, min (iVscrollPos, NUMLINES - 1)) ;
if (iVscrollPos != GetScrollPos (hwnd, SB_VERT))
{
SetScrollPos (hwnd, SB_VERT, iVscrollPos, TRUE) ;
InvalidateRect (hwnd, NULL, TRUE) ;
}
return 0 ;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
for (i = 0 ; i < NUMLINES ; i++)
{
y = cyChar * (i - iVscrollPos) ;
TextOut (hdc, 0, y,
sysmetrics[i].szLabel,
lstrlen (sysmetrics[i].szLabel)) ;
TextOut (hdc, 22 * cxCaps, y,
sysmetrics[i].szDesc,
lstrlen (sysmetrics[i].szDesc)) ;
SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;
TextOut (hdc, 22 * cxCaps + 40 * cxChar, y, szBuffer,
wsprintf (szBuffer, TEXT ("%5d"),
GetSystemMetrics (sysmetrics[i].iIndex))) ;
SetTextAlign (hdc, TA_LEFT | TA_TOP) ;
}
EndPaint (hwnd, &ps) ;
return 0 ;
case WM_DESTROY:
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}
仟議CreateWindow柵出壓及眉倖歌方嶄淫根阻WS_VSCROLL完笥劔塀?貫遇壓完笥嶄紗秘阻換岷獄強訳?凪完笥劔塀葎?
WS_OVERLAPPEDWINDOW | WS_VSCROLL
WndProc完笥嶧連侃尖殻會壓侃尖WM_CREATE嶧連扮奐紗阻曾訳偃峰?參譜崔換岷獄強訳議袈律才兜兵了崔?
SetScrollRange (hwnd, SB_VERT, 0, NUMLINES - 1, FALSE) ; SetScrollPos (hwnd, SB_VERT, iVscrollPos, TRUE) ;
sysmetrics潤更醤嗤NUMLINES佩猟忖?侭參獄強訳袈律瓜譜協葎0崛NUMLINES-1。獄強訳議耽倖了崔斤哘噐壓?塋焦瘕魘ゲ刃塋承漬燦氅鍔嶄弌H膵薏躑噯戎薺栂志知?0?夸及匯佩氏瓜慧崔壓?塋焦瘕魑超ゲ拭H膵?志担靡?0?凪万佩祥氏竃孖壓?塋焦瘕魑超ゲ拭5盈志知?NUMLINES-1扮?夸恷朔匯佩猟忖竃孖壓?塋焦瘕魑超ゲ拭?
葎阻嗤廁噐侃尖WM_VSCROLL嶧連?壓完笥嶧連侃尖殻會嶄協吶阻匯倖床蓑延楚iVscrollPos?宸匯延楚頁獄強訳坪壌強圭翠議朕念了崔。斤噐SB_LINEUP才SB_LINEDOWN?峪俶勣繍壌強圭翠距屁匯倖汽了議了崔。斤噐SB_PAGEUP才SB_PAGEDOWN?厘断?卞強匯屁中議坪否?賜宀卞強cyClient /cyChar倖汽了議了崔。斤噐SB_THUMBPOSITION?仟議壌強圭翠了崔頁wParam議互忖怏。SB_ENDSCROLL才SB_THUMBTRACK嶧連瓜策待。
壓殻會卆象辺欺議WM_VSCROLL嶧連柴麻竃仟議iVscrollPos峙朔?喘min才max崎栖距屁iVscrollPos?參鳩隠万壓恷寄峙嚥恷弌峙岻寂。殻會隼朔繍iVscrollPos嚥柵出GetScrollPos函誼議枠念了崔屢曳熟?泌惚壌強了崔窟伏阻延晒?夸聞喘SetScrollPos栖序佩厚仟?旺拝柵出InvalidateRect聞屁倖完笥涙丼。
InvalidateRect柵出恢伏匯倖WM_PAINT嶧連。SYSMETS1壓侃尖WM_PAINT嶧連扮?耽匯佩議y恫炎柴麻巷塀葎?
cyChar * i
壓SYSMETS2嶄?柴麻巷塀葎?
cyChar * (i - iVscrollPos)
儉桟挽隼?塋?NUMLINES佩猟忖?徽頁斤噐掲巣峙議iVscrollPos頁減方。殻會糞縞貧壓?塋焦瘕鰔塒睿塋蒋睾Ø鍔嶄弌5曳撮?Windows音氏?塋蒋睾Ú丕r魎貌祖始垉淡評産容圊繊?
念中傍狛?厘断匯蝕兵音?的誼湊鹸墫?宸劔議殻會旗鷹載惜継?丼楕載詰。和中厘断斤緩紗參俐個?徽頁枠勣深打壓WM_VSCROLL嶧連岻朔厚仟?塋焦瘕魑跳酬─?