       () 

            .  
,    ,     ( ), 
  . 

    265 

    ,        Windows 95, 
Windows NT ( 3.51   )  Win32s 1.3.  Windows 3.1  
  .                                                    
   ; 

       

           ,  . 
,      ! ..    
 ,     ,     . 
     Windows  ,   
  ,  ,  , .  , 
        ,  
    .      
  ,  .       
   . 
         .    
       .    
      ,  
  (buddy window).       
 .   ,     .   
   .      
 .          
.        .    
       .   
 MFC    CSpinBattonCtrl.      
  ,     . 

      

         Create(),   
 CSpinButtonCtrl.    : 
    BOOL CSpinButtonCtrl: :Create (DWORD dwStyle, const RECT fiSizePos, CWnd 
*0wner, UINT ID); 
      dwStyle   .     
  ,   WS_CHILD, WS_VISIBLE  WS_BORDER.  
      ,   
. 11.1.         RECT,  
   SiyPos.      
   Owner. ,    
,    ID. 

    266                                     MFC:   


     11.1. ,        

    	

UDSALIGNLEFT 
UDSALIGNRIGHT 
UDSARROWKEYSTBSA
UTOBUDDY 
UDSHORZ
UDSNOTHOUSANDS 
UDSSETBUDDYINT 
UDSWRAP
     . 
     .  
. (..         
.)      .  
  .
  . (   .)
       . (  
  .)        
   .)    
       . 
    )   ,     ,   
        . 
     . .   . 
     CreateQ        
    . 

    ,    

              
WM_VSCROLL.    ,   
  OnVScroll(),      6.  , 
  : 

    afx_msg void CWnd::OnVScroll(UINT SBCode, UINT Pos, CScrollBar *SB) ; 

     SBCode   ,   
 .     
,      . 
 Pos  ,   .  
 WM_VSCROLL    ,   
5'     .     
    NULL,      
 ,     ,   
    .     
   ,     SB, 
  ,    . 

    11.                                      267 


       CSpinButtonCtrl 

     CSpinButtonCtrl   ,     
 .       . 
         (   
).           
  .    ,   
 GetPos().   : 

    int CSpinButtonCtrl::GetPos() const; 

        . 

         ,   
 SetPos().    : 

    int CSpinButtonCtrl::SetPos(int NewPos}; 

      NewPos    .   
 . 
            0  100.  
      SetRangeQ,   : 

    void CSpinButtonCtrl::SetRange(int min, int max); 

     min       UD_MINVAL,   
wax       UD_MAXVAL.  min ,  
,         . 
             
GetRangeQ.    : 

    void CSpinButtonCtrl::GetRange(int imin, int &max) const; 

        min     , 
      .     
 GetRange(),    ,   
32- . 

      

            , 
     .      0  
