         Windows 

      1    ,  ,   MFC,  
 Windows    ,    
.      Windows  
  API-      
   .   MFC   , 
        
 ,    .   MFC- 
        Windows.   
  ,    ,   
    MFC-.     
    .  ,  
      Windows,   
 ,     WinMain(). 

    481 

             Windows, 
        . 
       MFC-,       
 ,  Windows-    
   Windows. ,    , 
    Windows 95.    
     Windows,  Windows 3.1  
Windows NT. 
    :          
"    C++  Windows 95" ("Windows 95 Programming in  and 
C++"). ,       
Windows,    . 

      Windows- 

         Windows 95   
  ,     Windows-.    
        MFC.    
      . 

     WinMainQ 

     Windows-      WinMainQ. ( 
, Windows-   4) main().)     
,     ,   .  
,      WINAPI,   
 ). (    APIENTRY, ,  
,    .)  ,     C++,  
     ,    . 
       . , 
     ,    Pascal.  
   Windows 95   WinMainQ    
WINAPI.       int. 

      

     Windows-    ,   
   ,    .  
    ,   .   
Windows,       .   
      .   
    .  Windows 95     
  LRESULT CALLBACK.  LRESULT    
typedef         (long 
int).  CALLBACK,    ,   
 ,     Windows 95.   
Windows      . 

    482                                    MFC:   

        Windows,     
 ,   . ,     
 switch,        
. ,       ,  
Windows.     ,      
  ,     Windows 
 ,   . 
     Windows 95    32-  
.  ,       . 

      

     Windows-   ,     
  . (  ""    
 C++. ,     .)    
 Windows,          .  
           .  
    . 

      

      , Windows   ,   
.   Windows      
   WinMain().      
          
   Windows,        
    .     
    , ,   ,   
  Windows-. (     
   Windows,      
    ,   ,  
  ,  .) 

       Windows 

     , , ,  Windows-    
       C++,   int  char*. 
    ,    typedef- 
  WINDOWS.H    .     
Microsoft (    ,    C/C++  
Windows)       Windows-.   
   HANDLE, HWND, BYTE, WORD, DWORD, UINT, LONG, 
BOOL, LPSTR  LPCSTR.  32-  Windows ( Windows 95)  
HANDLE  32- ,    . 
    ,       ,   
HANDLE,     H.     ,  
 . ,  HWND  32-   
 .  BYTE  8-   
,  WORD  

    .      Windows        483 

    16-   ,  DWORD    
,  UINT   32- .  LONG   
long.  BOOL    ,      
,  .  LPSTR    , a LPCSTR 
 (const)   . 
      ,  ,  Windows 95  
 .       : MSG  
WNDCLASSEX.  MSG    ,  Windows. 
 WNDCLASSEX   .     
 . 

       Windows 95 

    ,    ,    
Windows-.   ,    Windows 95.  
            
Windows.    Windows     
,   Windows- " "   . 
  MFC-     ,   
       50 
.          . 
       Windows 95   : WinMain()  
 .  WinMain()     : 
    1.   . 
    2.     Windows 95. 
    3.  ,   . 
    4.   . 
    5.   . 
           .  
      ,    
,   ,    ,  
   . 
         .    
   .      , 
,   ,    , , 
  .  ,      
