天天看點

MFC SDI單文檔 狀态欄 進度條 啟動畫面程式設計技巧 ...

狀态欄的程式設計離不開  CStatusBar類     CProgressCtrl  進 度條相關的控件      下面我們介紹狀态欄 程式設計技巧  以及在狀态欄添加進度條   應用程式的啟動界面

   狀态欄的添加步驟     SDI 單文檔中      下面是MFC給的 狀态欄的建立步驟

   Construct the CStatusBar object.

   構造一個 CStatusBar對象

   Call the Create (or CreateEx) function to create the status-bar window and attach it to the CStatusBar object.

   調用CreateEx函數建立一個狀态欄 

   Call SetIndicators to associate a string ID with each indicator

   調用SetIndicators 為每個訓示器附加一個 字元串資源ID    static  UINT indicators[]={

                                                                                  ........                                            

                                                                                       };

     1.       下面是在架構類的處理 添加我們自己的狀态欄訓示器   我們可以定義自己的訓示器數組 

             static UINT indicator[] =

          {

 ID_SEPARATOR,           // status line indicator  最長的那個格索引為 0

 ID_INDICATOR_CAPS,    //每個代表一個字元串資源

 ID_INDICATOR_NUM,

 ID_INDICATOR_SCRL,    

         ......             //這裡增加字元串資源 會反映到狀态欄

        };

     OnCreate(LPCREATESTRUCTION lp)函數中  有如下代碼

               if (!m_wndStatusBar.Create(this) ||                 //建立

  !m_wndStatusBar.SetIndicators(indicator,           //設定訓示器的個數

    sizeof(indicator)/sizeof(UINT)))

 {

  TRACE0("Failed to create status bar\n");

  return -1;      // fail to create

 }

  2.給狀态欄 指定ID号的訓示器 增加時間  這時候用到 CTime類 獲得系統時間    下面是代碼 CStatusBar  m_statusBar;   在相應WM_PAINT消息相應函數 OnPaint

       SetTimer(1000,1000,NULL);  

    捕獲WM_TIMER消息    在OnTimer函數中 添加如下代碼

                                   CTime  time=CTime::GetCurrentTime();// 經過靜态方法傳回一個CTime對象

                                   CString str=time.Format("%H:%M:%S"); //格式化時間 到str 

       CClientDC dc(this);  //建立一個 架構類的dc

       CSize size=dc.GetTextExtent(str);  //獲得字元串中在螢幕上顯示的尺寸

       int index =m_wndStatusBar.CommandToIndex(IDS_TIMER);  //通過ID擷取索引

       m_wndStatusBar.SetPaneInfo(index,IDS_TIMER,SBPS_NORMAL,size.cx);  //設定訓示器的寬度  

                                   m_wndStatusBar.SetPaneText(index,str); //設定指定索引訓示器的文本

 3.在狀态欄的 IDS_PROGRESS上添加一個 進度條     CProgressCtrl  類       在架構類增加變量  CProgressCtrl  m_progress;  

 在OnPaint函數  添加代碼響應  WM_PAINT消息 

        CRect rect;    //建立CRect對象

  m_wndStatusBar.GetItemRect(m_wndStatusBar.CommandToIndex(IDS_PROGRESS),&rect); //獲得一個指定索引的訓示器的矩形區域

  if(!m_progress.m_hWnd)   //判斷句柄是否為空

  {

 m_progress.Create(PBS_SMOOTH|WS_CHILD|WS_VISIBLE,rect,&m_wndStatusBar,123);     //如果句柄為空那麼建立進度條

  }

  else

   m_progress.MoveWindow(&rect);  //否則移動到目前區域

 m_progress.SetPos(50);  //設定進度條初始位置  50 

 在 OnTimer函數中加上    m_stausBar.StepIt();//進度條按指定步長 一秒 前進一次

4.在最長的訓示器上顯示 視圖的X  Y坐标    我們需要相應視圖的  WM_MOUSEMOVE事件  并且調用 架構類的函數執行  

#include "MainFrm.h"

void CMyView::OnMouseMove(UINT nFlags, CPoint point)

{

   CString str="";

   str.Format("x=%d,y=%d",point.x,point.y);

     //   (((CMainFrame*)GetParent())->m_wndStatusBar).SetWindowText(str);   //直接通過狀态欄指針設定索引為0訓示器

    //      (((CMainFrame*)GetParent())->m_wndStatusBar).SetPaneText(0,str);  //設定按鈕文本 索引為0

    //    ((CMainFrame*)GetParent())->SetMessageText(str);//架構類的函數 直接設定 索引為0的狀态欄訓示器文本

    // ((CMainFrame*)GetParent())->GetMessageBar()->SetWindowText(str);  //通過架構類函數獲得 狀态欄指針 然後調用SetWindowText設定文本

  GetParent()->GetDescendantWindow(AFX_IDW_STATUS_BAR)->SetWindowText(str);    //CWnd類的函數獲得一個子孫窗體的指針 我們可以傳遞狀态欄ID獲得

 CView::OnMouseMove(nFlags, point);

}

5.增加啟動畫面   我們可以利用向導增加之後 我們自行設定 啟動畫面的 style

project->add to project  ->comments  controls    添加->  vc++  components  -> splash screen   就完成了啟動畫面的添加  

對于啟動時間  畫面 我們可以自行在生成的類中設定

繼續閱讀