Annotation of mstools/samples/generic/generic.rtf, revision 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.