       

             ,  
   Windows,    .   
     ,  
   Windows. ,   Windows 95,  
   ,    , 
     Windows NT  Win32s 1.3.   
 ,      . 
        
Windows,     .     
  MFC,    4. 

    237 

         (. 10.1): 

     10.1.    

                              

      (Animation control)	 ,   
 AVI-. 
     (Header control)	  . 
      (Hot key control)	 ,   
    . 
      (Image list)	  . 
      (List view control)	      
 . 
      (Progress bar)	 ,  
   . 
      (Property sheet)	       
.      (wizards). 
       (Rich edit control)	    
 . 
     ()  (Status bar,  Status window)	,   
  ,   . 
     (Tab control)	,    . 
      (Toolbar)	,     
    . 
      (Tooltip)	    . 
      . 
    
    ,    (Trackbar,  Slider control) 
  (Tree view control),     (Up/down 
control,  Spin control)	,  .    
 , ,    ,      
.,      
.,      ,  
  .    ,     
 . 
       ,     
 ,   .   
   (   )  ,     
 . Windows,                                                            

    238                                    MFC:   j 

             
    .      
   . (     
    .) 

          

               
   AFXCMN.H.   ,  
        
( COMCTL32.LIB).  ,     
MFC-,       -. 
     ,    -   , 
       API- 
InitCommonControls().  ,     
 (DLL)       . 
   : 

    void InitCommonControls() ; 

            , 
     . 
         ,   ,   
     ,    
  .      
 ,      . 

       

          , 
,  . ,  ,  ,    
        . 
        , 
, ,     .  MFC 
    CToolBarCtrl. 

    :         
 CToolBar.        
CToolBarCtrl,      . 

             
CToolBarCtrl,     CreateQ.   : 
    BOOL CToolBarCtrl::Create(DWORD duStyle, const RECT &SizePos, CWnd *0wner, 
UINT ID} ; 

    10.                                      239 

         dwStyle.   
   WS_CHILD.      
 ,   WS_BORDER  WS_VISIBLE.  ,   
 ,     .    
TBSTYLE_TOOLTIPS.        
. (    .)    
TBSTYLE_WRAPABLE.    ,     
      .   
  ,      (. 10.2): 

     10.2.    

    	 

    CCSADJUSTABLE	     
     
    CCSBOTTOM	     
      
    CCSNODIVIDER	       
  
    CCSJMOHILITE	       
     
    CCSNOMOVEY	       
     
    CCSNORESIZE	      
    CCSTOP	      ( 
  ) 

       SizePos .     | 
CCS_NORESIZE        
   ,    SizePos.   
 |     ,    
    . 
            Owner. 
      ID.  CreateQ 
           . 
     ,     CreateQ,  
      .    
   . -,     
 . -,         
.  ,        
 ,    ,      
,        . 

    240                                     MFC:   


         

            
AddButtoiisQ,    : 

    BOOL CToolBarCtrl::AddButtons(int Num, LPTBBUTTON IpButtons}; 

      Num   ,     
 .  IpButtons      
 TBBUTTON,   .    
         . 
      TBBUTTON,   ,    
 IpButtons,     .  ,  
    .  TBBUTTON 
  : 

    typedef struct _TBBUTTON ( 
    int iBitmap; 
    int idCommand; 
    BYTE fsState 
    BYTE fsStyle 
    DWORD dwData 
    int iString; 
    } TBBUTTON; 

      iBitmap   ,   . 
      ,      . 
         idCommand.     
     WM_COMMAND,    
  .      , 
   . 
          fsState.    
 -    (  ) (. 10.3): 

     10.3.   fsState 

    TBSTATECHECKED TBSTATEENABLE TBSTATEHIDDEN TBSTATEJNDETERMINATE 
TBSTATEPRESSED TBSTATEWRAP	      
            
  ,   ,      
         fsStyle.     
    (. 10.4): 

    10  "                                    241 


     10.4.   

     

TBSTYLEBUTTON 
TBSTYLECHECK
TBSTYLECHECKGROUP 
TBSTYLEGROUP 
TBSTYLESEP	

 
      ,  ,  
   ( )
 ,    ,      
   
 ,    ,     
    - (     
idConiniand   ) 

        TBSTYLE_SEP.      
       .  
     . 
      dwData  ,  .  
iString     ,   . 
     ,    . 

        

         ,     
  .     
AddBitrnap0>   : 

    int CToolBarCtrl::AddBitmap(int Num, UINT BitmapID) ; 

      Num    .  
 Bitmap JD     ,  
   .     ,  
          
 CBitniap.        .  
     -1   . 
           . 
          
