      

      

      -        
   .      ,  
         CMNHDR.H, 
   .  ,     
 ,       make- (  ) 
 .   ,       
  ,    ,     . 

      CMNHDR.H 

          CMNHDR.H    
.    (.   . -1),   - 
  .   ,     
,    . ,  - ,    
        - . 
 CMNHDR.H      -,   . 
            CMNHDR.H  , 
         . 

      4 

     ,   ,    
 ,       .  
,        
.           
      .   Microsoft 
C/C++  ,         
 4. 
    ,  Operating Systems  Microsoft     
      4.  ,   
  ,        
   Windows.  ,     
-         -  
   .      
,     . 

    663 

    664 ______________________________Windows   

        CMNHDR.H  #pragma warning    
     . 

     Windows 

           ,  
  Windows NT 4,      _WIN32_WINNT: 

    ffdefine _WIN32_WINNT 00400 

       ,       
 Windows  : 

    #if (_WIN32_WINNT >= 00400) 
    WINBASEAPI 
    BOOL 
    WINAPI 
    TryEnterCriticalSection( 
    LPCRITICAL_SECTION IpCnticalSection 
    ); 
    #endif /* _WIN32_WINNT >= 00400 */ 

         _WIN32_WINNT (   WINDOWS.H), 
  Win32^yHKi]^   ,  ,  
   ,   . Microsoft   
  _WIN32_WINNT,  ,    Windows 
NT,    Windows 95,    ,   
  Windows NT 4. 

     STRICT 

             
,    Windows.  ,  
  HWND      HWND,   
HDC     HDC  . .  STRICT ,  
 , , ,     HDC 
  HWND. 
        ,  STRICT   
    Windows. 

         

             
, ,   ,    . 

    Unicode 

       ,       
  ANSI,   Unicode.     86  
     Windows 95      
ANSI.         Unicode,  
  . 
        Unicode-    &6, 
   ,     UNICODE  
 .   UNICODE   CMNHDR.H,  
    -.   Unicode . 
 17. 

    __________________________ .   665 


     chDIMOF 

       ,      
,     .   :  
/    ,      , 
  . 

     chBEGINTHREADEX 

            \32- 
CreateThread  _beginthreadex    Microsoft .  
  ,  _beginthreadex    ,    
  ,       
,      ( .  4). 
 ,     : 

    unsigned long __cdecl _beginthreadex(void *lpsa, unsigned cbStack, 
    unsigned (__stdcall *) (void *lpStartAddr), void *lpvThreadParm, 
    unsigned fdwCreate. unsigned *lpIDThread); 

       _beginthreadex    
Win32 CreateThread,    .   CreateThread: 

    HANDLE CreateThread(LPSECURITY_ATTRIBUTES Ipsa, DWORD cbStack, 
    LPTHREAD_START_ROUTINE IpStartAddr, LPVOID IpvThreadParm, 
    DWORD fdwCreate, LPDWORD IpIDThread); 

      \32-       
,      Microsoft   
     Operating Systems.  
,       _beginthreadex  ,  
     STRICT. 
     ,  Microsoft   _beginthreadex,    
. ,   ,   ,  
   ,   CreateThread. ,  Win32 
  DWORD  : 

    typedef unsigned long DWORD; 

          cbStack  fdwCreate  
CreateThread.    _beginthreadex     
unsigned,     unsigned int.    unsigned 
int  unsigned long    .  _beginthreadex 
           
Win32^yHKHHH CreateThread,  ,  Microsoft    
 _beginthreadex ,    : 

    unsigned long __cdecl _beginthreadex(void *lpsa, 
    unsigned long cbStack, 
    unsigned (__stdcall *) (void IpStartAddr), void IpvThreadParm, 
    unsigned long fdwCreate, unsigned long *lpIDThread): 

        .  _beginthreadex  
  unsigned long      .  
       HANDLE: 

    HANDLE hThread = _beginthreadex(...); 

         ,    
  STRICT.    ,   
    : 

    HANDLE hThread = (HANDLE) _beginthreadex(...): 


    666 ______________________________Windows   

    , , .      ,   
  CMNHDR.H  chBEGINTHREADEX,     . 

     chASSERT  chVERIFY 

          ,    
   chASSERT.   ,    , ,  
,     ,   ,   
 .     chASSERT   
 .  chVERIFY     
 ,       ,    
 . 

     chHANDLE_DLGMSG 

           ,  
   HANDLE_MSG    WINDOWSX.H.   , 
    TRUE  FALSE    ,  
     . 
     ,  ,        
 ,   HANDLE_MSG.   ,  
  .      ,   
    chHANDLE_DLGMSG. 

     chMB 

        ,     
     . 

     chlNITSTRUCT 

        CMNHDR.H    .    
!   Win32,    -  
,          
.   ,         
.     \32-     
  ( !)  - . 
     chlNITSTRUCT       
.     ,       
  ,      TRUE,   
  . 

     chSETDLGICONS 

            ,  
   ,        