,   .    C++    
       C/C++,  
    Windows 95. 

    /*    Windows 95 */ 
    ftinclude <windows.h> 
    LRESULT CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM); 


    484                                    MFC:   


    char szWinName[] = "MyWin"; /*    */ 
    int WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInst, 
    LPSTR IpszArgs, int nWinMode) I 
    HWND hwnd; 
    MSG msg; 
    WNDCLASSEX wcl; 
    /*   */ 
    wcl.hinstance = hThisInst; /*    */ 
    wcl.IpszClassName = szWinName; /*    */ 
    wcl. IpfnWndProc = WindowFunc; /* - */ 
    wcl.style = 0; /*    */ 
    
    wcl.cbSize = sizeof(WNDCLASSEX); /*   */ 
    /* WNDCLASSEX */ 
    
    wcl.hlcon = LoadIcon(NULL, IDI_APPLICATION); /*  */ 
    
    /*  */ 
    wcl.hIconSm = LoadIcon(NULL, IDI_WINLOGO); /*  */ 
    
    /*  */ 
    
    wcl.hCursor = LoadCursor(NULL, IDC_ARROW); /*   */ 
    wcl.IpszMenuName = NULL; /*    */ 
    
    wcl.cbClsExtra = 0; /*    */ 
    wcl.cbMndExtra = 0; 
    
    /*     */ 
    wcl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); 
    
    /*    */ 
    ;     if(IRegisterClassEx(&wcl)) return 0; 
    /*   */ 
    hwnd = CreateWindow ( 
    szWinName, /*    */ 
    "Windows 95 Skeleton", /*  */ 
    WS OVERLAPPEDWINDOW, /*   */ 
    CW_USEDEFAULT, /*  X -  Windows */ 
    CW_USEDEFAULT, /*  Y   Windows */ 
    CW_USEDEFAULT, /*  -  Windows */ 
    CW USEDEFAULT, /*    Windows */ 
    HWND_DESKTOP, /*    */ 
    NULL, /*   */ 
    hThisInst, /*     */ 
    NULL, /*    */ 
    ); 
    
    /*   */ 
    ShowWindow(hwnd, nWinMode); 
    UpdateWindow(hwnd) ; 


    .      Windows        485 


    /*   */ 
    while(GetMessaqe(&msg, NULL, , )) 
    ( 
    
    TranslateMessage(&msg); /*   */ 
    /*  */ 
    
    DispatchMessage(&msg); /*   Windows */ 
    ) 
    return msg.wParam; 
    
    /*    Windows 95,    */ 
    /*     */ 
    LRESULT CALLBACK WindowFunc(HWND hwnd, UINT message, 
    
    WPARAM wParam, LPARAM IParam) 
    ( 
    
    switch(message) { 
    
    case WM_DESTROY: /*   */ 
    PostQuitMessage(0) ; 
    
    break; 
    
    default: 
    
    
    /*  Windows 95   , */ 
    /*      */ 
    return DefWindowProc (hwnd, message, wParam, IParam); 
    
    ) 
    return 0; 
    
    } 
    
         . A.I.    
 . 
    
    ! Windows 95 Skeleton 

    . . I.    


    486 MFC:   

     ,   Windows 95,    
 WINDOWS.H.   ,   (    
 )   API-,    
  ,   ,   Windows 95. 
,  HWND  WNDCLASSEX     WINDOWS.H. 
     ,   ,  WindowFunc().  
  4:>  ,   Windows 95  
  . 
          WinMainQ,  
  .  hThisInst  hPrevInst  
.       . 
,  Windows    ,   
         
.  hPrevInst   NULL. ( Windows 3.1   
   ,        
 .   Windows 95    .) 
 IpszArgs    ,   
 ,    .  nWinMode 
 , ,       
  . 
      WinMainQ   .   , hwnd,  
   .   msg   
   ,   wcl   
  . 

       

      ,    WinMainQ,    
    .       
  WNDCLASSEX.     : 

    UINT cbSize; /*   WNDCLASSEX */ 
    UINT style; /*   */ 
    WNDPROC IpfnMndProc; /*    */ 
    int cbClsExtra; /*     */ 
    int cbWndExtra; /*     */ 
    HINSTANCE hinstance; /*     */ 
    HICON ; /*    */ 
    HICON hIconSm; /*    */ 
    HCURSOR hCursor; /*    */ 
    HBRUSH hbrBackground; /*   */ 
    LPCSTR IpszMenuName; /*    */ 
    LPCSTR IpszClassName; /*    */ 

       ,    cbSize    
WNDCLASSEX.   hinstance     
,    hThisInst.  IpszClassName  
    ,       "MyWin". 
      IpfnWndProc. 

    .      Windows        487 

      Windows      ,  
  .      
   ,      ,   
   .        
      WNDCLASSEX.    
 . 
     Windows 95     :   .  
    ,      
.       
  (   )   .   
   3232 ,     1616 . 
     API- LoadIconQ,   
 : 

    HICON Loadlcon(HINSTANCE hinst, LPCSTR IpszName); 

        .   hinsi 
  ,   ,     
 IpszName.       
  NULL,         
 (. A.I): 
    
     . 1.   Windov/s 95 

                     
    
    IDI_APPLICATION         
    IDI_ASTERISK             "I" 
    IDI_EXCLAMATION         
    IDI_HAND                "Stop" 
    IDI_QUESTION             
    IDI_WINLOGO            Windows 95 
    
             
IDl_APPLICATION,        IDI_WINLOGO. 
    . 
         API- LoadCiirsorQ,  
 : 

    HCURSOR LoadCursor(HINSTANCE hinst, LPCSTR IpszName); 

        .   hinst  
 ,    ,     
 IpszName.       
  NULL,         
 .        
 (. .2): 

    488                                    MFC:   

     . 2.     Windows 95 

                  

    IDC_ARROW            "" 
    IDC_CROSS            
    IDC_IBEAM            
    IDC_WAIT              

      ,   ,  ,   
     API- GetStockObject().  
 ,       
       , 
     .  GetStockObject() 
       
,  ,  (   )  . 
   : 

    HGDIOBJ GetStockObject(int object); 

        ,   object. 
( HGDIOBJ   GDI-.)    
  (. .): 

     ..    

                  

    BLACK_BRUSH       
    DKGRAY_BRUSH     - 
    HOLLOW_BRUSH     "" 
    LTGRAY_BRUSH     - 
    WHITE_BRUSH____________________________________ 

            GetStockObject(). 
        ,     