(   7).       
1615 (..  16    15 ).     
   (2422). 
      :         
,        .  
,     ,   ,    
,     . ,   
     1615     ,   
    9615. 

    242                                     MFC:   

            . 
      1615.  ,  
     8015 (. 10.1).   
  TOOLBAR.BMP.      
         . 

    . 10.1.       


        

       ,    
    .      
,        .  
   ,       
   .     . 
           
 AutoSizeQ,   : 

    void CToolBarCtrl::AutoSize(); 

           
    . 
            
,  - ,    .  
,    .       
    WM_SIZE.       
   ,     
 Windows.   ,   , 
       .  WMJSIZE 
   OnSizeQ,   : 

    afx msq void OnSize(UINT What, int Width, int Height); 

              
,      .   
   ,       : 
      Width  Height      ; 
      What   ,     
  . 

    10.                                       243 

     What       (. 10.5): 

     10.5.   What 

      

    SIZE_RESTORED     
    SIZE_MAXIMIZED       
    SIZE_MINIM1ZED    
    SIZE_MAXH1DE        
    SIZE_MAXSHOW     

      ,     WM_PAINT    
   ,      
-  .       
      AutoSizeQ. 

       CToolBarCtrl 

          
.    CToolBarCtrl    , 
     . 
       (/)      
PressBiittonQ.   : 

    BOOL CToolBarCtrl::PressButton(int ID, BOOL Pressed =TRUE); 

      ID   .   Pressed 
  ,    ,      
.         
    . 
        CheckButtonQ,   : 

    BOOL CToolBarCtrl::CheckButton(int ID, BOOL Checked=TRUE) ; 

            ,    
 . 
       ,    HideButtonQ.  
 : 

    BOOL CToolBarCtrl::HideButton(int ID, BOOL Hldden=TRUE); 

    ,   ,  ID   .  
 Hidden   ,    ,    
    .      
  ,      . 
         ,    
Enal)leBiitton(),    : 

    BOOL CToolBarCtrl::EnableButton(int ID, BOOL EnabledvTRUE); 


    244                                    MFC:   

      ID    .   
Enabled  ,    .  ,    
  .      ,   
      .    
         . 

         

               
,    .      
 ,   .  ,    
    (Help).     