,     ,      . 
 chSETDLGICONS    ,     
 WM_INITDIALOG,     . 

     chWARNIFUNICODEUNDERWIN95 

    Windows 95   Unicode   ,  Windows NT,  
 ,  Unicode-,      
!  , Windows 95     , 
 Unicode. 

    __________________________ .   667 

          ,     
  .      chWARNIFUNICODEUNDERWIN95, 
  ,      Windows 95 , 
  Unicode. 

      Pragma Message 

      ,  -  ,    , 
   ,       .  , 
,          (,  
    ),      : 
     message("Fix this later") 

      ,    , ,  
      . ,      .  
  ,          ,  
  .      ,  -   
,          . 
           .      
chMSG,  : 

    #pragma chMSG(Fix this later) 

       ,   - : 

    C;\Document\AdvWin\Code\Sysinro.06\..\CmnHdr.H(296):Fix this later 

    ,   Visual C++,        
,    ,       . 
           chMSG     
  . 

      

      ,      ,    
make-     ,    
.   , ,    Project Settings  Visual 
C++      STRICT, UNICODE  _UNICODE,   
    make-  .    -  
  make-,       - ,   
     . 
     ,      .  DLL  
  .        DLL  
make-,     - ; DLL, ,  
,       DLL,  ,  
 .     ,   ,     - 
,      . 
    ,          ,    
,      make-  ,   
 .   Visual C++ 4.0,    
    ,     pragma comment. 
