在MFC對話框中添加狀態欄


如果我們想實現在MFC對話框中添加狀態欄顯示,如何例如分狀態欄為兩列,第一列顯示鼠標的當前位置,第二列顯示當前的時間,(如上圖)。

1. 首先,打開在資源視圖的String Table並添加兩個ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下圖

2. 在該對話框的頭文件中添加一個CStatusBar類對象

 

CStatusBar m_bar;

 

 

3. 打開該對話框的cpp文件,並在最頂端添加以下代碼:

 

static UINT BASED_CODE indicators[]=
{
    ID_INDICATOR_NISH,
    ID_INDICATOR_TIME
};

4. 接下來創建狀態欄,在OnInitDialog()函數如下代碼:

 

 

m_bar.Create(this);//創建狀態欄

m_bar.SerIndicators(indicators, sizeof(indicators)/sizeof(UINT)); //設置狀態欄數目

CRect rect;
GetClientRect(&rect);
//設置各欄長度
m_bar.SetPaneInfo(0, ID_INDICATOR_NISH, SBPS_NORMAL, rect.Width()-100);
m_bar.SetPaneInfo(1, ID_INDICATOR_TIME, SBPS_STRETCH, 0);
//在ping屏幕上繪制狀態欄
 
        
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, ID_INDICATOR_TIME);

 
        

 

 
        
5. 至此,對話框上的狀態欄創建已經成功了。若是用戶喜歡,可以單獨設置狀態欄背景顏色,

 

可以在OnInitDialog()函數中添加代碼:

m_bar.GetStatusBarCtrl().SetBKColor(RGB(180,180,180));

 當設置背景顏色無效是,請檢查編碼方式選擇的是什么,應該是和編程環境有關。比如Unicode。或者選擇使用多字節字符集

 

6. 添加時鍾顯示。首先在OnInitDialog()中添加

 

SetTimer(100,1000,NULL);

 

之后添加WM_TIMER的相應函數:

 

void CDlgStatusBarDlg::OnTimer(UINT nIDEvent)
{
    if(nIDEvent==100)
    {
        CTime t1;
        t1=CTime::GetCurrentTime();
        m_bar.SetPaneText(1,t1.Format("%H:%M:%S"));
    }
    CDialog::OnTimer(nIDEvent);
}
7. 添加XY坐標顯示。重寫函數OnMouseMove():

 

 

void CDlgStatusBarDlg::OnMouseMove(UINT nFlags, CPoint point) 
{
    CString s;
    s.Format("X=%d Y=%d",point.x,point.y);
    m_bar.SetPaneText(0,s);
    CDialog::OnMouseMove(nFlags, point);
}

至此,編譯運行程序,就可以看到預期的效果了。

方法二:
  UINT array[4];
 
for(int i=0;i<4;i++)
 
{
   array[i] = 1001 + i;
  }
 
m_StatusBar.Create(this); //創建狀態欄窗口
 
m_StatusBar.SetIndicators(array,sizeof(array)/sizeof(UINT)); //添加面板
 
for(int n=0;n<4;n++)
  {
   m_StatusBar.SetPaneInfo(n,array[n],0,100); //設置面板寬度
  }
 
CTime time = CTime::GetCurrentTime();
 
m_StatusBar.SetPaneText(0,_T("當前用戶:"));//設置面板文本
 
m_StatusBar.SetPaneText(1,_T("TM"));
 
m_StatusBar.SetPaneText(2,_T("當前日期:"));
 
m_StatusBar.SetPaneText(3,time.Format("%Y-%m-%d"));
 
RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM