Annotation of q_a/samples/getsys/getsys.c, revision 1.1.1.1

1.1       root        1: 
                      2: /******************************************************************************\
                      3: *       This is a part of the Microsoft Source Code Samples. 
                      4: *       Copyright (C) 1993 Microsoft Corporation.
                      5: *       All rights reserved. 
                      6: *       This source code is only intended as a supplement to 
                      7: *       Microsoft Development Tools and/or WinHelp documentation.
                      8: *       See these sources for detailed information regarding the 
                      9: *       Microsoft samples programs.
                     10: \******************************************************************************/
                     11: 
                     12: /**************************************************************************\
                     13: *  getsys.c -- sample program demonstrating the GetSys... APIs
                     14: *
                     15: *  In this sample the main window is a dialog box.  There is no need to
                     16: *   register a new window class or create a new window.  Instead just call
                     17: *   DialogBox() and use the template defined in the .RC file.  All of the
                     18: *   interesting code is thus in the window procedure for the dialog box.
                     19: *   In this case, simply respond to the button command messsages and fill
                     20: *   the list box with appropriate values.
                     21: *
                     22: *  The dialog template currently specifies a "monospaced font."  This makes
                     23: *   the dialog look somewhat odd, but makes text formatting much easier.  If
                     24: *   the specified font does not exist on the system running this sample, the
                     25: *   program will work fine, but the contents of the listbox will not look
                     26: *   very good.
                     27: *
                     28: \**************************************************************************/
                     29: 
                     30: #include <windows.h>
                     31: #include "getsys.h"
                     32: 
                     33: 
                     34: /**************************************************************************\
                     35: *
                     36: *  function:  WinMain()
                     37: *
                     38: *  input parameters:  c.f. generic sample
                     39: *
                     40: \**************************************************************************/
                     41: int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                     42:                      LPSTR lpCmdLine, int nCmdShow)
                     43: {
                     44: int ret;
                     45: 
                     46:     UNREFERENCED_PARAMETER( hPrevInstance );
                     47:     UNREFERENCED_PARAMETER( lpCmdLine );
                     48:     UNREFERENCED_PARAMETER( nCmdShow);
                     49: 
                     50:     ret = DialogBox (hInstance, "getsysDlg", NULL, (DLGPROC)MainDlgProc);
                     51:     return ret;
                     52: }
                     53: 
                     54: 
                     55: 
                     56: /**************************************************************************\
                     57: *
                     58: *  function:  MainDlgProc()
                     59: *
                     60: *  input parameters:  standard window procedure parameters.
                     61: *
                     62: \**************************************************************************/
                     63: LRESULT CALLBACK MainDlgProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
                     64: {
                     65:   UNREFERENCED_PARAMETER(lParam);
                     66: 
                     67: 
                     68:   switch (message) {
                     69: 
                     70:     /********************************************************************\
                     71:     * WM_SYSCOMMAND
                     72:     *
                     73:     * ignore all syscommand messages, except for SC_CLOSE.
                     74:     *  on this one, call EndDialog().
                     75:     \********************************************************************/
                     76:     case WM_SYSCOMMAND:
                     77:       if (wParam == SC_CLOSE) {
                     78:         EndDialog (hwnd, TRUE);
                     79:         return TRUE;
                     80:       } else
                     81:         return FALSE;
                     82:     break;
                     83: 
                     84: 
                     85:     /********************************************************************\
                     86:     * WM_COMMAND
                     87:     *
                     88:     * When the different buttons are hit, clear the list box, disable
                     89:     *  updating to it, call the function which will fill it, reenable
                     90:     *  updating, and then force a repaint.
                     91:     *
                     92:     \********************************************************************/
                     93:     case WM_COMMAND:
                     94: 
                     95:       /* if the list box sends back messages, return.  Otherwise we will
                     96:        *  clear it out, and that is not what we want to do at this point.
                     97:        */
                     98:       if (LOWORD(wParam)==DID_LISTBOX) return TRUE;
                     99: 
                    100:       SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW,    FALSE, 0);
                    101:       SendDlgItemMessage (hwnd, DID_LISTBOX, LB_RESETCONTENT, 0,     0);
                    102: 
                    103:       /* switch on the control ID of the button that is pressed. */
                    104:       switch (LOWORD(wParam)) {
                    105:         case DID_SYSCOLORS : doSysColors (hwnd); break;
                    106:         case DID_DIRECTORY : doDirectory (hwnd); break;
                    107:         case DID_INFO      : doInfo      (hwnd); break;
                    108:         case DID_METRICS   : doMetrics   (hwnd); break;
                    109:         case DID_PALETTE   : doPalette   (hwnd); break;
                    110:         case DID_LOCALTIME : doLocalTime (hwnd); break;
                    111:         case DID_TIME      : doTime      (hwnd); break;
                    112:       } /* end switch (LOWORD()) */
                    113: 
                    114:       SendDlgItemMessage (hwnd, DID_LISTBOX, WM_SETREDRAW, TRUE, 0);
                    115:       InvalidateRect (GetDlgItem (hwnd, DID_LISTBOX), NULL, TRUE);
                    116:       return TRUE;
                    117:     break; /* end WM_COMMAND */
                    118: 
                    119: 
                    120:     default: return FALSE;
                    121:   } /* end switch(message) */
                    122: }
                    123: 
                    124: 
                    125: 
                    126: 
                    127: 
                    128: 
                    129: /**************************************************************************\
                    130: *
                    131: *  functions:  do...()
                    132: *
                    133: * In all of the functions that follow, first set the text int the static
                    134: *  text field to label the contents of the list box.  Then, query the
                    135: *  desired system information, format it into strings, and add those strings
                    136: *  to the listbox.
                    137: *
                    138: *  input parameters:  HWND - window handle for the dialog box.
                    139: *  global variables:  buffer - array of char's to hold string w/ info.
                    140: *
                    141: \**************************************************************************/
                    142: 
                    143: VOID doSysColors (HWND hwnd)
                    144: {
                    145: int i;
                    146: DWORD answer;
                    147: 
                    148:   SetDlgItemText (hwnd, DID_TEXT, "System Colors");
                    149: 
                    150:   for (i = 0; i<NSYSCOLORS; i++) {
                    151: 
                    152:     /*******************************************************/
                    153:     /*******************************************************/
                    154:     answer = GetSysColor (SysColors[i].Value);
                    155:     /*******************************************************/
                    156:     /*******************************************************/
                    157: 
                    158:     wsprintf (buffer, SysColors[i].String, (int)answer);
                    159:     SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    160:   }
                    161:   return;
                    162: }
                    163: 
                    164: 
                    165: 
                    166: VOID doDirectory (HWND hwnd)
                    167: {
                    168: char buffer[MAX_PATH];
                    169: 
                    170:   SetDlgItemText (hwnd, DID_TEXT, "System Directory");
                    171: 
                    172:   /*******************************************************/
                    173:   /*******************************************************/
                    174:   GetSystemDirectory (buffer, MAX_PATH);
                    175:   /*******************************************************/
                    176:   /*******************************************************/
                    177: 
                    178:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    179: 
                    180:   return;
                    181: }
                    182: 
                    183: 
                    184: VOID doInfo(HWND hwnd)
                    185: {
                    186: SYSTEM_INFO  si;
                    187: 
                    188:   SetDlgItemText (hwnd, DID_TEXT, "SYSTEM_INFO");
                    189: 
                    190:   /*******************************************************/
                    191:   /*******************************************************/
                    192:   GetSystemInfo (&si);
                    193:   /*******************************************************/
                    194:   /*******************************************************/
                    195: 
                    196:   wsprintf (buffer, "dwOemId             \t%d",  (int) si.dwOemId                    );
                    197:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    198:   wsprintf (buffer, "dwPageSize          \t%d",  (int) si.dwPageSize                 );
                    199:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    200:   wsprintf (buffer, "lpMinimumApplicationAddress \t%08lx", (LONG)si.lpMinimumApplicationAddress );
                    201:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    202:   wsprintf (buffer, "lpMaximumApplicationAddress \t%08lx", (LONG)si.lpMaximumApplicationAddress );
                    203:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    204:   wsprintf (buffer, "dwActiveProcessorMask \t%d",  (int) si.dwActiveProcessorMask      );
                    205:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    206:   wsprintf (buffer, "dwNumberOfProcessors  \t%d",  (int) si.dwNumberOfProcessors       );
                    207:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    208:   wsprintf (buffer, "dwProcessorType       \t%d",  (int) si.dwProcessorType            );
                    209:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    210: 
                    211: #if     defined(STILL_IN_SYSINFO)
                    212:   wsprintf (buffer, "dwAllocationGranularity \t%d",  (int) si.dwAllocationGranularity                );
                    213:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    214:   wsprintf (buffer, "dwReserved           \t%d",  (int) si.dwReserved                );
                    215:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    216: #endif
                    217: 
                    218:   return;
                    219: }
                    220: 
                    221: 
                    222: 
                    223: VOID doMetrics   (HWND hwnd)
                    224: {
                    225: int  i;
                    226: int  answer;
                    227: 
                    228:   SetDlgItemText (hwnd, DID_TEXT, "System Metrics");
                    229: 
                    230:   for (i = 0; i<NSYSMETRICS; i++) {
                    231: 
                    232:     /*******************************************************/
                    233:     /*******************************************************/
                    234:     answer = GetSystemMetrics (SystemMetrics[i].Value);
                    235:     /*******************************************************/
                    236:     /*******************************************************/
                    237: 
                    238:     wsprintf (buffer, SystemMetrics[i].String, (int)answer);
                    239:     SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    240:   }
                    241: 
                    242:   return;
                    243: }
                    244: 
                    245: 
                    246: 
                    247: VOID doPalette(HWND hwnd)
                    248: {
                    249: int nEntries;
                    250: HDC hdc;
                    251: int i;
                    252: LPPALETTEENTRY  lpp;
                    253: 
                    254:   SetDlgItemText (hwnd, DID_TEXT, "System Palette");
                    255: 
                    256:   /* this function is slightly different because the amount of information
                    257:    * is not known until run time.  First find the number of entries in the
                    258:    * palette (16 for VGA, but 256 for 8514, ...), then allocate enough
                    259:    * space to hold all of them, query the information, put it in the list
                    260:    * box, and then free up the memory allocated.
                    261:    */
                    262:   hdc = GetDC (hwnd);
                    263:   nEntries = GetSystemPaletteEntries (hdc, 0,0, NULL);
                    264:   lpp = (LPPALETTEENTRY)LocalAlloc (LPTR,
                    265:                            (DWORD) (nEntries* sizeof (PALETTEENTRY)));
                    266: 
                    267:   if (lpp == NULL) {
                    268:     MessageBox (hwnd, "Memory allocation failed.", "Warning", MB_ICONSTOP | MB_OK);
                    269:     return;
                    270:   }
                    271: 
                    272:   /*******************************************************/
                    273:   /*******************************************************/
                    274:   nEntries = GetSystemPaletteEntries (hdc, 0,nEntries, lpp);
                    275:   /*******************************************************/
                    276:   /*******************************************************/
                    277: 
                    278:   ReleaseDC (hwnd, hdc);
                    279: 
                    280:   for (i = 0; i<nEntries; i++) {
                    281:     wsprintf (buffer, "%d) \t%x \t%x \t%x \t%x", i,
                    282:               lpp[i].peRed, lpp[i].peGreen, lpp[i].peBlue, lpp[i].peFlags);
                    283:     SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    284:   }
                    285: 
                    286:   LocalFree (LocalHandle ((LPSTR)lpp));
                    287:   return;
                    288: }
                    289: 
                    290: 
                    291: 
                    292: 
                    293: VOID doLocalTime (HWND hwnd)
                    294: {
                    295: SYSTEMTIME  st;
                    296: 
                    297:   SetDlgItemText (hwnd, DID_TEXT, "SYSTEMTIME");
                    298: 
                    299:   /*******************************************************/
                    300:   /*******************************************************/
                    301:   GetLocalTime (&st);
                    302:   /*******************************************************/
                    303:   /*******************************************************/
                    304: 
                    305:   wsprintf (buffer, "wYear         \t%d",  (int)st.wYear         );
                    306:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    307:   wsprintf (buffer, "wMonth        \t%d",  (int)st.wMonth        );
                    308:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    309:   wsprintf (buffer, "wDayOfWeek    \t%d",  (int)st.wDayOfWeek    );
                    310:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    311:   wsprintf (buffer, "wDay          \t%d",  (int)st.wDay          );
                    312:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    313:   wsprintf (buffer, "wHour         \t%d",  (int)st.wHour         );
                    314:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    315:   wsprintf (buffer, "wMinute       \t%d",  (int)st.wMinute       );
                    316:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    317:   wsprintf (buffer, "wSecond       \t%d",  (int)st.wSecond       );
                    318:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    319:   wsprintf (buffer, "wMilliseconds \t%d",  (int)st.wMilliseconds );
                    320:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    321:   return;
                    322: }
                    323: 
                    324: 
                    325: 
                    326: VOID doTime (HWND hwnd)
                    327: {
                    328: SYSTEMTIME  st;
                    329: 
                    330:   SetDlgItemText (hwnd, DID_TEXT, "SYSTEMTIME");
                    331: 
                    332:   /*******************************************************/
                    333:   /*******************************************************/
                    334:   GetSystemTime (&st);
                    335:   /*******************************************************/
                    336:   /*******************************************************/
                    337: 
                    338:   wsprintf (buffer, "wYear         \t%d",  (int)st.wYear         );
                    339:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    340:   wsprintf (buffer, "wMonth        \t%d",  (int)st.wMonth        );
                    341:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    342:   wsprintf (buffer, "wDayOfWeek    \t%d",  (int)st.wDayOfWeek    );
                    343:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    344:   wsprintf (buffer, "wDay          \t%d",  (int)st.wDay          );
                    345:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    346:   wsprintf (buffer, "wHour         \t%d",  (int)st.wHour         );
                    347:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    348:   wsprintf (buffer, "wMinute       \t%d",  (int)st.wMinute       );
                    349:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    350:   wsprintf (buffer, "wSecond       \t%d",  (int)st.wSecond       );
                    351:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    352:   wsprintf (buffer, "wMilliseconds \t%d",  (int)st.wMilliseconds );
                    353:   SendDlgItemMessage (hwnd, DID_LISTBOX, LB_ADDSTRING, 0, (LONG) buffer);
                    354:   return;
                    355: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.