WM_SIZE,       . 
     ,      
 . 
        : 

    ; TOOLBAR.RC 
    ^include <afxres.h> ^include "ids.h" 
    IDTB_BMP BITMAP "toolbar.bmp" 
    ToolbarMenu MENU ( 
    POPUP "Draw" ( 
    MENUITEM "&Lines\tF2", IDM_LINES 
    MENUITEM "SRectangles\tF3", IDM_RECTANGLES 
    MENUITEM "&Ellipses\tF4", IDM_ELLIPSES 
    MENUITEM "&Reset\tF5", IDM_RESET 
    } 
    POPUP "Options" 
    ( 
    MENUITEM "SShow Toolbar\tF6", IDM_SHOWTB 
    MENUITEM "SHide Toolbar\tF7", IDM_HIDETB 
    MENUITEM "E&xit\tF8", IDM_EXIT 
    ) 
    MENUITEM "SHelp", IDM_HELP 
    I 
    ToolbarMenu ACCELERATORS 
    ( 
    VK_F2, IDM_LINES, VIRTKEY 
    VK_F3, IDM_RECTANGLES, VIRTKEY 
    VK_F4, IDM_ELLIPSES, VIRTKEY 
    VK_F5, IDM_RESET, VIRTKEY 
    VK_F6, IDM_SHOWTB, VIRTKEY 
    VK_F7, IDM_HIDETB, VIRTKEY 


    10.                                      245 


    VK_F8, IDM_EXIT, VIRTKEY 
    VK_F1, IDM__HELP, VIRTKEY 
    } 
        IDS.H: 
    // IDS.H 
    #define IDM_LINES       100 
    #define IDM_RECTANGLES 101 
    ftdefine IDM_ELLIPSES    102 
    ^define IDM_ENLARGE     103 
    #define IDM_ORG         104 
    #define IDM_RESET       105 
    #define IDM_SHOWTB      106 
    ^define IDM_HIDETB      107 
    ^define IDM_EXIT        108 
    ftdefine IDM_HELP        109 
    #define ID_TB           200 
    #define IDTB_BMP        300 
    ftdefine NUMBUTTONS       
       TOOLBAR. H,    : 
    // TOOLBAR.H 
    ^include "ids.h" 
    //       
    class CMainHin : public CFrameWnd 
    { 
    CDC m memDC; //  ,   
    //   
    CBitmap m bmp; //    
    CBrush m_bkbrush; //     
    //   
    CPen m RedPen, m YellowPen, m GreenPen, m BluePen; 
    CPen m_01dPen; 
    CToolBarCtrl m_TB; //    
    public: 
    CMainHin() ; 
    afx_msg void OnPaint();                                            , 
    afx_msg void OnSize(UINT How, int Width, int Height);              ' 
    afx msg void OnLinesO;                                            | 
    afx_msg void OnRectangles();                                       ! 


    246                                    MFC:   


    afx msg void OnEllipses(); 
    afx msg void OnResetO; 
    afx_msg void OnShowTBO; 
    afx_msg void OnHideTBQ; 
    afx msq void OnExit(); 
    afx msg void OnHeipO; 
    void InitToolbar() ; 
    DECLARE_MESSAGE_MAP() 
    ); 
    //      
    class CApp : public CWinApp 
    ( 
    public: 
    BOOL Initlnstance () ; 
    }; 
       : 
    //     
    #include <afxwin.h> 
    #include <afxcmn.h> 
    ^include "toolbar.h" 
    Hnclude "ids.h" 
    int maxX, maxY; //   
    CMainWin::CMainWin() 
    ( 
    Create (NULL, "Using a Toolbar", 
    WS_OVERLAPPEDWINDOW, rectDefault, 
    NULL, "ToolbarMenu") ; 
    //     
    if(!LoadAccelTable("ToolbarMenu")) 
    MessageBox ("Cannot Load Accelerators", "Error"); 
    maxX = GetSystemMetrics(SM_CXSCREEN) ; 
    maxY = GetSystemMetrics(SM_CYSCREEN) ; 
    CClientDC DC(this) ; 
    //     
    m_memDC.CreateCompatibleDC(&DC) ; 
    m_bmp.CreateCompatibleBitmap(&DC, maxX, maxY) ; 
    m_memDC.SelectObject(&m_bmp) ; 
    //    
    m_bkbrush.Create3tockObject(WHITE_BRUSH) ; 


    10.                                      247 


    m_memDC.Select0bject(&m bkbrush); 
    //     
    m_memDC.PatBlt(0, 0, maxX, maxY, PATCOPY); 
    //   
    m_RedPen.CreatePen(PS_SOLID, 1, RGB (255, 0, 0) ) ; 
    m_GreenPen.CreatePen(PS_SOLID, 2, RGB(0, 255, 0) ) ; 
    m_BluePen.CreatePen(PS_SOLID, 3, RGB(, , 255)); 
    m_YellowPen.CreatePen(PS_SOLID, 4, RGB(255, 255, 0)) ; 
    m__01dPen.CreateStockObject(BLACK_PEN) ; 
    InitCoinmonControls () ; 
    InitToolbar () ; 
    ) 
    //   
    BOOL CApp::Initlnstance() 
    { 
    m_pMainWnd = new CMainWin; 
    m pMainWnd->ShowWindow(m nCmdShow); 
    m_pMainWnd->UpdateWindow() ; 
    return TRUE; 
    ) 
    //     
    BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) 
    ON_WM_PAINT() 
    ON_WM_SIZE () 
    ON_COMMAND(IDM_LINES, OnLines) 
    ON_COMMAND(IDM_RECTANGLES, OnRectangles) 
    ON_COMMAND(IDM_ELLIPSES, OnEllipses) 
    ON_COMMAND(IDM_RESET, OnReset) 
    ON_COMMAND(IDM_SHOWTB, OnShowTB) 
    ON_COMMAND(IDM_HIDETB, OnHideTB) 
    ON_COMMAND(IDM_EXIT, OnExit) 
    ON_COMMAND(IDM_HELP, OnHelp) 
    END_MESSAGE_MAP() 
    //       
    afx msg void CMainWin::OnPaint() 
    < 
    CPaintDC DC(this) ; 
    DC.BitBlt(0, 0, maxX, maxY, &m_memDC, , , SRCCOPY) ; 
    } 
    //     
    afx_msg void CMainWin::OnSize(UINT How, int Width, int Height) 
    { 
    m_TB.AutoSize() ; 
    } 


    248                                     MFC:   


    //   IDM_EXIT 
    afx msg void CMainWin::OnExit() 
    int response; 
    response = MessageBox("Quit the Program?", "Exit", MB YESNO); 
    if(response == IDYES) 
    SendMessage(WM_CLOSE); //   
    ) 
    //   IDM_HELP 
    afx msq void CMainWin::OnHelp () 
    ( 
    m_TB.PressButton(IDM_HELP, TRUE) ; 
    MessageBox("Toolbar Demo", "Help"); 
    m_TB.PressButton(IDM_HELP, FALSE) ; 
    ) 
    //     
    afx msg void CMainWin::OnLines() f 
    //   
    m_memDC.SetPixel(40, 14, RGB(255, 0, 0) ) ; 
    m_memDC.SetPixel (41, 14, RGB(0, 255, 0)); 
    m_memDC.SetPixel(42, 14, RGB(0, 0, 255)); 
    m__memDC.SetPixel(43, 14, RGB(0, 0, 0) ) ; 
    m_memDC.LineTo(100, 50); 
    m_memDC.MoveTo(100, 50); 
    //      
    m_memDC.SelectObject(&m_GreenPen) ; 
    m_memDC.LineTo(200, 100); 
    //      
    m_memDC.SelectObject(&m_YellowPen) ; 
    m_memDC.LineTo(0, 200); 
    //      
    m_memDC.SelectObject(&m_BluePen) ; 
    m_memDC.LineTo(200, 200); 
    //      
    m_memDC.SelectObject(&m_RedPen) ; 
    m_memDC.LineTo(0, 0) ; 
    m_memDC.LineTo(100, 150); 
    m_memDC.MoveTo(0, 0) ; 
    m_memDC.LineTo(100, 250); 
    m_memDC.MoveTo(0, 0) ; 
    m_memDC.LineTo(100, 350); 


    10.                                      249 


    //    
    m_memDC.SelectObject(&m_01dPen) ; 
    m_memDC.Arc(0, 0, 300, 300, 0, 50, 200, 0) ; 
    //  ,    
    m_memDC.MoveTo(150, 150); 
    m_memDC.LineTo(0, 50); 
    m_memDC.MoveTo (150, 150); 
    m_memDC.LineTo(200, 0); 
    InvalidateRect(NULL) ; 
    } 
    //   
    afx_msg void CMainWin::OnRectangles () 
    ( 
    CBrush HollowBrush; 
    //  ""  
    HollowBrush.CreateStockObject(HOLLOW_BRUSH) ; 
    m_memDC.SelectObject(&HollowBrush) ; 
    //                            i 
    m_memDC.Rectangle (50, 50, 300, 300);                              i 
    m_memDC.RoundRect(125, 125, 220, 240, 15, 13); 
    //    
    m_memDC.SelectObject(&m_RedPen);                                   j 
    rn_memDC.Rectangle(100, 100, 200, 200); 
    m_memDC.SelectObject(&m_01dPen); //    
    //    
    m_memDC.SelectObject(&m_bkBrush) ; 
    InvalidateRect(NULL);                                              j 
    ) 
    //   
    afx_msg void CMainWin::OnEllipses () 
    ( 
    CBrush Brush; 
    //    
    Brush.CreateSolidBrush(RGB(0, 0, 255)); 
    m_memDC.SelectObject(SBrush) ; 
    //  ,    
    m_memDC.Ellipse(50, 200, 100, 280); 
    m_memDC.Ellipse(75, 25, 280, 100); 
    //    
    m_memDC.SelectObject(&m_RedPen) ; 


    250                                     MFC:   


    //    
    Brush.DeleteObject(); //    
    Brush.CreateSolidBrush(RGB(0, 255, 0)) ; 
    m_meniDC . SelectObject ( SBrush) ; //    
    m_memDC.Ellipse (100, 100, 200, 200); 
    //   
    m_memDC.Pie(200, 200, 340, 340, 225, 200, 200, 250); 
    m_memDC.SelectObject(&m_01dPen); //    
    m meniDC.SelectObject(&m bkBrush); //    
    InvalidateRect(NULL) ; 
    ) 
    //   
    afx msg void CMainWin::OnReset() 
    ( 
    m_memDC.PatBlt(0, 0, maxX, maxY, PATCOPY); 
    InvalidateRect(NULL) ; 
    1 
    //    
    afx_msg void CMainWin::OnShowTB() 
    ( 
    m_TB.ShowWindow(SW_RESTORE) ; 
    ) 
    //      
    afx_msg void CMainWin::OnHideTB() 
    ( 
    m_TB.ShowWindow(SW_HIDE) ; 
    } 
    //    
    void CMainWin::InitToolbar() 
    ( 
    RECT r; 
    TBBUTTON tbButtons[NUMBUTTONS] ; 
    r.left = r.top = r.right = r.bottom = 0; 
    m_TB.Create(MS_VISIBLE | WS_CHILD | WS_BORDER, r, this, ID_TB) ; 
    tbButtons[0].iBitmap = 0; 
    tbButtons[0].idCommand = IDM_LINES; 
    tbButtons[0].fsState = TBSTATE_ENABLED; 
    tbButtons[0].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[0].dwData = 0; 
    tbButtons[0].iString = 0; 


    10.                                      25 1 


    tbButtons[1].iBitmap = 1; 
    tbButtons [1].idCommand = IDM_RECTANGLES; 
    tbButtons[1].fsState = TBSTATE_ENABLED; 
    tbButtons [1].fsStyle = TBSTYLE_BUTTON; 
    tbButtons [1].dwData = 0; 
    tbButtons[1].iString = 0; 
    tbButtons[2].iBitmap = 2; 
    tbButtons[2].idCommand = IDM_ELLIPSES; 
    tbButtons[2].fsState = TBSTATE_ENABLED; 
    tbButtons[2].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[2].dwData = 0; 
    tbButtons[2].iString = 0; 
    tbButtons[3].iBitmap = 3; 
    tbButtons[3].idCommand = IDM_RESET; 
    tbButtons[3].fsState = TBSTATE_ENABLED; 
    tbButtons[3].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[3].dwData = 0; 
    tbButtons[3].iString = 0; 
    // - 
    tbButtons[4].iBitmap = 0; 
    tbButtons[4].idCommand = 0; 
    tbButtons[4].fsState = TBSTATE_ENABLED; 
    tbButtons[4].fsStyle = TBSTYLE_SEP; 
    tbButtons[4].dwData = 0; 
    tbButtons[4].iString = 0; 
    tbButtons[5].iBitmap = 4; 
    tbButtons[5].idCommand = IDM_HELP; 
    tbButtons[5].fsState = TBSTATE_ENABLED; 
    tbButtons[5].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[5].dwData = 0; 
    tbButtons[5].iString = 0; 
    m_TB.AddButtons(NUMBUTTONS, tbButtons) ; 
    m_TB.AddBitmap(NUMBUTTONS, IDTB_BMP);                              ! 
    } 
    CApp App; //    

    ,  ,  .    . ( 
 ,        ,  
   .)     
_,     CMainWin.   CMainWinQ 
   InitCommonControls(),      
InitToolbarO.       
. ,   ,    
tbButtons. ,       
-.        
    

    252                                     MFC:   

    AddButtons().       AddBidnapO   
  . 
            
 .  ,    ( -)  
   .     
  WM_COMMAND,     
,       . ,     
      ,    . 
        ,      
  ,    ,    ShowWindowQ.  
  ,    Options  Hide Toolbar.  
   ,       Show Toolbar. 
        ,  
     ,     
.    ,    . 
          .     
 OnHelpO.   ,    Help (  
   )  Help    
    4) PressButton().   
   ,    ""   
   PressButtoiiQ.  ,  Help   
 ,       .   
       
 . 
         . 10.2. 

    . 10.2.      

    10.                                            253 


       

       Windows , ,  ,    
           
  .     . 
        ,  
        . 