99.           
 . 
        :                                       i 

    ; UPDOWN.RC 
    #include <afxres.h> ^include "ids.h" 
    UpDownMenu MENU { 
    POPUP "Demo"                                                        , 


    268                                    MFC:  i 


    ( 
    MENUITEM "SUp-Down Demo\tF2", IDM_DIALOG 
    MENUITEM "E&xit\tF3", IDM_EXIT 
    } 
    MENUITEM "SHelp", IDM_HELP 
    ) 
    UpDownMenu ACCELERATORS 
    { 
    VK_F1, IDM_HELP, VIRTKEY 
    VK_F2, IDM_DIALOG, VIRTKEY 
    VK_F3, IDM_EXIT, VIRTKEY 
    } 
    UpDownDialog DIALOG 18, 18, 142, 92 
    CAPTION "Demonstrate Up-Down Control" 
    STYLE DS__MODALFRAME | WS_POPUP I WS_CAPTION I WS_SYSMENU 
    ( 
    PUSHBUTTON "Cancel", IDCANCEL, 52, 65, 37, 14, 
    WS_CHILD | WS_VISIBLE I WS_TABSTOP } 

         IDS.H.    
  ,        . 

    // IDS.H 
    tdefine IDM_DIALOG    100 
    #define IDM_HELP      101 
    tdefine IDM_EXIT      102 
    tdefine IDM_SPIN      200 
    #define IDM_EB1       201 
    #define IDM_TRACKBAR 202 
    tdefine IDM_PROGBAR   203 
    tdefine IDM_STATIC    204 
       UPDOWN.H,    : 
    // UPDOWN.H 
    //       
    class CMainWin : public CFrameWnd 
    ( 
    public: 
    CMainWin() ; 
    //    
    afx msg void OnDialogO; 
    afx msg void OnExitO; 
    afx msg void OnHelpO; 
    DECLARE_MESSAGE_MAP() 
    }; 


    11.                                     269 


    //      
    class CApp : public CWinApp 
    ( 
    public: 
    BOOL Initlnstance () ; 
    ); 
    //       
    class CSampleDialog : public CDialog 
    ( 
    CSpinButtonCtrl m_UpDown; //   
    public: 
    CSampleDialog(char *DialogName, CWnd *0wner) : 
    CDialog(DialogName, Owner) (} 
    BOOL OnInitDialog() ; 
    afx_msg void OnVScroll(UINT SBCode, UINT Pos, 
    CScrollBar *SB) ; 
    DECLARE_MESSAGE_MAP() 
    }; 
       : 
    //    
    #include <afxwin.h> 
    #include <afxcmn.h> 
    #include <string.h> 
    ftinclude "updown.h" 
    #include "ids.h" 
    CMainWin::CMainWin() 
    ( 
    Create(NULL, "Demonstrate Up-Down Control", 
    WS_OVERLAPPEDWINDOW, rectDefault, 
    NULL, "UpDownMenu"); 
    InitCommonControls (); 
    
    //     
    if('LoadAccelTable("UpDownMenu")) 
    MessageBox("Cannot Load Accelerators", "Error"); 
    ) 
    
    //   
    BOOL CApp::Initlnstance () 
    ( 
    m_pMainWnd = new CMainWin; 
    m pMainWnd->ShowWindow(m nCmdShow) ; 
    m_pMainWnd->UpdateWindow() ; 
    return TRUE; 


    270                                     MFC:   


    //     
    BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) 
    ON_COMMAND(IDM_DIALOG, OnDialog) 
    ON_COMMAND(IDM_EXIT, OnExit) 
    ON_COMMAND(IDM_HELP, OnHelp) 
    END_MESSAGE_MAP() 
    
    //   IDM_DIALOG 
    afx_msg void CMainWin::OnDialog() 
    ( 
    CSampleDialog diagOb("UpDownDialog", this); 
    diagOb.DoModal<); //     1 
    
    //   IDM_EXIT 
    afx msg void CMainWin::OnExit() 
    ( 
    int response; 
    response = MessageBox("Quit the Program?", "Exit", MB_YESNO) ; 
    if(response == IDYES) 
    SendMessage(WM_CLOSE); //   
    1 
    //   IDM HELP 
    afx msg void CMainWin::OnHelp() 
    ( 
    MessageBox("Up-Down Control", "Help"); 
    } 
    
    //      
    BEGIN_MESSAGE_MAP(CSampleDialog, CDialog) 
    
    ON_WM_VSCROLL() 
    END_MESSAGE__MAP() 
    
    //    
    BOOL CSampleDialog::OnInitDialog() 
    ( 
    RECT r; 
    CDialog::OnInitDialog(); //     
    
    //   
    .left = .top = 10; 
    .right = .bottom = 50; 
    
    m_UpDown.Create(WS_VISIBLE | WS_CHILD | WS_BORDER, 
    r, this, IDD_SPIN); 
    
    //       
    m_UpDown.SetRange(0, 99); 


    71.                                      271 


    m_UpDown.SetPos(50) ; 
    return TRUE; 
    ) 
    
    //   WM_VSCROLL,   
    afx_msg void CSampleDialog::OnVScroll(UINT SBCode, UINT Pos, 
    
    CScrollBar *SB) 
    { 
    char str[255] ; 
    
    //  SB      
    if(SB != (CScrollBar *)&m_UpDown) return; 
    CClientDC dc(this) ; 
    dc.SetBkColor(RGB(200, 200, 200)); 
    wsprintf(str, "%d", m_UpDown.GetPos()) ; 
    dc.TextOut (50, 22, "     ", 5) ; 
    dc.TextOut(50, 22, str, strlen (str)); 
    } 
    
    CApp App; //    
         . 11.1. 
    
    . 11.1.     


    272                                        MFC:   


        .     
,    OnInitDialogQ: 

    //    
    BOOL CSampleDialog::OnInitDialog 
    ( 
    RECT r; 
    CDialog::OnInitDialog(); //     
    
    //   
    .left = .top = 10; 
    .right = .bottom = 50; 
    
    m_UpDown.Create(WS_VISIBLE | WS_CHILD I WSJ30RDER, 
    r, this, IDD_SPIN) ; 
    
    //       
    m_UpDown.SetRange (0, 99); 
    m_UpDown.SetPos(50) ; 
    return TRUE; 
    } 

         m_UpDown,    
CSampleDialog.         
CreateQ,  ,  ,     
 (10,10)    5050 .   
  ,        
   (   this).  
   IDD_SPIN.      0  
99,      50. 
              
WM_VSCROLL.       OnVScroll(): 
    
    //   WM VSCROLL,   
    afx__msg void CSampleDialog::OnVScroll(UINT SBCode, UINT Pos, 
    
    CScrollBar *SB) 
    ( 
    char str[255] ; 
    
    //  SB      
    if(SB != (CScrollBar *) &rn_UpDown) return; 
    CClientDC dc(this) ; 
    dc.SetBkColor(RGB(200, 200, 200)); 
    wsprintf (str, "%d", m_UpDown.GetPos()); 
    dc.TextOut(50, 22, "     ", 5); 
    dc.TextOut (50, 22, str, strlen (str)); 
    } 


    11.                                      273 

     ,   SB     
 m_UpDown.   ,     
  .      ,   
  WM_VSCROLL    , 
     . 
            
GetPos().    ,    
    Pos  OnVScroll().   
     . 

        

         ,    
 ,    ,  ,     
 .   ,       
.       , Windows 
   .    
        
     . 
        ,      
    .         
        .  
   ,      
 . 
              
 . -,        
 .     SetBuddyO,    
  .    : 

    CWnd *CSpinButtonCtrl::SetBuddy(CWnd *BuddyWnd}; 

      BuddyWnd      , 
         .  
       (  ). 

      

           .   
 : 

    ; SPIN.RC 
    #include <afxres.h> 
    #include "ids.h" 
    SpinMenu MENU { 
    POPUP "Demo" 
    { 


    274                                    MFC:   


    MENUITEM "&Spin Control Demo\tF2", IDMJ3IALOG 
    MENUITEM "E&xit\tF3", IDM_EXIT 
    } 
    MENUITEM "&Help", IDM_HELP 
    ) 
    SpinMenu ACCELERATORS 
    ( 
    VK_F1, IDM_HELP, VIRTKEY 
    VK_F2, IDM_DIALOG, VIRTKEY 
    VK_F3, IDM_EXIT, VIRTKEY 
    } 
    SpinDialog DIALOG 18, 18, 142, 92 
    CAPTION "Demonstrate Spin Control" 
    STYLE DS_MODALFRAME I WS_POPUP | WS_CAPTION I WS_SYSMENU 
    ( 
    PUSHBUTTON "Cancel", IDCANCEL, 52, 65, 37, 14, 
    WS_CHILD I WS_VISIBLE I WSJTABSTOP 
    EDITTEXT IDD_EB1, 10, 10, 26, 12, ES_LEFT I WS_CHILD | 
    WS_VISIBLE | WS_BORDER 
    } 

       SPIN.H: 

    // SPIN.H 
    
    //       
    class CMainWin : public CFrameWnd 
    ( 
    public: 
    
    CMainWin() ; 
    
    //    
    afx msg void OnDialogO; 
    afx msg void OnExitt); 
    afx__msg void OnHelpO; 
    DECLARE_MESSAGE__MAP() 
    ); 
    
    //      
    class CApp : public CWinApp 
    { 
    public: 
    BOOL Initlnstance() ; 
    ); 
    //       
    class CSampleDialog : public CDialog 
    { 
    CSpinButtonCtrl m_Spin; //     


    11.                                      275 


    public: 
    CSampleDialog(char *DialogName, CWnd *0wner) : 
    CDialog(DialogName, Owner) {} 
    BOOL OnInitDialog() ; 
    DECLARE_MESSAGE_MAP() 
    }; 
       : 
    //     
    #include <afxwin.h> 
    #include <afxcmn.h> 
    #include "spin.h" 
    #include "ids.h" 
    CMainWin::CMainWin() 
    { 
    Create(NULL, "Demonstrate Spin Control", 
    WSJ3VERLAPPEDWINDOW, rectDefault, 
    NULL, "SpinMenu") ; 
    InitCommonControls () ; 
    
    //     
    if('LoadAccelTable("SpinMenu")) 
    MessageBox("Cannot Load Accelerators", "Error"); 
    ) 
    
    //   
    BOOL CApp::Initlnstance () 
    ( 
    m pMainWnd = new CMainWin; 
    m_pMainWnd->ShowWindow(m_nCmdShow) ; 
    m_pMainWnd->UpdateWindow() ; 
    return TRUE; 
    ) 
    
    //     
    BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) 
    ON_COMMAND(IDM_DIALOG, OnDialog) 
    ON_COMMAND(IDM_EXIT, OnExit) 
    
    ON_COMMAND(IDM_HELP, OnHelp) 
    END_MESSAGE_MAP() 
    
    //   IDM_DIALOG 
    afx_msg void CMainWin::OnDialog() 
    1 
    CSampleDialog diagOb("SpinDialog", this); 

    276                                    MFC:   

    diagOb.DoModal(); //     
    } 
    
    //   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_msg void CMainWin::OnHelp() 
    ( 
    MessageBox("Spin Control", "Help"); 
    ) 
    
    //      
    BEGIN_MESSAGE_MAP(CSampleDialog, CDialog) 
    END_MESSAGE_MAP() 
    
    //    
    BOOL CSampleDialog::OnlnitDialog() 
    ( 
    RECT r; 
    CDialog::OnlnitDialog(); //     
    
    //     
    .left = .top = 10; 
    .right = .bottom = 50; 
    m_Spin.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | 
    UDS_SETBUDDYINT | UDS_ALIGNRIGHT, 
    r, this, IDD_SPIN) ; 
    
    //      
    m_Spin.SetRange(0, 99); 
    
    //    
    m_Spin.SetBuddy(GetDlgItem(IDD_EB1)) ; 
    
    //     
    m_Spin.SetPos(50) ; 
    return TRUE; 
    } 
    CApp ; //    


    11.                                       277 

         . 11.2. 

    . 11.2.     

         OnInitDialogO,    
     SetBuddyQ: 

    m_Spin.SetBuddy(GetDlgItem(IDD_EBl)) ; 

     , , ,   5   ,   
