您的位置:威尼斯官方网站 > 威尼斯官方网站 > 威尼斯官方网站:第六章 键盘(SYSMETS4)

威尼斯官方网站:第六章 键盘(SYSMETS4)

发布时间:2019-11-27 17:29编辑:威尼斯官方网站浏览(200)

    威尼斯官方网站 1威尼斯官方网站 2

     1 //SYSMETS.H -- System metrics display structure
     2 #include <Windows.h>
     3 
     4 #define NUMLINES ((int) (sizeof(sysmetrics) / sizeof(sysmetrics[0])))
     5 
     6 struct  
     7 {
     8     int iIndex;
     9     TCHAR *szLabel;
    10     TCHAR *szDesc;
    11 }
    12 sysmetrics[] =
    13 {
    14     SM_CXSCREEN,            TEXT("SM_CXSCREEN"),            TEXT("Screen width in pixels"),
    15     SM_CYSCREEN,            TEXT("SM_CYSCREEN"),            TEXT("Screen height in pixels"),
    16     SM_CXVSCROLL,            TEXT("SM_CXVSCROLL"),            TEXT("Vertical scroll width"),
    17     SM_CYHSCROLL,            TEXT("SM_CYHSCROLL"),            TEXT("Horizontal scroll height"),
    18     SM_CYCAPTION,            TEXT("SM_CYCAPTION"),            TEXT("Caption bar height"),
    19     SM_CXBORDER,            TEXT("SM_CXBORDER"),            TEXT("Window border width"),
    20     SM_CYBORDER,            TEXT("SM_CYBORDER"),            TEXT("Window border height"),
    21     SM_CXFIXEDFRAME,        TEXT("SM_CXFIXEDFRAME"),        TEXT("Dialog window frame width"),
    22     SM_CYFIXEDFRAME,        TEXT("SM_CYFIXEDFRAME"),        TEXT("Dialog window frame height"),
    23     SM_CYVTHUMB,            TEXT("SM_CYVTHUMB"),            TEXT("Vertical scroll thumb height"),
    24     SM_CXHTHUMB,            TEXT("SM_CXHTHUMB"),            TEXT("Horizontal scroll thumb width"),
    25     SM_CXICON,                TEXT("SM_CXICON"),                TEXT("Icon width"),
    26     SM_CYICON,                TEXT("SM_CYICON"),                TEXT("Icon height"),
    27     SM_CXCURSOR,            TEXT("SM_CXCURSOR"),            TEXT("Cursor width"),
    28     SM_CYCURSOR,            TEXT("SM_CYCURSOR"),            TEXT("Cursor height"),
    29     SM_CYMENU,                TEXT("SM_CYMENU"),                TEXT("Menu bar height"),
    30     SM_CXFULLSCREEN,        TEXT("SM_CXFULLSCREEN"),        TEXT("Full screen client area width"),
    31     SM_CYFULLSCREEN,        TEXT("SM_CYFULLSCREEN"),        TEXT("Full screen client area height"),
    32     SM_CYKANJIWINDOW,        TEXT("SM_CYKANJIWINDOW"),        TEXT("Kanji window height"),
    33     SM_MOUSEPRESENT,        TEXT("SM_MOUSEPRESENT"),        TEXT("Mouse present flag"),
    34     SM_CYVSCROLL,            TEXT("SM_CYVSCROLL"),            TEXT("Vertical scroll arrow height"),
    35     SM_CXHSCROLL,            TEXT("SM_CXHSCROLL"),            TEXT("Horizontal scroll arrow width"),
    36     SM_DEBUG,                TEXT("SM_DEBUG"),                TEXT("Debug version flag"),
    37     SM_SWAPBUTTON,            TEXT("SM_SWAPBUTTON"),            TEXT("Mouse buttons swapped flag"),
    38     SM_CXMIN,                TEXT("SM_CXMIN"),                TEXT("Minimum window width"),
    39     SM_CYMIN,                TEXT("SM_CYMIN"),                TEXT("Minimum window height"),
    40     SM_CXSIZE,                TEXT("SM_CXSIZE"),                TEXT("Min/Max/Close button width"),
    41     SM_CYSIZE,                TEXT("SM_CYSIZE"),                TEXT("Min/Max/Close button height"),
    42     SM_CXSIZEFRAME,            TEXT("SM_CXSIZEFRAME"),            TEXT("Window sizing frame width"),
    43     SM_CYSIZEFRAME,            TEXT("SM_CYSIZEFRAME"),            TEXT("Window sizing frame height"),
    44     SM_CXMINTRACK,            TEXT("SM_CXMINTRACK"),            TEXT("Minimum window tracking width"),
    45     SM_CYMINTRACK,            TEXT("SM_CYMINTRACK"),            TEXT("Minimum window tracking height"),
    46     SM_CXDOUBLECLK,            TEXT("SM_CXDOUBLECLK"),            TEXT("Double click x tolerance"),
    47     SM_CYDOUBLECLK,            TEXT("SM_CYDOUBLECLK"),            TEXT("Double click y tolerance"),
    48     SM_CXICONSPACING,        TEXT("SM_CXICONSPACING"),        TEXT("Horizontal icon spacing"),
    49     SM_CYICONSPACING,        TEXT("SM_CYICONSPACING"),        TEXT("Vertical icon spacing"),
    50     SM_MENUDROPALIGNMENT,    TEXT("SM_MENUDROPALIGMENT"),    TEXT("Left or right menu drop"),
    51     SM_PENWINDOWS,            TEXT("SM_PENWINDOWS"),            TEXT("Pen extensions installed"),
    52     SM_DBCSENABLED,            TEXT("SM-DBCSENABLED"),            TEXT("Double-Byte Char Set enable"),
    53     SM_CMOUSEBUTTONS,        TEXT("SM_CMOUSEBUTTONS"),        TEXT("Number of mouse buttons"),
    54     SM_SECURE,                TEXT("SM_SECURE"),                TEXT("Security present flag"),
    55     SM_CXEDGE,                TEXT("SM_CXEDGE"),                TEXT("3-D border width"),
    56     SM_CYEDGE,                TEXT("SM_CYEDGE"),                TEXT("3-D border height"),
    57     SM_CXMINSPACING,        TEXT("SM_CXMINSPACING"),        TEXT("Minimized window spacing width"),
    58     SM_CYMINSPACING,        TEXT("SM-CYMINSPACING"),        TEXT("Minimized window spacing height"),
    59     SM_CXSMICON,            TEXT("SM_CXSMICON"),            TEXT("Small icon width"),
    60     SM_CYSMICON,            TEXT("SM_CYSMICON"),            TEXT("Small icon height"),
    61     SM_CYSMCAPTION,            TEXT("SM_CYSMCAPTION"),            TEXT("Small caption height"),
    62     SM_CXSMSIZE,            TEXT("SM_CXSMSIZE"),            TEXT("Small caption button width"),
    63     SM_CYSMSIZE,            TEXT("SM_CYSMSIZE"),            TEXT("Small caption button height"),
    64     SM_CXMENUSIZE,            TEXT("SM_CXMENUSIZE"),            TEXT("Menu bar button width"),
    65     SM_CYMENUSIZE,            TEXT("SM_CYMENUSIZE"),            TEXT("Menu bar button height"),
    66     SM_ARRANGE,                TEXT("SM_ARRANGE"),                TEXT("How minimized windows arranged"),
    67     SM_CXMINIMIZED,            TEXT("SM_CXMINIMIZED"),            TEXT("Minimized window width"),
    68     SM_CYMINIMIZED,            TEXT("SM_CYMINIMIZED"),            TEXT("Minimized window height"),
    69     SM_CXMAXTRACK,            TEXT("SM_CXMAXTRACK"),            TEXT("Maximum draggable width"),
    70     SM_CYMAXTRACK,            TEXT("SM_CYMAXTRACK"),            TEXT("Maximum draggable height"),
    71     SM_CXMAXIMIZED,            TEXT("SM_CXMAXIMIZED"),            TEXT("Width of maximized window"),
    72     SM_CYMAXIMIZED,            TEXT("SM_CYMAXIMIZED"),            TEXT("Height of maximized windwo"),
    73     SM_NETWORK,                TEXT("SM_NETWORK"),                TEXT("Network present flag"),
    74     SM_CLEANBOOT,            TEXT("SM_CLEANBOOT"),            TEXT("How system was booted"),
    75     SM_CXDRAG,                TEXT("SM_CXDRAG"),                TEXT("Avoid drag x tolerance"),
    76     SM_CYDRAG,                TEXT("SM_CYDRAG"),                TEXT("Avoid drag x tolerance"),
    77     SM_SHOWSOUNDS,            TEXT("SM_SHOWSOUNDS"),            TEXT("Present sounds visually"),
    78     SM_CXMENUCHECK,            TEXT("SM_CXMENUCHECK"),            TEXT("Menu check-mark width"),
    79     SM_CYMENUCHECK,            TEXT("SM_CYMENUCHECK"),            TEXT("Menu check-mark height"),
    80     SM_SLOWMACHINE,            TEXT("SM_SLOWMACHINE"),            TEXT("Slow processor flag"),
    81     SM_MIDEASTENABLED,        TEXT("SM_MIDEASTENABLE"),        TEXT("Hebrew and Arabic enabled flag"),
    82     SM_MOUSEWHEELPRESENT,    TEXT("SM_MOUSEWHEELPRESENT"),    TEXT("Mouse wheel present flag"),
    83     SM_XVIRTUALSCREEN,        TEXT("SM_XVIRTUALSCREEN"),        TEXT("Virtual screen x origin"),
    84     SM_YVIRTUALSCREEN,        TEXT("SM_YVIRTUALSCREEN"),        TEXT("Virtual screen y origin"),
    85     SM_CXVIRTUALSCREEN,        TEXT("SM_CXVIRTUALSCREEN"),        TEXT("Virtual screen width"),
    86     SM_CYVIRTUALSCREEN,        TEXT("SM_CYVIRTUALSCREEN"),        TEXT("Virtual screen height"),
    87     SM_CMONITORS,            TEXT("SM_CMONITORS"),            TEXT("Number of monitors"),
    88     SM_SAMEDISPLAYFORMAT,    TEXT("SM_SAMEDISPLAYFORMAT"),    TEXT("Same color format flag")
    89 };
    

    SYSMETS.H

    威尼斯官方网站 3威尼斯官方网站 4

      1 /*-----------------------------------------------
      2 SYSMETS4.C -- System Metrics Display Program No.4
      3               (c) Charles Petzold, 1998
      4 -----------------------------------------------*/
      5 
      6 #include <Windows.h>
      7 #include "SYSMETS.h"
      8 
      9 LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
     10 
     11 int WINAPI WinMain( __in HINSTANCE hInstance
     12                     , __in_opt HINSTANCE hPrevInstance
     13                     , __in LPSTR lpCmdLine
     14                     , __in int nShowCmd )
     15 {
     16     static TCHAR szAppName[] = TEXT("SysMets4");
     17     HWND hwnd;
     18     MSG msg;
     19     WNDCLASS wndclass;
     20 
     21     wndclass.style = CS_HREDRAW | CS_VREDRAW;
     22     wndclass.lpfnWndProc = WndProc;
     23     wndclass.cbClsExtra = 0;
     24     wndclass.cbWndExtra= 0;
     25     wndclass.hInstance = hInstance;
     26     wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
     27     wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
     28     wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
     29     wndclass.lpszMenuName = NULL;
     30     wndclass.lpszClassName = szAppName;
     31 
     32     if (!RegisterClass(&wndclass))
     33     {
     34         MessageBox(hwnd, TEXT("Program requires Windows NT !")
     35             , szAppName, MB_ICONERROR);
     36         return 0;
     37     }
     38 
     39     hwnd = CreateWindow(szAppName, TEXT("Get System Metrics No.4")
     40         , WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL
     41         , CW_USEDEFAULT, CW_USEDEFAULT
     42         , CW_USEDEFAULT, CW_USEDEFAULT
     43         , NULL, NULL, hInstance, NULL);
     44 
     45     ShowWindow(hwnd, nShowCmd);
     46     UpdateWindow(hwnd);
     47 
     48     while (GetMessage(&msg, NULL, 0, 0))
     49     {
     50         TranslateMessage(&msg);
     51         DispatchMessage(&msg);
     52     }
     53 
     54     return msg.wParam;
     55 }
     56 
     57 LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
     58 {
     59     static int cxChar, cxCaps, cyChar, cxClient, cyClient, iMaxWidth;
     60     HDC hdc;
     61     int i, x, y, iVertPos, iHorzPos, iPaintBeg, iPaintEnd;
     62     PAINTSTRUCT ps;
     63     SCROLLINFO si;
     64     TCHAR szBuffer[10];
     65     TEXTMETRIC tm;
     66 
     67     switch (message)
     68     {
     69     case WM_CREATE:
     70         hdc = GetDC(hwnd);
     71         GetTextMetrics(hdc, &tm);
     72         cxChar = tm.tmAveCharWidth;
     73         cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
     74         cyChar = tm.tmHeight + tm.tmExternalLeading;
     75         ReleaseDC(hwnd, hdc);
     76 
     77         //save the width of the three columns
     78         iMaxWidth = 40 * cxChar + 22 * cxCaps;
     79         return 0;
     80 
     81     case WM_SIZE:
     82         cxClient = LOWORD(lParam);
     83         cyClient = HIWORD(lParam);
     84 
     85         //set vertical scroll bar range and page size
     86         si.cbSize = sizeof(si);
     87         si.fMask = SIF_RANGE | SIF_PAGE;
     88         si.nMin = 0;
     89         si.nMax = NUMLINES - 1;
     90         si.nPage = cyClient / cyChar;
     91         SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
     92 
     93         //set horizontal scroll bar range and page size
     94         si.cbSize = sizeof(si);
     95         si.fMask = SIF_RANGE | SIF_PAGE;
     96         si.nMin = 0;
     97         si.nMax = 2 + iMaxWidth / cxChar;
     98         si.nPage = cxClient / cxChar;
     99         SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
    100         return 0;
    101 
    102     case WM_VSCROLL:
    103         //get all the vertical scroll bar information
    104         si.cbSize= sizeof(si);
    105         si.fMask = SIF_ALL;
    106         GetScrollInfo(hwnd, SB_VERT, &si);
    107 
    108         //save the position for comparison later on
    109         iVertPos = si.nPos;
    110 
    111         switch (LOWORD(wParam))
    112         {
    113         case SB_TOP:
    114             si.nPos = si.nMin;
    115             break;
    116 
    117         case SB_BOTTOM:
    118             si.nPos = si.nMax;
    119             break;
    120 
    121         case SB_LINEUP:
    122             si.nPos -= 1;
    123             break;
    124 
    125         case SB_LINEDOWN:
    126             si.nPos += 1;
    127             break;
    128 
    129         case SB_PAGEUP:
    130             si.nPos -= si.nPage;
    131             break;
    132 
    133         case SB_PAGEDOWN:
    134             si.nPos += si.nPage;
    135             break;
    136 
    137         case SB_THUMBTRACK:
    138             si.nPos = si.nTrackPos;
    139             break;
    140 
    141         default:
    142             break;
    143         }
    144 
    145         //Set the position and then retrieve it. Due to adjustments
    146         //by windows it might not be the same as the value set.
    147         si.fMask = SIF_POS;
    148         SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
    149         GetScrollInfo(hwnd, SB_VERT, &si);
    150 
    151         //if the position has changed, scroll the window and update it
    152         if (si.nPos != iVertPos)
    153         {
    154             ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
    155             UpdateWindow(hwnd);
    156         }
    157         return 0;
    158 
    159     case WM_HSCROLL:
    160         //get all the horizontal scroll bar information
    161         si.cbSize = sizeof(si);
    162         si.fMask = SIF_ALL;
    163 
    164         //save the position for comparison later on
    165         GetScrollInfo(hwnd, SB_HORZ, &si);
    166         iHorzPos = si.nPos;
    167 
    168         switch (LOWORD(wParam))
    169         {
    170         case SB_LINELEFT:
    171             si.nPos -= 1;
    172             break;
    173 
    174         case SB_LINERIGHT:
    175             si.nPos += 1;
    176             break;
    177 
    178         case SB_PAGELEFT:
    179             si.nPos -= si.nPage;
    180             break;
    181 
    182         case SB_PAGERIGHT:
    183             si.nPos += si.nPage;
    184             break;
    185 
    186         case SB_THUMBPOSITION:
    187             si.nPos = si.nTrackPos;
    188             break;
    189 
    190         default:
    191             break;
    192         }
    193 
    194         //Set the position and then retrieve it. Due to adjustments
    195         //by window it might not be the same as the value set.
    196         si.fMask = SIF_POS;
    197         SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);
    198         GetScrollInfo(hwnd, SB_HORZ, &si);
    199 
    200         //if the position has changed, scroll the window.
    201         if (si.nPos != iHorzPos)
    202         {
    203             ScrollWindow(hwnd, cxChar * (iHorzPos - si.nPos), 0, NULL, NULL);
    204             UpdateWindow(hwnd);
    205         }
    206         return 0;
    207 
    208     case WM_KEYDOWN:
    209         switch (wParam)
    210         {
    211         case VK_HOME:
    212             SendMessage(hwnd, WM_VSCROLL, SB_TOP, 0);
    213             break;
    214 
    215         case VK_END:
    216             SendMessage(hwnd, WM_VSCROLL, SB_BOTTOM, 0);
    217             break;
    218 
    219         case VK_PRIOR:
    220             SendMessage(hwnd, WM_VSCROLL, SB_PAGEUP, 0);
    221             break;
    222 
    223         case VK_NEXT:
    224             SendMessage(hwnd, WM_VSCROLL, SB_PAGEDOWN, 0);
    225             break;
    226 
    227         case VK_UP:
    228             SendMessage(hwnd, WM_VSCROLL, SB_LINEUP, 0);
    229             break;
    230 
    231         case VK_DOWN:
    232             SendMessage(hwnd, WM_VSCROLL, SB_LINEDOWN, 0);
    233             break;
    234 
    235         case VK_LEFT:
    236             SendMessage(hwnd, WM_HSCROLL, SB_PAGEUP, 0);
    237             break;
    238 
    239         case VK_RIGHT:
    240             SendMessage(hwnd, WM_HSCROLL, SB_PAGEDOWN, 0);
    241             break;
    242         }
    243         return 0;
    244 
    245     case WM_PAINT:
    246         hdc = BeginPaint(hwnd, &ps);
    247 
    248         //get vertical scroll bar position
    249         si.cbSize = sizeof(si);
    250         si.fMask = SIF_POS;
    251         GetScrollInfo(hwnd, SB_VERT, &si);
    252         iVertPos = si.nPos;
    253 
    254         //get horizontal scroll bar position
    255         GetScrollInfo(hwnd, SB_HORZ, &si);
    256         iHorzPos = si.nPos;
    257 
    258         //find paintint limits
    259         iPaintBeg = max(0, iVertPos + ps.rcPaint.top / cyChar);
    260         iPaintEnd = min(NUMLINES - 1, iVertPos + ps.rcPaint.bottom / cyChar);
    261 
    262         for (i = iPaintBeg; i <= iPaintEnd; ++i)
    263         {
    264             x = cxChar * (1 - iHorzPos);
    265             y = cyChar * (i - iVertPos);
    266 
    267             TextOut(hdc, x, y, sysmetrics[i].szLabel, lstrlen(sysmetrics[i].szLabel));
    268 
    269             TextOut(hdc, x + 22 * cxCaps, y, sysmetrics[i].szDesc, lstrlen(sysmetrics[i].szDesc));
    270 
    271             SetTextAlign(hdc, TA_RIGHT | TA_TOP);
    272 
    273             TextOut(hdc, x + 22 * cxCaps + 40 * cxChar, y, szBuffer
    274                 , wsprintf(szBuffer, TEXT("%5d"), GetSystemMetrics(sysmetrics[i].iIndex)));
    275 
    276             SetTextAlign(hdc, TA_LEFT | TA_TOP);
    277         }
    278 
    279         EndPaint(hwnd, &ps);
    280         return 0;
    281 
    282     case WM_DESTROY:
    283         PostQuitMessage(0);
    284         return 0;
    285     }
    286 
    287     return DefWindowProc(hwnd, message, wParam, lParam);
    288 }
    

    SYSMETS4.C

    威尼斯官方网站, 

    本文由威尼斯官方网站发布于威尼斯官方网站,转载请注明出处:威尼斯官方网站:第六章 键盘(SYSMETS4)

    关键词:

上一篇:汤姆cat质量优化

下一篇:没有了