, : 
    
    //     Shared 
    //     ,    
    ftpragma co(nment(linker, "/sectioh :Shared, rws") 

           , 
   .   ,  
,    

    668 _____________________________Windows   

      , ,  ,   ,     
  .   . 

    CMNHDR.H 
    ; CmnHdr.H 
    : Copyright  1995-1997,   (Jeffrey Richter) 
    ;   ,    
     ,       . 
    /*   ,    */ 
    /*      4         */ 
    /   -   */ 
    ffpragma warning(disable: 4001) 
    //   -     
    #pragma warning(disable: 4201) 
    //   -   ,   int 
    ffpragma warning(disable: 4214) 
    // :     
    #pragma warning(disable: 4699) 
    //  ,    ,  
    Spragma warning(disable: 4514) 
    //    
    #pragma warning(disable: 4100) 
    // ""    " "   
    //      
    ffpragma warning(disable: 4057) 
    //      
    ftpragma warning(disaole: 4115) 
    //   -   typedef 
    ftpragma warning(dlsable: 4209) 
    //////  Windows ///// //////// /////////// //////// 
    Sdefine _WIN32_WINNT 00400 

    . -1.   CMNHDR.H 

    _________________________ .   669 


    . -1   () 

    11111111111/11111/111/1111111  STRICT ////////////////////////////// 
    //     DLL     
    ftdefine STRICT 
    111111111/111/111      ///////////////// 
    //     ,    
    //    
    #if !defined(_PPC_) && !deflned(_ALPHA_) && 'defined (MIPS)\ 
    && !defined(_X86_) 
    #if defined (_M_IX86) 
    ftdefine _X86_ 
    ftendif 
    #if defined (_M_MRXOOO) 
    ftdefine _MIPS_ 
    #endif 
    ffif defined (_M_ALPHA) 
    ftdefine _ALPHA_ 
    ftendif 
    #if defined (_M_PPC) 
    ftdefine _PPC_ 
    ftendif 
    ftendif 
    11111111111111111/1111/1111111   Unicode I I I I I / I / I I I//I 
    II      86,    Unicode 
    flifndef _X86 
    ftdefine UNICODE 
    #endif 
    //    Unicode  8,    
    //ftdefine UNICODE 
    //   Unicode- 132-,    Unicode- 
    //     
    ftifdef UNICODE 
    ftdefine _UNICODE 
    #endif 
    1111111111111111/11111111111111  chDIMOF I I I I I I i I I I I  I / 
    I /        
    Mefine chDIMOF(Array) (sizeof(Array[0])) 

    . . . 

    670 ______________________________Windows   


    . -1   () 

    ///////////////////////////  chBEGINTHREADEX //////////////////////////// 
    //  chBEGINTHREADEX    _beginthreadex. 
    //   ,       Win32, , 
    // HANDEE.  , ,   Win32,   
    //     HANDLE.   ,    
    //  ,   . 
    typedef unsigned (__stdcall *PTHREAD_START) (void *); 
    ffdefine chBEGINTHREADEX(lpsa,cbStack,IpStartAddr, \ 
    IpvThreadParm, fdwCreate, IpIDTheread)     \ 
    ((HANDLE)_beginthereadex(              \ 
    (void *) (Ipsa),                    \ 
    (unsigned) (cbStack),               \ 
    (PTHREAD_START) (IpStartAddr),      \ 
    (void *) (IpvThreadParm),           \ 
    (unsigned) (fdwCreate),             \ 
    (unsigned *) (IpIDThread))) 
    ////////////////////////////  Assert/Verify //////////////////////////// 
    #define chFAIL(szMSG) {                                          \ 
    MessageBox(GetActiveWindow(), szMSG,                       \ 
    __TEXT("Assertion Failed"),MB J)K : MB_ICONERROR);       \ 
    DebugBreak():                                              \ 
    //  ,      
    ffdefine chASSERTFAIL(file,line,expr) {                           \ 
    TCHAR sz[128];                                             \ 
    wsprintf(sz, __TEXT("File %d : %hs"), file, line, expr);   \ 
    chFAIL(sz);                                                \ 
    \ 
    //  ,       
    #lfdef _DEBUG 
    ftdefine chASSERT(x) if (!(x))\ 
    chASSERTFAIL(__FILE__, __LINE__, #x) 
    ftelse 
    ftdefine chASSERT(x) 
    #endif 
    //      , 
    //       
    #ifdef _DEBUG 
    ftdefine chVERIFY(x) chASSERT(x) 
    #else 
    ffdefine chVERIFY(x) (x) 
    ffendif 

    . . . 

    __________________________ .    671 


    . -1   () 

    ////////////////////////////  cnHANDLE_DLGMSG I / 1 I I / I I I I i 
    //   HANDLE_MSG  WINDOWSX.H     
    // ,    DIgProc  BOOL  LRESULT 
    // (   WndProc).  chHANDLE_DLGMSG  . 
    #define chHANDLE_DLGMSG(hwnd, message, fn)                       \ 
    case (message); return (SetDlgMsgResult(hwnd, uMsg,           \ 
    HANDLE_##message((hwnd), (wParam), (IParam), (fn)))) 
    1111111111111111111      //////////////////// 
    ftdefine chMB(s) {                                                 \ 
    TCHAR szTMP[128];                                          \ 
    GetModuleName(NULL, szTMP, chDIMOF(szTMP)):                \ 
    MassegeBox(GetActiveWindow(), s, szTMP, MB_OK);            \ 
    } 
    ///////////////////    ////////////////////// 
    II   .  fInitSize  TRUE.   
    //    Int  .  ,  
    // WNDCLASSEX  STARTUPINFO, ,      , 
    ffdefine chINITSTRUCT(structure, fInitSize)                       \ 
    (ZeroMemory(&(structure), sizeof(structure)),                 \ 
    fInitSize? (*(int*) &(structure) = sizeof(structure)) : 0) 
    //////////////////       ////////////////// 
    /I  SetClassLong   Windows NT 3.51    , 
    //  WM_SETICON   Windows NT 4.0  Windows 95. 
    ftdefine chSETDLGICONS(hwnd, idiLarge, idiSmall)                  \ 
    {                                                             \ 
    OSVERSIONINFO Verlnfo;                                     \ 
    chINITSTRUCT(VerInfo.TRUE);                                \ 
    GetVersionEx(&VerInfo);                                    \ 
    if ((Verlnfo.dwPlatformId == VER_PLATFORM_WIN32_NT) &&     \ 
    (Verlnfo.dwMajorVertion <= 3 &&                       \ 
    Verlnfo.dwMajorVertion <= 51)) {                     \ 
    SetClassLong(hwnd,GCL_HICON, (LONG)                    \ 
    LoadIcon(GetWindowInstance(hwnd),                     \ 
    MAKEINTRESOURCE(idilarge)));                      \ 
    } else {                                                   \ 
    SendMessage(hwnd, WM_SETICON, TRUE, (LPARAM)           \ 
    LoadIcon(GetWindowInstance(hwnd),                     \ 
    MAKEINTRESOURCE(idiSmall)));                      \ 

    672    .___________________________Windows   


    . -1   () 

    ///////////////////////////   UNICODE /////////////////////////////// 
    (tifdef UNICODE 
    Sdeflne chWARNIFUNICODEUNDERWIN95()                              \ 
    if (GetWindowsDirectoryW(NUEE,0) <=0)                         \ 
    MassegeBoxA(NUEE,                                          \ 
    "This operating system doesn't support Unicode.".       \ 
    NUEL. MB_OK) 
    #else 
    Sdefine chWARNIFUNICODEUNDERWIN95() 
    #endif 
    ////////////////   Pragma message //////////////////// 

        : 

    #pragma chMSG(Fix this later) 

       : 

    C:\Document\AdvWin\Code\Sysinro.06\..\CmnHdr.H(296):Flx this later 

                

    #/ 
    ftdefine chSTR(x)        
    ffdefine ch8TR2(x)      chSTR(x) 
    #define chMSG(desc)                                             \ 
    message(_FIEE__"(" chSTR2(__LINE_J"): "(tdesc) 
    ////////////////////   //////////////////////////

 
     ,        

    ,  ,  ,  ,    
 Output Directories.  , Visual C++  - 
     .     
,  DLL ( ,    ),  
Output Directories   ,   -  DLL- 
   . 