Windows 95   API- RegisterClassExQ,   : 

    ATOM RegisterClassEx(CONST WNDCLASSEX *IpWClass}; 

       ,   .  ATOM 
   typedef-    WORD.  
     .  lp WClass 
     WNDCLASSEX. 

    .      Windows        489 


      

         ,    
    API- CreateWindowQ,    : 

    HWND CreateWindow( 
    LPCSTR IpszClassName, /*    */ 
    LPCSTR IpszWinName, /*   */ 
    DWORD dwStyle, /*   */ 
    int X, int Y, I*     */ 
    int Width, int Height, /*   */ 
    HWND hParent, I*    */ 
    HMENU hMenu, /*    */ 
    HINSTANCE hThisInsk, /*  ,  */ 
    LPVOID IpszAdditional /*    */ 
    /*  */ 
    ) ; 

       ,       
      NULL. ,   X, Y, 
Width  Height     CW_USEDEFAULT,  
  ,  Windows 95        
  .      ,    
,    hParent    HWND_DESKTOP ( 
NULL).      ,   hMenu   
NULL.          ( 
    ),   Ips^Additional    
NULL. ( LPVOID    typedef-  void *. 
,  LPVOID     void.) 
          .   , 
Ips^ClassName,      . (    
  .)     ,   
  Ips^WinName.      ,    
 .  ( )     
 dwStyle.  WS_OVERLAPPEDWINDOW   , 
    , ,  ,   
.      ,    
   .       
    .    
   . .4. 

     .4.    

                   

    WS_OVERLAPPED             
    WS_MAXIMIZEBOX          
    WS_MINIMIZEBOX          
    WS_SYSMENU              
    WS_HSCROLL                
    WS_VSCROLL__________       __ ___ 


    490                                    MFC:   

     hThislnst      
.  CreateWindow()      
NULL,      . 
      ,      .    
 API- ShowWindowQ,    : 

    BOOL ShowWindow(HWND hund, int nHou) ; 

          hwnd.  
   nHow.       
     nWinMode  WinMain(). 
,          
.          
      .    
   nHow (. .5): 

     .5.   

            

    SW_HIDE                    
    SW_MAXIMIZE                  
    SW_MINIMIZE                 
    SW_RESTORE                   

     ShowWindowQ     .  
   ,   ,     
  . 
              
  UpdateWindowQ,     ,   
       Windows 95. 
,   Windows 95     
 WM_PAINT. 

      

       WinMainQ   .   
    Windows      
 ,  Windows 95.   ,  
  .       
  ,      .  ,   
   ,    API- 
GetMessageQ,    : 

    BOOL GetMessage(LPMSG msg, HWND hwnd, UINT min, UINT max} ; 

    ,   ,    ,   
  msg.  ,  ,    
  MSG,    : 

    .      Windows        491 


    /*   */ 
    typedef struct tagMSG 
    ( 
    HWND hwnd; /*  ,    */ 
    UINT message; /*   */ 
    WPARAM wParam; /* ,    */ 
    LPARAM IPararn; /*   */ 
    DWORD time; /* ,     */ 
    POINT pt; /*    */ 
    ) MSG; 

     ,   ,    hwnd.  
Windows 95    32- ,   
 message.  ,   ,   
 wParam  IParani.  WPARAM    typedef-  
UINT,   LPARAM -  LONG. 
    ,    ,      time. 
  pt        . 
     POINT,    : 

    typedef struct tagPOINT 
    ( 
    LONG x,y; 
    } POINT; 

        ,    GetMessageQ 
    Windows. 
     hwnd  GetMessageQ ,     
 .     ,  ,  
     .     
  ,       
 NULL. 
        GetMessageQ   
  .  ,    
.     min  wax    , 
     . 
     GetMessageQ  ,      
,     .    
  . 
         .      API- 
TranslateMessage().     ,  
Windows 95,   .   4:>    
   ,       
     . 
        ,      
 Windows   API- DispatchMessage(). Windows    
   ,         
  . 

    492                                    MFC:   

       ,  WinMain()    
,  Windows 95   msg.wParam.    
 ,    . 

      

     ,   ,    .   
   WindowFunc(),      . 
         
 MSG.        . 
              
WM_DESTROY,  ,      
.        
API- PostQuitMessageQ.      , 
   msg.wParam   WinMain().    
PostQuitMessage()    WM_QUIT,    
GetMessageQ      . 
      ,   WindowFunc(),   
 DefWindowProc()   Windows,   
    .   ,   
      . 

       MFC- 

    ,  , ,       
 MFC-. ,      
  API- LoadIconQ.   MFC     
 CWinApp::LoadIcon().   ,   
MFC-       .    
,   Windows-      
.   MFC      
.        ,   
,     .     ,  
         
.      ,    
       .  
  ,     ,  
  Windows,    MFC.   
     ,   ,  
  MFC. 

    .      Windows        493