MFC 添加状态栏

来源:互联网 发布:c语言中产生随机数 编辑:程序博客网 时间:2024/05/01 14:10

如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图)。

1. 首先,打开在资源视图的String Table并添加两个ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下图

2. 在该对话框的头文件中添加一个CStatusBar类对象

[cpp] view plaincopy
  1. <span style="font-size:16px;">CStatusBar m_bar;</span>  


3. 打开该对话框的cpp文件,并在最顶端添加以下代码:

[cpp] view plaincopy
  1. <span style="font-size:16px;">static UINT BASED_CODE indicators[]=  
  2. {  
  3.     ID_INDICATOR_NISH,  
  4.     ID_INDICATOR_TIME  
  5. };  
  6.   
  7. </span>  
4. 接下来创建状态栏,在OnInitDialog()函数如下代码:

[cpp] view plaincopy
  1. <pre name="code" class="cpp"><span style="font-size:16px;">m_bar.Create(this);//创建状态栏  
  2.   
  3. m_bar.SerIndicators(indicators, sizeof(indicators)/sizeof(UINT)); //设置状态栏数目  
  4.   
  5. CRect rect;  
  6. GetClientRect(&rect);  
  7. //设置各栏长度  
  8. m_bar.SetPaneInfo(0, ID_INDICATOR_NISH, SBPS_NORMAL, rect.Width()-100);</span><pre name="code" class="cpp"><span style="font-size:16px;">m_bar.SetPaneInfo(1, ID_INDICATOR_TIME, SBPS_STRETCH, 0);</span></pre><span style="font-size:16px">//在ping屏幕上绘制状态栏</span>  
  9. <pre></pre>  
  10. <pre name="code" class="cpp"><span style="font-size:16px;">RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, ID_INDICATOR_TIME);</span></pre><span style="font-size:16px"><br>  
  11. </span>  
  12. <pre></pre>  
  13. <p></p>  
  14. <pre></pre>  
  15. <span style="font-size:16px">5. 至此,对话框上的状态栏创建已经成功了。若是用户喜欢,可以单独设置状态栏背景颜色,</span>  
  16. <p></p>  
  17. <p><span style="font-size:16px">可以在OnInitDialog()函数中添加代码:</span></p>  
  18. <pre name="code" class="cpp"><span style="font-size:16px;">m_bar.GetStatusBarCtrl().SetBKColor(RGB(180,180,180));</span></pre>  
  19. <p></p>  
  20. <p><span style="font-size:16px">6. 添加时钟显示。首先在OnInitDialog()中添加</span></p>  
  21. <p></p>  
  22. <pre name="code" class="cpp"><span style="font-size:16px;">SetTimer(100,1000,NULL);</span></pre>  
  23. <p></p>  
  24. <p><span style="font-family:monospace"><span style="white-space:pre"><span style="font-size:18px">之后添加WM_TIMER的相应函数:</span></span></span></p>  
  25. <p><span style="font-family:monospace"><span style="font-size:16px"><span style="white-space:pre"></span></span></span></p>  
  26. <pre name="code" class="cpp"><span style="font-size:16px;">void CDlgStatusBarDlg::OnTimer(UINT nIDEvent)  
  27. {  
  28.     if(nIDEvent==100)  
  29.     {  
  30.         CTime t1;  
  31.         t1=CTime::GetCurrentTime();  
  32.         m_bar.SetPaneText(1,t1.Format("%H:%M:%S"));  
  33.     }  
  34.     CDialog::OnTimer(nIDEvent);  
  35. }</span></pre><span style="font-size:16px">7. 添加XY坐标显示。重写函数OnMouseMove():</span>  
  36. <p></p>  
  37. <p><span style="font-family:monospace"><span style="font-size:16px"><span style="white-space:pre"></span></span></span></p>  
  38. <pre name="code" class="cpp"><span style="font-size:16px;">void CDlgStatusBarDlg::OnMouseMove(UINT nFlags, CPoint point)   
  39. {  
  40.     CString s;  
  41.     s.Format("X=%d Y=%d",point.x,point.y);  
  42.     m_bar.SetPaneText(0,s);  
  43.     CDialog::OnMouseMove(nFlags, point);  
  44. }</span></pre><span style="font-size:16px"><br>  
  45. 至此,编译运行程序,就可以看到预期的效果了。</span><span style="font-size:16px"><br>  
  46. <br>  
  47. </span><br>  
  48. <br>  
  49. <p></p>  
  50. <div><span style="font-family:monospace; white-space:pre; background-color:rgb(240,240,240); font-size:16px"><br>  
  51. </span></div>  
  52. <div><span style="font-family:monospace; white-space:pre; background-color:rgb(240,240,240); font-size:16px"><br>  
  53. </span></div>  
  54. <pre></pre>  
  55. <pre></pre>  
  56.   
  57. </pre>  
0 0