( ,   ,   ,    
.)     ,     
     . 
              
   TBSTYLE_TOOLTIPS.    ,   
    WM_NOTIFY,      
       .    
  :     ON_NOTIFY(),   
  ON_NOTIFY_RANGE().     
Microsoft,      . 
         ON_NOTIFV_RANGE() 
  : 

    ON_NOTIFY_RANGE(TTN_NEEDTEXT, First, Last, TTipHandler) 

     TTN_NEEDTEXT      WM_NOTIFY, 
 ,     .  
First  Last    4),   
   .   ,    
,  //  ,   Last   
  .   ,  , 
  WM_NOTIFY,    .  
      . ( 
    ,    
,  .)  TTipHandler    
   .    
  : 

    afx_msg void TTipHandler(UINT idNoCUsed, NMHDR *Hdr, LRESULT *ResultNotUsed); 

      idNotUsed  ,    
WM_NOTIFY.     ,   . 
 ResultNotUsed   .   , 
!   WM_NOTIFY,   ,   
 : Hdr.   NMHDR     , 
 ,    .    
  ;  .     
  TOOLTIPTEXT,!    : 

    typedef struct! 
    NMHDR hdr; 
    LPSTR IpszText; 


    254                                    MFC:   


    char szText[80] ; 
    HINSTANCE hinst; 
    UINT uFlags; 
    ) TOOLTIPTEXT; 

        TOOLTIPTEXT   NMHDR,  
 : 

    typedef struct tagNMHDR 
    ( 
    HHND hwndFrom; //    
    UINT idFrom; //    
    UINT code; //   
    } NMHDR; 

      WM_NOTTFY   -   
 ,    code    TTNJNEEDTEXT, 
   idFrom   ,    . 
         .      
 szText  TOOLTIPTEXT,        