GetDlgItemQ    CWnd.     , 
      . 
             ,  
  ,    .  
,       WM_VSCROLL.    
,         
       . 

       

            
 (  ).     
,    .     
,       (track).   
 ,         . 

    278                                    MFC:   

         ,    
  .   , ,   
       .  
MFC      CSliderCtrI. 

      

         CreateQ,    : 

    BOOL CSliderCtrI: :Create (DWORD dwStyle, const RECT &S-[zePos, 
    CWnd * Owner, UINT ID); 

      dwStyle   .    
   WS_CHILD, WS_VISIBLE  WS_BORDER.  ,  
      .    
. 11.2.     TBS_AUTOTICKS,      
      ,  
 . 

     11.2.   

                        

    TBS_AUTOTICKS              
    TBS_HORZ                 (  
 ) 
    TBS_VERT                  
    TBS_BOTTOM                (   ) 
    TBSJTOP                    
    TBS_LEFT                   
    TBS_RIGHT                  (  
 ) 
    TBS_BOTH                   
            RECT,   
  SizePos.       
  Owner.  ID   .  
Create()           
 . 

       

           WM_HSCROLL.  
  ,     
OnHScroll(), ,  ,   : 

    afx_msg void CWnd::OnHScroll(UINT SBCode, UINT Pos, CScrollBar *SB) ; 

    71.                                      279 

     SBCocle   ,   
   .      
  ,     
 ,    . 11.3. 

     11.3.     

                       

    _            [END].     
   . 
    TB_ENDTRACK         ,   . ( .) 
    TB_LINEDOWN          [RIGHT]  [4.]. 
    TB_LINEUP             [LEFT]  []. 
    TB_PAGEDOWN         [PAGE DOWN]     
 . 
     PAGEUP            [PAGE UP]      . 
    TB_THUMBPOSITION       . 
    TB_THUMBTRACK          . 
    _                 [HOME].    
    . 

     Pos   .   WM_HSCROLL  
 ,   5'      
 .     SB   
 NULL,       ,  
   ,       
.        , 
      . 

        

      ,        
 ,    .    
     CSliderCtrl. 
         (   
).        
  .    ,   
 GetPosQ.   : 

    int CSliderCtrl::GetPos() const; 

        . 
         ,   
 SetPosQ.    : 

    void CSliderCtrl::SetPos(int NewPos); 


    280                                    MFC:   

      NewPos    .   
 . 
            SetRangeQ, 
  : 

    void CSliderCtrl: : SetRange (int rnin, ink may.., BOOL Redra w= FALSE); 

      Redraw   ,      
  . 
             
GetRange().    : 

    void CSliderCtrl::GetRange(int imin, int Smax) ; 

        min     , 
      . 
       ,      
 .       . 

         

          ,  
    .  ,    
 ,     .      
    .      
. 11.3. 

    . 11.3.     


    11.                                          281 

        : 

    ; SLIDER.RC 
    ^include <afxres.h> 
    #include "ids.h" 
    SliderMenu MENU 
    ( 
    POPUP "Demo" 
    { 
    
    MENUITEM "SSlider Demo\tF2", IDM_DIALOG 
    MENUITEM "E&xit\tF3", IDM_EXIT 
    } 
    
    MENUITEM "SHelp", IDM_HELP 
    ) 
    
    SliderMenu ACCELERATORS 
    ( 
    VK_F1, IDM_HELP, VIRTKEY 
    VK_F2, IDM_DIALOG, VIRTKEY 
    VK_F3, IDM_EXIT, VIRTKEY  
    SliderDialoq DIALOG 18, 18, 142, 92 
    CAPTION "Demonstrate Slider Control" 
    STYLE DS_MODALFRAME I WS_POPUP | WS_CAPTION | WS_SYSMENU 
    ( 
    PUSHBUTTON "Cancel", IDCANCEL, 52, 65, 37, 14, 
    
    WS_CHILD I WS_VISIBLE | WS_TABSTOP 
    EDITTEXT IDD_EB1, 10, 10, 26, 12, ES_LEFT | WS_CHILD | 
    
    WS_VISIBLE | WS_BORDER 
    ) 
       SLIDER.H,    : 
    // SLIDER.H 
    
    //       
    class CMainWin : public CFrameWnd 
    { 
    public: 
    CMainWin () ; 
    
    //    
    afx msq void OnDialogO; 
    afx_msg void OnExitO; 
    afx msg void OnHelpO; 
    DECLARE_MESSAGE_MAP() 
    }; 
    //      


    282                                     MFC:   


    class CApp : public CWinApp 
    ( 
    public: 
    BOOL Initlnstance (); 
    ); 
    //       
    class CSampleDialog : public CDialog 
    { 
    CSpinButtonCtrl m Spin; //     
    CSliderCtrl m Slider; //   
    public: 
    CSampleDialog(char *DialogName, CWnd *0wner) : 
    CDialog(DialogName, Owner) () 
    BOOL OnInitDialog () ; 
    afx_msg void OnVScroll(UINT SBCode, UINT Pos, 
    CScrollBar *SB) ; 
    afxJ-nsg void OnHScroll (UINT SBCode, UINT Pos, 
    CScrollBar *SB) ; 
    DECLARE_MESSAGE_MAP() 
    ); 
       : 
    //    
    ^include <afxwin.h> 
    #include <afxcmn.h> 
    #include "slider.h" 
    #include "ids.h" 
    CMainWin::CMainWin() 
    ( 
    Create(NULL, "Demonstrate Slider Control", 
    WS__OVERLAPPEDWINDOW, rectDefault, 
    NULL, "SliderMenu"); 
    InitCommonControls(); 
    
    //     
    if(!LoadAccelTable("SliderMenu")) 
    MessageBox("Cannot Load Accelerators", "Error"); 
    } 
    //   
    BOOL CApp::Initlnstance() 
    ( 
    m_pMainWnd == new CMainWin; 
    m_pMainWnd->ShowWindow(m_nCmdShow) ; 
    m_pMainWnd->UpdateWindow () ; 


    7 7.                                      283 


    return TRUE; 
    1 
    
    //     
    BEGIN_MESSAGE_MAP(CMainWin, CFrameWnd) 
    ON_COMMAND(IDM_DIALOG, OnDialog) 
    ON_COMMAND(IDM_EXIT, OnExit) 
    
    ON_COMMAND(IDM_HELP, OnHelp) 
    END_MESSAGE_MAP() 
    
    //   IDM DIALOG 
    afx msg void CMainWin::OnDialog() 
    { 
    CSampleDialog diagOb("SliderDialog", this); 
    diagOb.DoModal(); //     1 
    
    //   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 msg void CMainWin::OnHelp() 
    ( 
    MessageBox("Slider Control", "Help"); 
    } 
    
    //      
    BEGIN_MESSAGE_MAP(CSampleDialog, CDialog) 
    ON_WM_VSCROLL() 
    
    ON_WM_HSCROLL() 
    END_MESSAGE_MAP() 
    
    //    
    BOOL CSampleDialog::OnInitDialog() 
    ( 
    RECT r; 
    CDialog::OnInitDialog(); //     
    
    //     
    .left = .top = 10; 
    .right = .bottom = 50; 
    m_Spin.Create<WS_VISIBLE I WS_CHILD I WS_BORDER | 
    UDSJ3ETBUDDYINT | UDS_ALIGNRIGHT, 
    r, this, IDD_SPIN) ; 


    284                                    MFC:   


    //      
    m_Spin.SetRange(0, 10); 
    
    //    
    m_Spin.SetBuddy(GetDlgItem(IDD_EBl)) ; 
    
    //     
    m_Spin.SetPos(5) ; 
    
    //   
    .left = 10; .top = 50; 
    .right = 200; r.bottom = 80; 
    m_Slider.Create(WS_VISIBLE | WS_CHILD | WS_BORDER | 
    TBS_AUTOTICKS | WSJTABSTOP, 
    r, this, IDD_TRACKBAR); 
    
    //       
    m_Slider.SetRange (, 10); 
    m_Slider.SetPos(5) ; 
    return TRUE; 
    ) 
    
    //   WM HSCROLL,   
    afx_msg void CSampleDialog::OnHScroll(UINT SBCode, UINT Pos, 
    
    CScrollBar *SB) 
    ( 
    //  SB      
    if(SB != (CScrollBar *)&m_Slider) return; 
    
    //      
    m Spin.SetPos(m^Slider.GetPos()) ; 
    ) 
    
    //   WM_VSCROLL, 
    //     
    
    
    afx_msg void CSampleDialog::OnVScroll(UINT SBCode, UINT Pos, 
    CScrollBar *SB) 
    ( 
    
    //  SB        
    if(SB != (CScrollBar *)&m_Spin) return; 
    
    //    
    m_Slider.SetPos(m_Spin.GetPos()) ; 
    } 
    CApp App; //    

     ,          
 .     0  10,   
    5. (     
      .)      
  

    11.                                      285 

     WM_VSCROLL,       
 WM_HSCROLL. 
            . ..  
        
.  , , ,    ,   
  . ,  ,    
   . 

       

           . , 
 ,     .    , 
  ,     
  .    , , 
  , ,   .  MFC  
    CProgressCtrl. 

      

         Create(),    : 

    BOOL CProgressCtrl::Create(DWORD dwStyle, const RECT &SizePos, CWnd 
*0wner, UINT ID); 

     dwStyle   .    
   WS_CHILD, WS_VISIBLE  WS_BORDER.   
      RECT,    
 SiyPos.         
Owner.  ID    . 
     Create()        
    . 

        

         -  CProgressCtrl. 
         (   
),     , 
   .      
  SetPosQ.    : 

    int CProgressCtrl::SetPos(int NewPos); 

      NewPos    .   
 . 
             
SetRangeQ,    : 

    void CProgressCtrl::SetRange(int min, int max) ; 


    286                                    MFC:   

          0  100.    
     0  65535. 
        ,   
 Steplt().        
,  .     10,    .  
       
.       
 ,        
 .   StepItQ : 

    int CProgressCtrl::StepIt (); 

        . 
          SetStepO,   
 : 

    int CProgressCtrl::SetStep(int Amount); 

      Amount   .   
  . 

        

          .   
  ,        
Progress.     0  120   5.     
 Progress    .  
  ,    . 
        : 

    ; PROGRESS.RC 
    ^include <afxres.h> 
    ^include "ids.h" 
    ProgMenu MENU 
    ( 
    POPUP "Demo" 
    { 
    
    MENUITEM "&Progress Bar Demo\tF2", IDM_DIALOG 
    MENUITEM "E&xit\tF3", IDM_EXIT 
    } 
    
    MENUITEM "SHelp", IDM_HELP 
    } 
    
    ProgMenu ACCELERATORS 
    ( 
    VK_F1, IDM_HELP, VIRTKEY 
    VK_F2, IDM_DIALOG, VIRTKEY 
    VK_F3, IDM_EXIT, VIRTKEY 


    7 7.    287 


    ProgDialog DIALOG 18, 18, 140, 92 
    CAPTION "Demonstrate a Progress Bar" 
    STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    { 
    
    DEFPUSHBUTTON "Progress", IDD_PROGBAR, 52, 40, 37, 14, 
    WS_CHILD I WS_VISIBLE | WS_TABSTOP 
    
    PUSHBUTTON "Cancel", IDCANCEL, 52, 65, 37, 14, 
    WS_CHILD I WS_VISIBLE I WS_TABSTOP 
    
    LTEXT "Progress Bar", IDD_STATIC, 10, 22, 100, 10 
    } 
       PROGRESS.,     
    // PROGRESS.H 
    
    //       
    class CMainWin : public CFrameWnd 
    { 
    public: 
    CMainWin() ; 
    
    //    
    afx msg void OnDialogO; 
    afx msg void OnExitO; 
    afx msg void OnHelpO; 
    
    DECLARE_MESSAGE_MAP() 
    ); 
    //      
    class CApp : public CWinApp 
    ( 
    public: 
    BOOL Initlnstance () ; 
    ; 
    //       
    class CSampleDialog : public CDialog 
    { 
    CProgressCtrl m Prog; //   
    int m_ProgPos; //   
    public: 
    CSampleDialog(char *DialogName, CWnd *0wner) : 
    CDialog(DialogName, Owner) () 
    BOOL OnInitDialog() ; 
    afx msg void OnProgress(); 
    DECLARE_MESSAGE_MAP() 
    }; 


    288                                     MFC:  . 

       : 

    //    
    
    ^include <afxwin.h> 
    ^include <afxcmn.h> 
    finclude "progress.h" 
    #include "ids.h" 
    
    CMainWin::CMainWin () 
    { 
    Create(NULL, "Demonstrate Progress Bar", 
    WS_OVERLAPPEDWINDOW, rectDefault, 
    NULL, "ProgMenu") ; 
    InitCommonControls (); 
    
    //     
    if(!LoadAccelTable("ProgMenu")) 
    MessageBox("Cannot Load Accelerators", "Error"); 
    } 
    
    //   
    BOOL CApp::Initlnstance () f 
    m_pMainWnd = new CMainWin; 
    m pMainWnd->ShowWindow(m nCmdShow); 
    m pMainWnd->UpdateWindow(); 
    return TRUE; 
    } 
    
    //     
    BEGIN_MESSAGE_MAP(CMainWin, CPrameWnd) 
    ON_COMMAND(IDM__DIALOG, OnDialog) 
    ON_COMMAND(IDM_EXIT, OnExit) 
    
    ON_COMMAND(IDM_HELP, OnHelp) 
    END_MESSAGE_MAP() 
    
    //   IDM DIALOG 
    afx msg void CMainWin::OnDialog() 
    ( 
    CSampleDialog diagOb("ProgDialog", this); 
    diagOb.DoModal(); //     
    } 
    
    //   IDM_EXIT 
    afx_msg void CMainWin::OnExit() 
    ( 
    int response; 


    71.                                       289 


    response = MessageBox("Quit the Program?", "Exit", MB_YESNO) ; 
    if (response == IDYES) 
    SendMessage(WM CLOSE); //   } 
    
    //   IDM HELP 
    afx msg void CMainWin::OnHelp0 
    { 
    MessageBox("Progress Bar", "Help"); 
    i 
    
    //      
    BEGIN_MESSAGE_MAP(CSampleDialog, CDialog) 
    
    ON_COMMAND(IDD_PROGBAR, OnProgress) 
    END_MESSAGE_MAP() 
    
    //    
    BOOL CSampleDialog::OnInitDialog() 
    
    (                                                                   i 
    RECT r;                                                           ' 
    CDialog::OnInitDialog(); //     
    
    //                                              I 
    .left = 10; .top = 10;                                          I 
    r.right = 200; r.bottom = 30;                                     I 
    m_Prog.Create(WS_VISIBLE | WS_CHILD | WS_BORDER |                 j 
    r, this, IDD_PROGBAR);                              \ 
    
    / /      
    m_Prog.SetRange(0, 120); 
    m_Prog.Set3tep(5) ; 
    
    m ProgPos =0; //   
    return TRUE; 
    //    
    afx msg void CSampleDialog::OnProgress() 
    { 
    m Prog.Stepit(); //      
    m ProgPos += 5; 
    if(m_ProgPos == 120) EndDialog(0) ; 
    } 
     ; //    

         . 11.4. 

    290                                     MFC:   


    . 11.4.     

            ,     
   ,     . 
,      .  
   ,    ,  
   .       , 
      ,     
      Reset! 
             
.      ,    
 . 

    11.                                     291 
