Annotation of mstools/samples/generic/generic.rtf, revision 1.1.1.1

1.1       root        1: {\rtf1\ansi \deff0\deflang1024{\fonttbl{\f0\froman Times New Roman;}{\f1\froman Symbol;}{\f2\fswiss Arial;}{\f3\fswiss Helvetica;}{\f4\fmodern Courier;}{\f5\fswiss Helv;}{\f6\froman Ariel;}{\f7\fmodern Courier New;}
                      2: {\f8\fswiss Univers (WN);}{\f9\froman CG Times (WN);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;
                      3: \red0\green0\blue127;\red0\green127\blue127;\red0\green127\blue0;\red127\green0\blue127;\red127\green0\blue0;\red127\green127\blue0;\red127\green127\blue127;\red192\green192\blue192;}{\stylesheet{\s244\li120\sb80\sl-240 \f3\fs18\up6\lang1033 
                      4: \sbasedon0\snext0 footnote reference;}{\s245\li120\sb80\sl-240 \f3\fs20\lang1033 \sbasedon0\snext0 footnote text;}{\s252\li120\sb120\sa60\sl-240 \f3\fs20\lang1033 \snext0 heading 3;}{\s253\li120\sb120\sa60\sl-240 \b\f3\fs20\lang1033 \snext0 heading 2;}{
                      5: \s254\li120\sb280\sa120\sl-320 \b\f3\lang1033 \snext10 heading 1;}{\s255\li360\sb80\sl-240 \f3\fs20\lang1033 \snext0 Normal Indent;}{\li120\sb80\sl-240 \f3\fs20\lang1033 \snext0 Normal;}{\s2\fi-240\li600\sb60\sl-240 \f3\fs20\lang1033 \snext2 Jli;}{
                      6: \s3\li120\sb60\sl-240\keep\tx520\tx920\tx1320\tx1720\tx2120 \f4\fs16\lang1033 \snext3 Ex;}{\s4\li120\sb160\sl-240 \f3\fs20\lang1033 \snext13 Sa1;}{\s5\fi-240\li360\sl-240\tx360 \f3\fs20\lang1033 \snext6 Lb1;}{\s6\fi-240\li360\sb60\sl-240\tx360 
                      7: \f3\fs20\lang1033 \snext6 Lb2;}{\s7\li360\sb60\sl-240 \f3\fs20\lang1033 \snext6 Lp1;}{\s8\fi-1800\li1920\sb120\sa40\sl-240\brdrb\brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \tx1920 \b\f3\fs20\lang1033 \snext9 Th;}{
                      8: \s9\fi-1800\li1920\sb60\sl-240\tx1920 \f3\fs20\lang1033 \snext9 Tp;}{\s10\li120\sl-240 \f3\fs20\lang1033 \snext0 Normal 2;}{\s11\li120\sb120\sa120 \f3\fs20\lang1033 \snext0 bitmap;}{\s12\li120\sb120\sl-240 \f3\fs20\lang1033 \snext13 Sa2;}{
                      9: \s13\fi-240\li360\sb60\sl-240 \f3\fs20\lang1033 \snext13 Jl;}{\s14\li120\sa60 \f8\fs20\lang1033 \snext14 *body;}{\s15\li120\sa60 \b\f8\fs20\lang1033 \snext15 *heading;}{\s16\li120\sa60\sl-240 \f8\fs20\lang1033 \sbasedon14\snext16 para;}{
                     10: \s17\fi-280\li400\sa60 \f8\fs20\lang1033 \sbasedon14\snext17 jump;}{\s18\fi-280\li400\sa60\tx400 \f8\fs20\lang1033 \sbasedon14\snext18 list bullet;}{\s19\fi-280\li600\sa60 \f8\fs20\lang1033 \sbasedon14\snext19 jump indent;}{\s20\li120\sa60\sl-40\brdrb
                     11: \brdrs\brdrw15\brsp20 \brdrbtw\brdrs\brdrw15\brsp20 \f8\fs20\lang1033 \sbasedon14\snext20 table rule;}{\s21\fi-280\li400\sa60\tqr\tx280\tx400 \f8\fs20\lang1033 \sbasedon14\snext21 list number;}{\s22\li120\sb100\sa60 \b\f8\fs20\lang1033 
                     12: \sbasedon15\snext17 see also;}{\s23\li400\sa60 \f8\fs20\lang1033 \sbasedon14\snext23 para indent;}{\s24\fi-1800\li1920\tx1920 \b\f8\fs20\lang1033 \sbasedon15\snext20 table head;}{\s25\fi-1800\li1920\sa60\tx1920 \f8\fs20\lang1033 
                     13: \sbasedon14\snext25 table text;}{\s26\li120\sb120\sa60 \f8\fs20\lang1033 \sbasedon14\snext19 see also 2;}{\s27\li120\sa60\keep\tx520\tx920\tx1320\tx1720\tx2120 \f4\fs20\lang1033 \sbasedon14\snext27 code;}{\s28\sl-120 \f9\fs20\lang1033 \snext16 *spacing;}{
                     14: \s29\sl-120 \f9\fs20\lang1033 \sbasedon28\snext29 s6;}{\s30\qj\li360 \lang1033 \sbasedon0\snext30 Help Text;}}{\info{\author TRIO}{\creatim\yr1992\mo6\dy24\hr16\min51}{\version1}{\edmins256}{\nofpages14}{\nofwords2490}{\nofchars14208}{\vern16504}}
                     15: \paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0 {\*\template C:\\WINAPPS\\WINWORD\\WHAT31.DOT}\sectd \linex0 \pard\plain \keepn \f3\fs20\lang1033 {\fs16\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {
                     16: \fs16\up6 $} Contents}} {\fs16\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs16\up6 #} Contents}} {\fs16\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs16\up6 K} Contents}} \{bmc generic.bmp\} {
                     17: \b\f2\fs32 Contents for Generic Application Help}{\plain \b\f2\lang1033 
                     18: \par }\pard \li120 {\f2 
                     19: \par }{\f2 
                     20: The Windows SDK Generic Application Example is a sample application that you can use to get an idea of how to perform some of the simple functionality that all Applications written for Microsoft Windows should implement. You can use this application as ei
                     21: }{\f2 ther a starting point from which to build your own applications, or for quickly testing out functionality of an interesting Windows API.}{\f2 
                     22: \par }{\f2 
                     23: \par }{\f2 This application is source compatible for with Windows 3.1 and Windows NT.}{\f2 
                     24: \par }{\f2 
                     25: \par }{\f2 Code Fragments with explainations:}{\f2 
                     26: \par }{\f2 
                     27: \par }\pard \fi-1440\li2160\tx2160 {\f2\uldb Global Declarations}{\v\f2 Globals}{\f2 
                     28: \par }{\f2\uldb WinMain}{\v\f2 WinMain}{\f2 \tab }{\f2 : Calls initialization function, processes message loop}{\f2 
                     29: \par }{\f2\uldb InitApplication}{\v\f2 InitApplication}{\f2 \tab }{\f2 :  Initializes window data and registers window}{\f2 
                     30: \par }{\f2\uldb InitInstance}{\v\f2 InitInstance}{\f2 \tab }{\f2 :  Saves instance handle and creates main window}{\f2 
                     31: \par }{\f2\uldb WndProc}{\v\f2 WndProc}{\f2 \tab }{\f2 :  Processes messages}{\f2 
                     32: \par }{\f2\uldb CenterWindow}{\v\f2 CenterWindow}{\f2 \tab }{\f2 :  Used to center the "About" box over application window}{\f2\uldb 
                     33: \par }{\f2\uldb About}{\v\f2 About}{\f2 \tab }{\f2 :  Processes messages for "About" dialog box}{\f2 
                     34: \par }\pard \li115 {\f2 
                     35: \par }{\f2 
                     36: \par }\pard \li115\keepn {\f2 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} Globals}}{\f2  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #} Globals}}{\f2  }{
                     37: \fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} Globals}}{\f2  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K} Globals}}{\f2  }{\plain \b\f2\lang1033 Global Declarations
                     38: }{\f2 
                     39: \par }\pard \li120\sb80\sl-240 {\f7\fs18 #include <windows.h>}\tab {\i\cf2 // required for all Windows applications}
                     40: \par {\f7\fs18 #include "generic.h"}{\f7\fs18 \tab }{\i\fs18\cf2 // specific to this program}{\i\fs18\cf2 
                     41: \par }{\f7\fs18 
                     42: \par }{\f7\fs18 #if !defined (APIENTRY)}{\i\fs18\cf2 \tab }{\i\fs18\cf2 // Windows NT defines APIENTRY, but 3.x doesn't}{\f7\fs18 
                     43: \par }{\f7\fs18 #define APIENTRY far pascal}{\f7\fs18 
                     44: \par }{\f7\fs18 #endif}{\f7\fs18 
                     45: \par }{\f7\fs18 
                     46: \par }{\f7\fs18 #if defined(WIN32)}{\f7\fs18 \tab }{\i\fs18\cf2 // Windows NT uses a WNDPROC for dialogs, 3.x a FARPROC}{\f7\fs18 
                     47: \par }{\f7\fs18 #define DLGPROC WNDPROC}{\f7\fs18 
                     48: \par }{\f7\fs18 #else}{\f7\fs18 
                     49: \par }{\f7\fs18 #define DLGPROC FARPROC}{\f7\fs18 
                     50: \par }{\f7\fs18 #endif}{\f7\fs18 
                     51: \par }{\f7\fs18 
                     52: \par }{\f7\fs18 HANDLE hInst;}{\f7\fs18 \tab }{\i\fs18\cf2 // current instance}{\f7\fs18 
                     53: \par }{\f7\fs18 
                     54: \par }{\f7\fs18 char szAppName[] = "Generic";}{\f7\fs18 \tab }{\i\fs18\cf2 // The name of this application}{\f7\fs18 
                     55: \par }{\f7\fs18 char szTitle[]   = "Generic Sample Application";}{\f7\fs18 \tab }{\i\fs18\cf2 // The title bar text}{\i\fs18\cf2 
                     56: \par }{\f7\fs18 
                     57: \par }\pard \li115\keepn {\f7\fs18 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} WinMain}}{\f7\fs18  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #} WinMain}}{
                     58: \f7\fs18  }{\fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} WinMain}}{\f7\fs18  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K} WinMain}}{\plain \b\f2\lang1033  }
                     59: {\plain \b\f2\lang1033 WinMain Function}{\plain \b\f2\lang1033 
                     60: \par }\pard \fi-1320\li1440\sb80\sl-240\tx1440 {\b\f2 FUNCTION}{\f2 :}{\f2 \tab }{\f2 WinMain(HANDLE, HANDLE, LPSTR, int)}{\f2 
                     61: \par }{\b\f2 PURPOSE}{\f2 :}{\f2 \tab }{\f2 Calls initialization function, processes message loop}{\f2 
                     62: \par }{\b\f2 COMMENTS}{\f2 :}{\f2 \tab }{\f2 
                     63: Windows recognizes this function by name as the initial entry point for the program.  This function calls the application initialization routine, if no other instance of the program is running, and always calls the instance initialization routine.  It the
                     64: }{\f2 
                     65: n executes a message retrieval and dispatch loop that is the top-level control structure for the remainder of execution.  The loop is terminated when a WM_QUIT message is received, at which time this function exits the application instance by returning th
                     66: }{\f2 e }{\f2 value passed by PostQuitMessage().}{\f2 
                     67: \par }\pard \fi-1320\li1440\sb80\sl-240 {\f2 
                     68: \par }\pard \li1440\sb80\sl-240 {\f2 If this function must abort before entering the message loop, it returns the conventional value NULL.}{\f2 
                     69: \par }\pard \li120\sb80\sl-240 {\f2 
                     70: \par }{\f7\fs18 int APIENTRY WinMain(}{\f7\fs18 
                     71: \par }{\f7\fs18     HANDLE hInstance,}{\f7\fs18 
                     72: \par }{\f7\fs18     HANDLE hPrevInstance,}{\f7\fs18 
                     73: \par }{\f7\fs18     LPSTR lpCmdLine,}{\f7\fs18 
                     74: \par }{\f7\fs18     int nCmdShow)}{\f7\fs18 
                     75: \par }{\f7\fs18 \{}{\f7\fs18 
                     76: \par }{\f7\fs18 
                     77: \par }{\f7\fs18     MSG msg;}{\f7\fs18 
                     78: \par }{\f7\fs18 
                     79: \par }{\f7\fs18     if (!hPrevInstance)}{\f7\fs18 \tab }{\f7\fs18 \{}{\f7\fs18 \tab }{\i\fs18\cf2 // Other instances of app running?}{\f7\fs18 
                     80: \par }{\f7\fs18             if (!InitApplication(hInstance)) }{\f7\fs18 \{}{\f7\fs18 \tab }{\i\fs18\cf2 // Initialize shared things}{\f7\fs18 
                     81: \par }{\f7\fs18             return (FALSE);}{\f7\fs18 \tab }{\i\fs18\cf2 // Exits if unable to initialize}{\f7\fs18 
                     82: \par }{\f7\fs18         }{\f7\fs18 \}}{\f7\fs18 
                     83: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18 
                     84: \par }{\f7\fs18 
                     85: \par }{\i\fs18\cf2 // Perform initializations that apply to a specific instance}{\i\fs18\cf2 
                     86: \par }{\f7\fs18 
                     87: \par }{\f7\fs18     if (!InitInstance(hInstance, nCmdShow)) }{\f7\fs18 \{}{\f7\fs18 
                     88: \par }{\f7\fs18         return (FALSE);}{\f7\fs18 
                     89: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18 
                     90: \par }{\f7\fs18 
                     91: \par }{\i\fs18\cf2 // Acquire and dispatch messages until a WM_QUIT message is received.}{\i\fs18\cf2 
                     92: \par }{\f7\fs18 
                     93: \par }{\f7\fs18     while (GetMessage(&msg,}{\f7\fs18 \tab }{\i\fs18\cf2 // message structure}{\f7\fs18 
                     94: \par }{\f7\fs18            NULL,}{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 \tab }{\i\fs18\cf2 // handle of window receiving the message}{\f7\fs18 
                     95: \par }{\f7\fs18            NULL,}{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 \tab }{\i\fs18\cf2 // lowest message to examine}{\f7\fs18 
                     96: \par }{\f7\fs18            NULL))}{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 \tab }{\i\fs18\cf2 // highest message to examine}{\f7\fs18 
                     97: \par }{\f7\fs18     }{\f7\fs18 \{}{\f7\fs18 
                     98: \par }{\f7\fs18         TranslateMessage(&msg);}{\f7\fs18 \tab }{\i\fs18\cf2 // Translates virtual key codes}{\f7\fs18 
                     99: \par }{\f7\fs18         DispatchMessage(&msg);}{\f7\fs18 \tab }{\i\fs18\cf2 // Dispatches message to window}{\f7\fs18 
                    100: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18 
                    101: \par }{\f7\fs18 
                    102: \par }{\f7\fs18 
                    103: \par }{\f7\fs18     return (msg.wParam);}{\f7\fs18 \tab }{\i\fs18\cf2 // Returns the value from PostQuitMessage}{\f7\fs18 
                    104: \par }{\f7\fs18 
                    105: \par }{\f7\fs18     lpCmdLine;}{\f7\fs18 \tab }{\i\fs18\cf2 // This will prevent 'unused formal parameter' warnings}{\f7\fs18 
                    106: \par }\pard \li120 {\f7\fs18 \}}{\f7\fs18 
                    107: \par }{\f7\fs18 
                    108: \par }\pard \li115\keepn {\f7\fs18 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} InitApplication}}{\f7\fs18  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #}
                    109:  InitApplication}}{\f7\fs18  }{\fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} InitApplication}}{\f7\fs18  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K}
                    110:  InitApplication}}{\fs18\up6  }{\plain \b\f2\lang1033 InitApplication Function}{\fs18\up6 
                    111: \par }\pard \fi-1320\li1440\sb80\sl-240\tx1440 {\b\f2 FUNCTION}{\f2 :}{\f2 \tab }{\f2 InitApplication(HANDLE)}{\f2 
                    112: \par }{\b\f2 PURPOSE}{\f2 :}{\f2 \tab }{\f2 Initializes window data and registers window class}{\f2 
                    113: \par }{\b\f2 COMMENTS}{\f2 :}{\f2 \tab }{\f2 This function is called at initialization time only if no other instances of the application are running.  This function performs initialization tasks that can be done once for any number of running instances.}{\f2 
                    114: 
                    115: \par }{\f2 
                    116: \par }\pard \li1440\sb80\sl-240\tx1440 {\f2 
                    117: In this case, we initialize a window class by filling out a data structure of type WNDCLASS and calling the Windows RegisterClass() function.  Since all instances of this application use the same window class, we only need to do this when the first instan
                    118: }{\f2 ce is initialized.}{\f2 
                    119: \par }\pard \li120\sb80\sl-240 {\f7\fs18 
                    120: \par }{\f7\fs18 BOOL InitApplication(H}{\f7\fs18 ANDLE hInstance)}{\f7\fs18 
                    121: \par }{\f7\fs18 \{}{\f7\fs18 
                    122: \par }{\f7\fs18     WNDCLASS  wc;}{\f7\fs18 
                    123: \par }{\f7\fs18 
                    124: \par }{\i\fs18\cf2 // Fill in window class structure with parameters that describe the main window.}{\i\fs18\cf2 
                    125: \par }{\f7\fs18 
                    126: \par }{\f7\fs18     wc.style         = CS_HREDRAW | CS_VREDRAW;}{\f7\fs18 \tab }{\i\fs18\cf2 // Class style(s)}{\i\fs18\cf2 
                    127: \par }{\f7\fs18     wc.lpfnWndProc   = (WNDPROC)WndProc;}{\f7\fs18 \tab }{\i\fs18\cf2 // Window Procedure}{\i\fs18\cf2 
                    128: \par }{\f7\fs18     wc.cbClsExtra    = 0;}{\f7\fs18 \tab }{\i\fs18\cf2 // No per-class extra data.}{\i\fs18\cf2 
                    129: \par }{\f7\fs18     wc.cbWndExtra    = 0;}{\f7\fs18 \tab }{\i\fs18\cf2 // No per-window extra data.}{\i\fs18\cf2 
                    130: \par }{\f7\fs18     wc.hInstance     = hInstance;}{\f7\fs18 \tab }{\i\fs18\cf2 // Owner of this class}{\i\fs18\cf2 
                    131: \par }{\f7\fs18     wc.hIcon         = LoadIcon (hInstance, szAppName); }{\i\fs18\cf2 // Icon name from .RC}{\i\fs18\cf2 
                    132: \par }{\f7\fs18     wc.hCursor       = LoadCursor(NULL, IDC_ARROW);}{\i\fs18\cf2 // Cursor}{\i\fs18\cf2 
                    133: \par }{\f7\fs18     wc.hbrBackground = COLOR_WINDOW+1;}{\f7\fs18 \tab }{\i\fs18\cf2 // Default color}{\i\fs18\cf2 
                    134: \par }{\f7\fs18     wc.lpszMenuName  = szAppName;}{\f7\fs18 \tab }{\i\fs18\cf2 // Menu name from .RC}{\i\fs18\cf2 
                    135: \par }{\f7\fs18     wc.lpszClassName = szAppName;}{\f7\fs18 \tab }{\i\fs18\cf2 // Name to register as}{\i\fs18\cf2 
                    136: \par }{\f7\fs18 
                    137: \par }{\i\fs18\cf2 // Register the window class and return success/failure code.}{\i\fs18\cf2 
                    138: \par }{\f7\fs18     return (RegisterClass(&wc));}{\f7\fs18 
                    139: \par }\pard \li115 {\f7\fs18 \}}{\f7\fs18 
                    140: \par }\pard \li115\keepn {\f7\fs18 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} InitInstance}}{\f7\fs18  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #}
                    141:  InitInstance}}{\f7\fs18  }{\fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} InitInstance}}{\f7\fs18  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K} InitInstance}}
                    142: {\plain \b\f2\lang1033  }{\plain \b\f2\lang1033 InitInstance Function}{\f7\fs18 
                    143: \par }\pard \fi-1320\li1440\sb80\sl-240\tx1440 {\b\f2 FUNCTION}{\f2 :}{\f2 \tab }{\f2 InitInstance(HANDLE, int)}{\f2 
                    144: \par }{\b\f2 PURPOSE}{\f2 :}{\f2 \tab }{\f2 Saves instance handle and creates main window}{\f2 
                    145: \par }{\b\f2 COMMENTS}{\f2 :}{\f2 \tab }{\f2 This function is called at initialization time for every instance of this application.  This function performs initialization tasks that cannot be shared by multiple instances.}{\f2 
                    146: \par }{\f2 
                    147: \par }\pard \li1440\sb80\sl-240\tx1440 {\f2 In this case, we save the instance handle in a static variable and create and display the main program window.}{\f2 
                    148: \par }\pard \li120\sb80\sl-240 {\f7\fs18 
                    149: \par }{\f7\fs18 BOOL InitInstance(}{\f7\fs18 
                    150: \par }{\f7\fs18     HANDLE          hInstance,}{\f7\fs18 
                    151: \par }{\f7\fs18     int             nCmdShow)}{\f7\fs18 
                    152: \par }{\f7\fs18 \{}{\f7\fs18 
                    153: \par }{\f7\fs18     HWND            hWnd;}{\f7\fs18 \tab }{\i\fs18\cf2 // Main window handle.}{\i\fs18\cf2 
                    154: \par }{\f7\fs18 
                    155: \par }{\i\fs18\cf2 // Save the instance handle in static variable, which will be used in}{\i\fs18\cf2 
                    156: \par }{\i\fs18\cf2 // many subsequence calls from this application to Windows.}{\i\fs18\cf2 
                    157: \par }{\f7\fs18 
                    158: \par }{\f7\fs18     hInst = hInstance;}{\f7\fs18 \tab }{\i\fs18\cf2 // Store instance handle in our global variable}{\i\fs18\cf2 
                    159: \par }{\f7\fs18 
                    160: \par }{\i\fs18\cf2 // Create a main window for this application instance.}{\i\fs18\cf2 
                    161: \par }{\f7\fs18 
                    162: \par }{\f7\fs18     hWnd = CreateWindow(}{\f7\fs18 
                    163: \par }{\f7\fs18         szAppName,}{\f7\fs18 \tab }{\f7\fs18 \tab }{\i\fs18\cf2 // See RegisterClass() call.}{\i\fs18\cf2 
                    164: \par }{\f7\fs18         szTitle,   }{\f7\fs18 \tab }{\i\fs18\cf2 // Text for window title bar.}{\i\fs18\cf2 
                    165: \par }{\f7\fs18         WS_OVERLAPPEDWINDOW,}{\f7\fs18 \tab }{\i\fs18\cf2 // Window style.}{\i\fs18\cf2 
                    166: \par }{\f7\fs18         CW_USEDEFAULT, 0, CW_USEDEFAULT, 0,}{\f7\fs18 \tab }{\i\fs18\cf2 // Use default positioning}{\i\fs18\cf2 
                    167: \par }{\f7\fs18         NULL,}{\f7\fs18 \tab }{\i\fs18\cf2 // Overlapped windows have no parent.}{\i\fs18\cf2 
                    168: \par }{\f7\fs18         NULL,}{\f7\fs18 \tab }{\i\fs18\cf2 // Use the window class menu.}{\i\fs18\cf2 
                    169: \par }{\f7\fs18         hInstance,}{\f7\fs18 \tab }{\i\fs18\cf2 // This instance owns this window.}{\i\fs18\cf2 
                    170: \par }{\f7\fs18         NULL}{\f7\fs18 \tab }{\i\fs18\cf2 // We don't use any data in our WM_CREATE}{\i\fs18\cf2 
                    171: \par }{\f7\fs18     );}{\f7\fs18 
                    172: \par }{\f7\fs18 
                    173: \par }{\i\fs18\cf2 // If window could not be created, return "failure"}{\i\fs18\cf2 
                    174: \par }{\f7\fs18     if (!hWnd) }{\f7\fs18 \{}{\f7\fs18 
                    175: \par }{\f7\fs18         return (FALSE);}{\f7\fs18 
                    176: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18 
                    177: \par }{\f7\fs18 
                    178: \par }{\i\fs18\cf2 // Make the window visible; update its client area; and return "success"}{\i\fs18\cf2 
                    179: \par }{\f7\fs18     ShowWindow(hWnd, nCmdShow);}{\f7\fs18 \tab }{\i\fs18\cf2 // Show the window}{\i\fs18\cf2 
                    180: \par }{\f7\fs18     UpdateWindow(hWnd);}{\f7\fs18 \tab }{\i\fs18\cf2 // Sends WM_PAINT message}{\i\fs18\cf2 
                    181: \par }{\f7\fs18 
                    182: \par }{\f7\fs18     return (TRUE);}{\f7\fs18 \tab }{\i\fs18\cf2 // We succeeded}{\i\fs18\cf2 
                    183: \par }{\f7\fs18 
                    184: \par }\pard \li120 {\f7\fs18 \}}{\f7\fs18 
                    185: \par }\pard \li115\keepn {\f7\fs18 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} WndProc}}{\f7\fs18  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #} WndProc}}{
                    186: \f7\fs18  }{\fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} WndProc}}{\f7\fs18  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K} WndProc}}{\f7\fs18  }{\plain 
                    187: \b\f2\lang1033 WndProc Function}{\f7\fs18 
                    188: \par }\pard \li120\sb80\sl-240\tx1440 {\b\f2 FUNCTION}{\f2 :}{\f2 \tab }{\f2 WndProc(HWND, UINT, UINT, LONG)}{\f2 
                    189: \par }{\b\f2 PURPOSE}{\f2 :}{\f2 \tab }{\f2 Processes messages}{\f2 
                    190: \par }{\b\f2 MESSAGES}{\f2 :}{\f2 
                    191: \par }\pard \li1440\sb80\sl-240\tx1440 {\f2 WM_COMMAND    - application menu (About dialog box)}{\f2 
                    192: \par }{\f2 WM_DESTROY    - destroy window}{\f2 
                    193: \par }\pard \li120\sb80\sl-240\tx1440 {\f2 
                    194: \par }\pard \fi-1320\li1440\sb80\sl-240\tx1440 {\b\f2 COMMENTS}{\f2 :}{\f2 \tab }{\f2 
                    195: To process the IDM_ABOUT message, call MakeProcInstance() to get the current instance address of the About() function.  Then call Dialog box which will create the box according to the information in your }{\f2 
                    196: generic.rc file and turn control over to the About() function.  When it returns, free the instance address.}{\f2 
                    197: \par }\pard \li120\sb80\sl-240 {\f7\fs18 
                    198: \par }\pard \li120\tx450\tx720\tx990\tx1260\tx1530\tx1800\tx2070\tx2340\tx2610\tx2880 {\f7\fs18 LONG APIENTRY WndProc(}{\f7\fs18 
                    199: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 HWND hWnd,}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // window handle}{\i\f2\fs18\cf2 
                    200: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 UINT message,}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // type of message}{\i\f2\fs18\cf2 
                    201: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 UINT uParam,}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // additional information}{\i\f2\fs18\cf2 
                    202: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 LONG lParam)}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // additional information}{\i\f2\fs18\cf2 
                    203: \par }{\f7\fs18 \{}{\f7\fs18 
                    204: \par }{\f7\fs18 \tab }{\f7\fs18 FARPROC lpProcAbout;}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // pointer to the "About" function}{\i\f2\fs18\cf2 
                    205: \par }{\f7\fs18 \tab }{\f7\fs18 int wmId, wmEvent;}{\f7\fs18 
                    206: \par }{\f7\fs18 
                    207: \par }{\f7\fs18 \tab }{\f7\fs18 switch (message) }{\f7\fs18 \{}{\f7\fs18 
                    208: \par }{\f7\fs18 
                    209: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 case WM_COMMAND:}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // message: command from application menu}{\i\f2\fs18\cf2 
                    210: \par }{\f7\fs18 
                    211: \par }{\i\f2\fs18\cf2 // Message packing of uParam and lParam have changed for Win32, let us}{\i\f2\fs18\cf2 
                    212: \par }{\i\f2\fs18\cf2 // handle the differences in a conditional compilation:}{\i\f2\fs18\cf2 
                    213: \par }{\f7\fs18 #if defined (WIN32)}{\f7\fs18 
                    214: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 wmId    = LOWORD(uParam);}{\f7\fs18 
                    215: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 wmEvent = HIWORD(uParam);}{\f7\fs18 
                    216: \par }{\f7\fs18 #else}{\f7\fs18 
                    217: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 wmId    = uParam;}{\f7\fs18 
                    218: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 wmEvent = HIWORD(lParam);}{\f7\fs18 
                    219: \par }{\f7\fs18 #endif}{\f7\fs18 
                    220: \par }{\f7\fs18 
                    221: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 switch (wmId) }{\f7\fs18 \{}{\f7\fs18 
                    222: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_ABOUT:}{\f7\fs18 
                    223: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 lpProcAbout = MakeProcInstance((FARPROC)About, hInst);}{\f7\fs18 
                    224: \par }{\f7\fs18 
                    225: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 DialogBox(hInst,}{\f7\fs18 \tab }{\f7\fs18 \tab }{\i\f2\fs18\cf2 // current instance}{\i\f2\fs18\cf2 
                    226: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 "AboutBox",}{\f7\fs18 \tab }{\f7\fs18 \tab }{\i\f2\fs18\cf2 // dlg resource to use}{\i\f2\fs18\cf2 
                    227: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 hWnd,}{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\i\f2\fs18\cf2 // parent handle}{\i\f2\fs18\cf2 
                    228: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 (DLGPROC)lpProcAbout);}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // About() instance address}{\i\f2\fs18\cf2 
                    229: \par }{\f7\fs18 
                    230: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 FreeProcInstance(lpProcAbout);}{\f7\fs18 
                    231: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    232: \par }{\f7\fs18 
                    233: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_EXIT:}{\f7\fs18 
                    234: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 DestroyWindow (hWnd);}{\f7\fs18 
                    235: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    236: \par }{\f7\fs18 
                    237: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_HELPCONTENTS:}{\f7\fs18 
                    238: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 if (!WinHelp (hWnd, "GENERIC.HLP", HELP_KEY, (DWORD)(LPSTR)"CONTENTS")) }{\f7\fs18 \{}{\f7\fs18 
                    239: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 MessageBox (GetFocus(),}{\f7\fs18 
                    240: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab \tab }{\f7\fs18 "Unable to activate help",}{\f7\fs18 
                    241: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab \tab }{\f7\fs18 szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);}{\f7\fs18 
                    242: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 \}}{\f7\fs18 
                    243: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    244: \par }{\f7\fs18 
                    245: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_HELPSEARCH:}{\f7\fs18 
                    246: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 if (!WinHelp(hWnd, "GENERIC.HLP", HELP_PARTIALKEY, (DWORD)(LPSTR)"")) }{\f7\fs18 \{}{\f7\fs18 
                    247: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 MessageBox (GetFocus(),}{\f7\fs18 
                    248: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab \tab }{\f7\fs18 "Unable to activate help",}{\f7\fs18 
                    249: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab \tab }{\f7\fs18 szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);}{\f7\fs18 
                    250: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 \}}{\f7\fs18 
                    251: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    252: \par }{\f7\fs18 
                    253: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_HELPHELP:}{\f7\fs18 
                    254: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 if(!WinHelp(hWnd, (LPSTR)NULL, HELP_HELPONHELP, 0)) }{\f7\fs18 \{}{\f7\fs18 
                    255: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 MessageBox (GetFocus(),}{\f7\fs18 
                    256: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab \tab }{\f7\fs18 "Unable to activate help",}{\f7\fs18 
                    257: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab \tab }{\f7\fs18 szAppName, MB_SYSTEMMODAL|MB_OK|MB_ICONHAND);}{\f7\fs18 
                    258: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 \}}{\f7\fs18 
                    259: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    260: \par }{\f7\fs18 
                    261: \par }{\i\f2\fs18\cf2 // Here are all the other possible menu options,}{\i\f2\fs18\cf2 
                    262: \par }{\i\f2\fs18\cf2 // all of these are currently disabled:}{\i\f2\fs18\cf2 
                    263: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_NEW:}{\f7\fs18 
                    264: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_OPEN:}{\f7\fs18 
                    265: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_SAVE:}{\f7\fs18 
                    266: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_SAVEAS:}{\f7\fs18 
                    267: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_UNDO:}{\f7\fs18 
                    268: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_CUT:}{\f7\fs18 
                    269: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_COPY:}{\f7\fs18 
                    270: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_PASTE:}{\f7\fs18 
                    271: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_LINK:}{\f7\fs18 
                    272: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 case IDM_LINKS:}{\f7\fs18 
                    273: \par }{\f7\fs18 
                    274: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 default:}{\f7\fs18 
                    275: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 return (DefWindowProc(hWnd, message, uParam, lParam));}{\f7\fs18 
                    276: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 \}}{\f7\fs18 
                    277: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    278: \par }{\f7\fs18 
                    279: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 case WM_DESTROY:}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // message: window being destroyed}{\i\f2\fs18\cf2 
                    280: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 PostQuitMessage(0);}{\f7\fs18 
                    281: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    282: \par }{\f7\fs18 
                    283: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 default:}{\f7\fs18 \tab }{\i\f2\fs18\cf2 // Passes it on if unproccessed}{\i\f2\fs18\cf2 
                    284: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 return (DefWindowProc(hWnd, message, uParam, lParam));}{\f7\fs18 
                    285: \par }{\f7\fs18 \tab }{\f7\fs18 \}}{\f7\fs18 
                    286: \par }{\f7\fs18 \tab }{\f7\fs18 return (NULL);}{\f7\fs18 
                    287: \par }{\f7\fs18 \}}{\f7\fs18 
                    288: \par }\pard \li115\keepn {\f7\fs18 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} CenterWindow}}{\f7\fs18  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #}
                    289:  CenterWindow}}{\f7\fs18  }{\fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} CenterWindow}}{\f7\fs18  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K} CenterWindow}}
                    290: {\plain \b\f2\lang1033  }{\plain \b\f2\lang1033 CenterWindow Function}{\f7\fs18 
                    291: \par }\pard \fi-1320\li1440\sb80\sl-240\tx1440 {\b\f2 FUNCTION}{\f2 :}{\f2 \tab }{\f2 CenterWindow (HWND, HWND)}{\f2 
                    292: \par }{\b\f2 PURPOSE}{\f2 :}{\f2 \tab }{\f2 Center one window over another}{\f2 
                    293: \par }{\b\f2 COMMENTS}{\f2 :}{\f2 \tab }{\f2 Dialog boxes take on the screen position that they were designed at, which is not always appropriate. Centering the dialog over a particular window usually results in a better position}{\f2 
                    294: \par }\pard \li120\sb80\sl-240 {\f7\fs18 
                    295: \par }{\f7\fs18 BOOL CenterWindow (HWND hwndChild, HWND hwndParent)}{\f7\fs18 
                    296: \par }{\f7\fs18 \{}{\f7\fs18 
                    297: \par }{\f7\fs18     RECT    rChild, rParent;}{\f7\fs18 
                    298: \par }{\f7\fs18     int     wChild, hChild, wParent, hParent;}{\f7\fs18 
                    299: \par }{\f7\fs18     int     wScreen, hScreen, xNew, yNew;}{\f7\fs18 
                    300: \par }{\f7\fs18     HDC     hdc;}{\f7\fs18 
                    301: \par }{\f7\fs18 
                    302: \par }{\i\fs18\cf2 // Get the Height and Width of the child window}{\i\fs18\cf2 
                    303: \par }{\f7\fs18     GetWindowRect (hwndChild, &rChild);}{\f7\fs18 
                    304: \par }{\f7\fs18     wChild = rChild.right - rChild.left;}{\f7\fs18 
                    305: \par }{\f7\fs18     hChild = rChild.bottom - rChild.top;}{\f7\fs18 
                    306: \par }{\f7\fs18 
                    307: \par }{\i\fs18\cf2 // Get the Height and Width of the parent window}{\i\fs18\cf2 
                    308: \par }{\f7\fs18     GetWindowRect (hwndParent, &rParent);}{\f7\fs18 
                    309: \par }{\f7\fs18     wParent = rParent.right - rParent.left;}{\f7\fs18 
                    310: \par }{\f7\fs18     hParent = rParent.bottom - rParent.top;}{\f7\fs18 
                    311: \par }{\f7\fs18 
                    312: \par }{\i\fs18\cf2 // Get the display limits}{\i\fs18\cf2 
                    313: \par }{\f7\fs18     hdc = GetDC (hwndChild);}{\f7\fs18 
                    314: \par }{\f7\fs18     wScreen = GetDeviceCaps (hdc, HORZRES);}{\f7\fs18 
                    315: \par }{\f7\fs18     hScreen = GetDeviceCaps (hdc, VERTRES);}{\f7\fs18 
                    316: \par }{\f7\fs18     ReleaseDC (hwndChild, hdc);}{\f7\fs18 
                    317: \par }{\f7\fs18 
                    318: \par }{\i\fs18\cf2 // Calculate new X position, then adjust for screen}{\i\fs18\cf2 
                    319: \par }{\f7\fs18     xNew = rParent.left + ((wParent - wChild) /2);}{\f7\fs18 
                    320: \par }{\f7\fs18     if (xNew < 0) }{\f7\fs18 \{}{\f7\fs18 
                    321: \par }{\f7\fs18         xNew = 0;}{\f7\fs18 
                    322: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18  else if ((xNew+wChild) > wScreen) }{\f7\fs18 \{}{\f7\fs18 
                    323: \par }{\f7\fs18         xNew = wScreen - wChild;}{\f7\fs18 
                    324: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18 
                    325: \par }{\f7\fs18 
                    326: \par }{\i\fs18\cf2 // Calculate new Y position, then adjust for screen}{\i\fs18\cf2 
                    327: \par }{\f7\fs18     yNew = rParent.}{\f7\fs18 top  + ((hParent - hChild) /2);}{\f7\fs18 
                    328: \par }{\f7\fs18     if (yNew < 0) }{\f7\fs18 \{}{\f7\fs18 
                    329: \par }{\f7\fs18         yNew = 0;}{\f7\fs18 
                    330: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18  else if ((yNew+hChild) > hScreen) }{\f7\fs18 \{}{\f7\fs18 
                    331: \par }{\f7\fs18         yNew = hScreen - hChild;}{\f7\fs18 
                    332: \par }{\f7\fs18     }{\f7\fs18 \}}{\f7\fs18 
                    333: \par }{\f7\fs18     }{\f7\fs18 
                    334: \par }{\i\cf2 // Set it, and return}{\i\cf2 
                    335: \par }{\f7\fs18     return SetWindowPos (hwndChild, NULL, }{\f7\fs18 
                    336: \par }{\f7\fs18         xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);}{\f7\fs18 
                    337: \par }\pard \li115 {\f7\fs18 \}}{\f7\fs18 \page }{\fs18\up6 ${\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 $} About}}{\f7\fs18  }{\fs18\up6 #{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 #} About}}{
                    338: \f7\fs18  }{\fs18\up6 +{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 +} About}}{\f7\fs18  }{\fs18\up6 K{\footnote \pard\plain \s245\li120\sb80\sl-240 \f3\fs20\lang1033 {\fs18\up6 K} About}}{\plain \b\f2\lang1033  }{\plain 
                    339: \b\f2\lang1033 About Dialog Function}{\f7\fs18 
                    340: \par }\pard \li120\sb80\sl-240 {\b\f2 FUNCTION}{\f2 :}{\f2 \tab }{\f2 About(HWND, unsigned, WORD, LONG)}{\f2 
                    341: \par }{\b\f2 PURPOSE}{\f2 :}{\f2 \tab }{\f2 Processes messages for "About" dialog box}{\f2 
                    342: \par }{\b\f2 MESSAGES}{\f2 :}{\f2 
                    343: \par }\pard \li1440\sb80\sl-240 {\f2 WM_INITDIALOG - initialize dialog box}{\f2 
                    344: \par }{\f2 WM_COMMAND    - Input received}{\f2 
                    345: \par }{\f2 
                    346: \par }\pard \fi-1320\li1440\sb80\sl-240 {\b\f2 COMMENTS}{\f2 :}{\f2 \tab }{\f2 Display program version information based on settings from the Version section in the resource. Wait for user to click on "Ok" button, then close the dialog box.}{\f2 
                    347: \par }\pard \li120\sb80\sl-240 {\f7\fs18 
                    348: \par }{\f7\fs18 
                    349: \par }\pard \li120\sb80\sl-240\tx450\tx720\tx990\tx1260\tx1530\tx1800\tx2070\tx2340\tx2610\tx2880 {\f7\fs18 BOOL APIENTRY About(}{\f7\fs18 
                    350: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 HWND hDlg,}{\f7\fs18 \tab \tab }{\i\fs18\cf2 // window handle of the dialog box}{\f7\fs18 
                    351: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 UINT message,}{\f7\fs18 \tab }{\i\fs18\cf2 // type of message}{\i\fs18\cf2 
                    352: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 UINT uParam,}{\f7\fs18 \tab \tab }{\i\fs18\cf2 // message-specific information}{\i\fs18\cf2 
                    353: \par }{\f7\fs18 \tab }{\f7\fs18 LONG lParam)}{\f7\fs18 
                    354: \par }{\f7\fs18 \{}{\f7\fs18 
                    355: \par }{\f7\fs18 \tab }{\f7\fs18 static  HFONT hfontDlg;}{\f7\fs18 
                    356: \par }{\f7\fs18 \tab }{\f7\fs18 LPSTR   lpVersion;       }{\f7\fs18 
                    357: \par }{\f7\fs18 \tab }{\f7\fs18 DWORD   dwVerInfoSize;}{\f7\fs18 
                    358: \par }{\f7\fs18 \tab }{\f7\fs18 DWORD   dwVerHnd;}{\f7\fs18 
                    359: \par }{\f7\fs18 \tab }{\f7\fs18 WORD    wVersionLen;}{\f7\fs18 
                    360: \par }{\f7\fs18 \tab }{\f7\fs18 WORD    wRootLen;}{\f7\fs18 
                    361: \par }{\f7\fs18 \tab }{\f7\fs18 BOOL    bRetCode;}{\f7\fs18 
                    362: \par }{\f7\fs18 \tab }{\f7\fs18 int     i;}{\f7\fs18 
                    363: \par }{\f7\fs18 \tab }{\f7\fs18 char    szFullPath[256];}{\f7\fs18 
                    364: \par }{\f7\fs18 \tab }{\f7\fs18 char    szResult[256];}{\f7\fs18 
                    365: \par }{\f7\fs18 \tab }{\f7\fs18 char    szGetName[256];}{\f7\fs18 
                    366: \par }{\f7\fs18 
                    367: \par }{\f7\fs18 \tab }{\f7\fs18 switch (message) }{\f7\fs18 \{}{\f7\fs18 
                    368: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 case WM_INITDIALOG:}{\f7\fs18 \tab }{\i\fs18\cf2 // message: initialize dialog box}{\i\fs18\cf2 
                    369: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 hfontDlg = CreateFont(14, 0, 0, 0, 0, 0, 0, 0,}{\f7\fs18 
                    370: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 0, 0, 0, 0,}{\f7\fs18 
                    371: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 VARIABLE_PITCH | FF_SWISS, "");}{\f7\fs18 
                    372: \par }{\f7\fs18 
                    373: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 CenterWindow (hDlg, GetWindow (hDlg, GW_OWNER));}{\f7\fs18 
                    374: \par }{\f7\fs18 
                    375: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 GetModuleFileName (hInst, szFullPath, sizeof(szFullPath));}{\f7\fs18 
                    376: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd);}{\f7\fs18 
                    377: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 if (dwVerInfoSize) }{\f7\fs18 \{}{\f7\fs18 
                    378: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 LPSTR   lpstrVffInfo;}{\f7\fs18 
                    379: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 HANDLE  hMem;}{\f7\fs18 
                    380: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);}{\f7\fs18 
                    381: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 lpstrVffInfo  = GlobalLock(hMem);}{\f7\fs18 
                    382: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpstrVffInfo);}{\f7\fs18 
                    383: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 lstrcpy(szGetName, "}{\f7\fs18 \\}{\f7\fs18 \\}{\f7\fs18 StringFileInfo}{\f7\fs18 \\}{\f7\fs18 \\}{\f7\fs18 040904E4}{\f7\fs18 \\}{\f7\fs18 \\}{\f7\fs18 ");}{\f7\fs18 
                    384: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 wRootLen = lstrlen(szGetName);}{\f7\fs18 
                    385: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 for (i = DLG_VERFIRST; i <= DLG_VERLAST; i++) }{\f7\fs18 \{}{\f7\fs18 
                    386: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 GetDlgItemText(hDlg, i, szResult, sizeof(szResult));}{\f7\fs18 
                    387: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 szGetName[wRootLen] = (char)0;}{\f7\fs18 
                    388: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 lstrcat (szGetName, szResult);}{\f7\fs18 
                    389: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 wVersionLen   = 0;}{\f7\fs18 
                    390: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 lpVersion     = NULL;}{\f7\fs18 
                    391: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 bRetCode      =  VerQueryValue((LPVOID)lpstrVffInfo,}{\f7\fs18 
                    392: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 (LPSTR)szGetName,}{\f7\fs18 
                    393: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 (void FAR* FAR*)&lpVersion,}{\f7\fs18 
                    394: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 (UINT FAR *) &wVersionLen);}{\f7\fs18 
                    395: \par }{\f7\fs18 
                    396: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 if ( bRetCode && wVersionLen && lpVersion) }{\f7\fs18 \{}{\f7\fs18 
                    397: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 lstrcpy(szResult, lpVersion);}{\f7\fs18 
                    398: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 SetDlgItemText(hDlg, i, szResult);}{\f7\fs18 
                    399: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab \tab }{\f7\fs18 SendMessage (GetDlgItem (hDlg, i), WM_SETFONT, (UINT)hfontDlg, TRUE);}{\f7\fs18 
                    400: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab \tab }{\f7\fs18 \}}{\f7\fs18 
                    401: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 \}}{\f7\fs18  }{\i\fs18\cf2 // for (i = DLG_VERFIRST; i <= DLG_VERLAST; i++)}{\i\fs18\cf2 
                    402: \par }{\f7\fs18 
                    403: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 GlobalUnlock(hMem);}{\f7\fs18 
                    404: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 GlobalFree(hMem);}{\f7\fs18 
                    405: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 \}}{\f7\fs18  }{\i\fs18\cf2 // if (dwVerInfoSize)}{\i\fs18\cf2 
                    406: \par }{\f7\fs18 
                    407: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 return (TRUE);}{\f7\fs18 
                    408: \par }{\f7\fs18 
                    409: \par }{\f7\fs18 \tab }{\f7\fs18 \tab }{\f7\fs18 case WM_COMMAND:}{\f7\fs18 \tab \tab }{\f7\fs18 \tab \tab }{\i\fs18\cf2 // message: received a command}{\i\fs18\cf2 
                    410: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 if (LOWORD(uParam) == IDOK}{\f7\fs18 \tab }{\i\fs18\cf2 // "OK" box selected?}{\i\fs18\cf2 
                    411: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 || LOWORD(uParam) == IDCANCEL) }{\f7\fs18 \{}{\f7\fs18 \tab }{\i\fs18\cf2 // System menu close command?}{\i\fs18\cf2 
                    412: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 EndDialog(hDlg, TRUE);}{\f7\fs18 \tab }{\i\fs18\cf2 // Exit the dialog}{\i\fs18\cf2 
                    413: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 DeleteObject (hfontDlg);}{\f7\fs18 
                    414: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab \tab }{\f7\fs18 return (TRUE);}{\f7\fs18 
                    415: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 \}}{\f7\fs18 
                    416: \par }{\f7\fs18 \tab }{\f7\fs18 \tab \tab }{\f7\fs18 break;}{\f7\fs18 
                    417: \par }{\f7\fs18 \tab }{\f7\fs18 \}}{\f7\fs18 
                    418: \par }{\f7\fs18 \tab }{\f7\fs18 return (FALSE);}{\f7\fs18 \tab }{\i\fs18\cf2 // Didn't process the message}{\i\fs18\cf2 
                    419: \par }{\f7\fs18 
                    420: \par }{\f7\fs18 \tab }{\f7\fs18 lParam;}{\f7\fs18 \tab }{\i\fs18\cf2 // This will prevent 'unused formal parameter' warnings}{\i\fs18\cf2 
                    421: \par }\pard \li120\tx450\tx720\tx990\tx1260\tx1530\tx1800\tx2070\tx2340\tx2610\tx2880 {\f7\fs18 \}}{\f2\fs18 
                    422: \par }}

unix.superglobalmegacorp.com

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