IpszText        .  
       IpszText,    
hinst      .    
   IpszText   ,    . 
      ,   -,  
     . 

    //    
    afx_msg void CMainWin::OnTTip(UINT idNotUsed, NMHDR *hdr, 
    LRESULT *ResultNotUsed) 
    ( 
    switch (hdr->idFrom) 
    ( 
    case IDM_LINES: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Lines"; 
    break; 
    case IDM_RECTANGLES: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Rectangles"; 
    break; 
    case IDM_ELLIPSES: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Ellipses"; 
    break; 
    case IDM_RESET: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Reset"; 
    breaks
    case IDM_HELP: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Help"; 
    break; 
    ) 
    ) 


    10.                                       255 

             
Windows,    .     
   ,    .  
,       ,   
    . 
    :     ,     
,     .    
 CToolTipCtrl. 

        ,    

          ,  
   .      . J0.3. 
          IDS.H,   
  .    TOOLTIP.H,   
 : 

    // TOOLTIP.H 
    #include "ids.h" 
    //                                  
    class CMainWin : public CFrameWnd 
    ( 
    CDC m memDC; //  ,   
    //   
    CBitmap m bmp; //    
    CBrush m bkbrush; //     
    //   
    CPen m RedPen, m_YellowPen, m GreenPen, m BluePen; 
    CPen m_01dPen; 
    CToolBarCtrl m ; //    
    public: 
    CMainWin () ; 
    afx msg void OnPaintO; 
    afx_msg void OnSize(UINT How, int Width, int Height); 
    afx msg void OnLinesO; 
    afx msg void OnRectangles() ; 
    afx_msg void OnEllipses () ; 
    afx_msg void OnResetO; 
    afx_msg void OnShowTBO; 
    afx msg void OnHideTBO; 
    afx msg void OnExitO; 
    afx msg void OnHelpO; 


    256 MFC:   


    afXJtisg void OnTTip(UINT idNotUsed, NMHDR *hdr, 
    LRESULT *ResultNotUsed) ; 
    void InitToolbar(); 
    DECLARE_MESSAGE_MAP() 
    1; 
    //      
    class CApp : public CWinApp 
    ( 
    public: 
    BOOL Initlnstance () ; 
    ); 
       : 
    //    
    finclude <afxwin.h> 
    #include <afxcmn.h> 
    #include "tooltip.h" 
    ^include "ids.h" 
    int maxX, maxY; //   
    CMainWin::CMainWin() 
    ( 
    Create(NULL, "Adding Tooltips", 
    WS_OVERLAPPEDWINDOW, rectDefault, 
    NULL, "ToolbarMenu"); 
    //     
    if(!LoadAccelTable("ToolbarMenu")) 
    MessageBox("Cannot Load Accelerators", "Error"); 
    maxX = GetSystemMetrics(SM_CXSCREEN); 
    maxY = GetSystemMetrics(SM_CYSCREEN) ; 
    CClientDC DC(this) ; 
    //     
    m_memDC.CreateCompatibleDC(&DC) ; 
    m_bmp.CreateCompatibleBitmap(&DC, maxX, maxY) ; 
    m memDC.SelectObject(&m bmp); 
    //    
    m_bkbrush.CreateStockObject(WHITE_BRUSH) ; 
    m memDC.SelectObject(&m bkbrush); 
    //     
    m_memDC.PatBlt(0, 0, maxX, maxY, PATCOPY); 
    //   


    10.                                      257 


    m_RedPen.CreatePen(PS_SOLID, 1, RGB(255, 0, 0) ) ; 
    m_GreenPen.CreatePen(PS_SOLID, 2, RGB(0, 255, 0) ) ; 
    m_BluePen.CreatePen(PS_SOLID, 3, RGB(0, 0, 255)); 
    m_YellowPen.CreatePen(PSJ30LID, 4, RGB(255, 255, 0) ) ; 
    m_01dPen.CreateStockObject(BLACK_PEN) ; 
    InitCommonControls(); 
    InitToolbar() ; 
    } 
    //   
    BOOL CApp::Initlnstance () 
    ( 
    m pMainWnd = new CMainWin; 
    m_pMainWnd->ShowWindow (m_nCindShow) ; 
    m_pMainWnd->UpdateWindow() ; 
    return TRUE; 
    } 
    //     
    BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) 
    ON_WM_PAINT() 
    ON_WM_SIZE() 
    ON_COMMAND(IDM_LINES, OnLines) 
    ON_COMMAND(IDM_RECTANGLES, OnRectangles) 
    ON_COMMAND(IDM_ELLIPSES, OnEllipses) 
    ON_COMMAND(IDM_RESET, OnReset) 
    ON_COMMAND(IDM_SHOWTB, OnShowTB) 
    ON_COMMAND(IDM_HIDETB, OnHideTB) 
    ON_COMMAND(IDM_EXIT, OnExit) 
    ON_COMMAND(IDM_HELP, OnHelp) 
    ON_NOTIFY_RANGE(TTN_NEEDTEXT, 0, ID_TB, OnTTip) 
    END_MESSAGE_MAP() 
    //       
    afx msg void CMainWin::OnPaint() 
    ( 
    CPaintDC DC(this) ; 
    DC.BitBlt(0, 0, maxX, maxY, &m_memDC, , , SRCCOPY) ; 
    } 
    //     
    afx_msg void CMainWin::OnSize(UINT How, int Width, int Height) 
    { 
    m_TB.Auto3ize () ; 
    } 
    //   IDM EXIT 
    afx msg void CMainWin::OnExit() 


    258                                    MFC:   


    int response; 
    response = MessageBox ("Quit the Program?", "Exit", MB_YESNO); 
    if (response == IDYES) 
    SendMessage(WM_CLOSE); //   
    } 
    //   IDM_HELP 
    afx msg void CMainWin::OnHelp() 
    { 
    m_TB.PressButton(IDM_HELP, TRUE) ; 
    MessageBox ("Toolbar Demo", "Help"); 
    m_TB.PressButton(IDM_HELP, FALSE) ; 
    } 
    //     
    afx msg void CMainWin::OnLines() 
    ( 
    //   
    m_memDC.SetPixel(40, 14, RGB(255, 0, 0)) ; 
    m_memDC.SetPixel(41, 14, RGB(0, 255, 0)) ; 
    m_mernDC.SetPixel (42, 14, RGB(0, 0, 255)); 
    m_memDC.SetPixel(43, 14, RGB(0, 0, 0)) ; 
    m_memDC.LineTo(100, 50); 
    m_memDC.MoveTo(100, 50); 
    //      
    m_memDC.SelectObject(&m_GreenPen) ; 
    m_memDC.LineTo(200, 100); 
    //      
    m_memDC.SelectObject(&m_YellowPen) ; 
    m_memDC.LineTo(0, 200); 
    //      
    m_memDC.SelectObject(&m_BluePen) ; 
    m_memDC.LineTo(200, 200); 
    //      
    m_memDC.SelectObject(&m_RedPen) ; 
    m_memDC.LineTo(0, 0) ; 
    m_memDC.LineTo(100, 50); 
    m_memDC.MoveTo(0, 0) ; 
    m_memDC.LineTo(100, 250); 
    m_memDC.MoveTo(0, 0) ; 
    m_memDC.LineTo(100, 350); 


    10.                                      259 


    //    
    m_memDC.SelectObject(&m_01dPen) ; 
    m_memDC.Arc(0, 0, 300, 300, 0, 50, 200, 0) ; 
    //  ,    
    m_memDC.MoveTo(150, 150); 
    m_memDC.LineTo(0, 50); 
    m_memDC.MoveTo(150, 150); 
    m_memDC.LineTo(200, 0) ; 
    InvalidateRect(NULL) ; 
    } 
    //   
    afx msg void CMainWin: .'OnRectangles () 
    ( 
    CBrush HollowBrush; 
    //  ""  
    HollowBrush.CreateStockObject(HOLLOW_BRUSH) ; 
    m_memDC.SelectObject(SHollowBrush) ; 
    //    
    m_meniDC. Rectangle (50, 50, 300, 300); 
    m_memDC.RoundRect(125, 125, 220, 240, 15, 13); 
    //    
    m_memDC. SelectObject (&rn_RedPen) ; 
    m_memDC.Rectangle(100, 100, 200, 200); 
    m memDC.SelectObject(&m OldPen); //    
    //    
    m_memDC.SelectObject(&m_bkBrush) ; 
    InvalidateRect(NULL) ; 
    } 
    //   
    afx msg void CMainWin::OnEllipses () 
    ( 
    CBrush Brush; 
    //    
    Brush.CreateSolidBrush (RGB (0, 0, 255)); 
    ni_memDC.SelectObject(SBrush) ; 
    //  ,    
    m_memDC.Ellipse (50, 200, 100, 280); 
    m_memDC.Ellipse (75, 25, 280, 100); 


    260                                    MFC:   


    //    
    m memDC.SelectObject(&m RedPen); 
    //    
    Brush.DeleteObject(); //    
    Brush.CreateSolidBrush(RGB(0, 255, 0)) ; 
    m_memDC.SelectObject(SBrush); //    
    m_memDC.Ellipse(100, 100, 200, 200); 
    //   
    m_memDC.Pie(200, 200, 340, 340, 225, 200, 200, 250); 
    
    m_memDC.SelectObject(&m_01dPen); //    
    m_memDC . SelectObject (Sttn_bkBrush) ; //    
    InvalidateRect(NULL) ; 
    } 
    //   
    afx msg void CMainWin::OnReset() 
    { 
    m_memDC.PatBlt(0, 0, maxX, maxY, PATCOPY); 
    InvalidateRect(NULL) ; 
    ) 
    
    //    
    afx_msg void CMainWin::OnShowTB() 
    { 
    in_TB.ShowWindow(SW_RESTORE) ; 
    } 
    
    //    
    afx_msg void CMainWin::OnHideTB() 
    { 
    m_TB.ShowWindow(SW_HIDE) ; 
    } 
    
    //    
    afx_msg void CMainWin::OnTTip(UINT idNotUsed, NMHDR *hdr, 
    
    LRESULT *ResultNotUsed) 
    ( 
    
    switch (hdr->idFrom) 
    { 
    case IDM_LINES: 
    ( (TOOLTIPTEXT *)hdr)->lpszText = "Lines"; 
    break; 
    case IDM_RECTANGLES: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Rectangles"; 
    break; 
    case IDM_ELLIPSES: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Ellipses"; 
    break; 


    10.                                      261 


    case IDM_RESET: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Reset"; 
    breaks
    case IDM_HELP: 
    ((TOOLTIPTEXT *)hdr)->lpszText = "Help"; 
    break; 
    } 
    } 
    //    
    void CMainWin::InitToolbar() 
    { 
    RECT r; 
    TBBUTTON tbButtons[NUMBUTTONS] ; 
    r.left = r.top = r.right = r.bottom = 0; 
    m_TB.Create(WS_VISIBLE | WS_CHILD | WS_BORDER I 
    TBSTYLE_TOOLTIPS, r, this, ID_TB) ; 
    tbButtons[0].iBitmap = 0; 
    tbButtons[0].idCommand = IDM_LINES; 
    tbButtons [0].fsState = TBSTATE_ENABLED; 
    tbButtons[0].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[0].dwData = 0; 
    tbButtons[0].iString = 0; 
    tbButtons [1].iBitmap = 1; 
    tbButtons [1].idCommand = IDM_RECTANGLES; 
    tbButtons[1].fsState = TBSTATE_ENABLED; 
    tbButtons[1].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[1].dwData = 0; 
    tbButtons[1].iString = 0; 
    tbButtons[2].iBitmap = 2; 
    tbButtons[2].idCommand = IDM_ELLIPSES; 
    tbButtons[2].fsState = TBSTATE_ENABLED; 
    tbButtons[2].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[2J.dwData = 0; 
    tbButtons[2].iString = 0; 
    tbButtons[3].iBitmap = 3; 
    tbButtons[3].idCommand = IDM_RESET; 
    tbButtons[3].fsState = TBSTATE_ENABLED; 
    tbButtons[3].fsStyle  TBSTYLE_BUTTON; 
    tbButtons[3].dwData = 0; 
    tbButtons [3].iString = 0; 
    // - 
    tbButtons[4].iBitmap = 0; 
    tbButtons[4].idCommand = 0; 
    tbButtons[4].fsState = TBSTATE_ENABLED; 


    262                                    MFC:   


    tbButtons[4].fsStyle = TBSTYLE_SEP; 
    tbButtons[4].dwData = 0; 
    tbButtons[4].iString = 0; 
    tbButtons[5].iBitmap = 4; 
    tbButtons[5].idCommand = IDM_HELP; 
    tbButtons[5].fsState = TBSTATE_ENABLED; 
    tbButtons[5].fsStyle = TBSTYLE_BUTTON; 
    tbButtons[5].dwData = 0; 
    tbButtons[5].iString = 0; 
    m_TB.AddButtons(NUMBUTTONS, tbButtons) ; 
    m_TB.AddBitmap(NUMBUTTONS, IDTB_BMP) ; 
    } 
    CApp App; //    

    . 10.3.     

               
   ,  ,     . 

    70.                                      263