如果我们想实现在MFC对话框中添加状态栏显示,如何例如分状态栏为两列,第一列显示鼠标的当前位置,第二列显示当前的时间,(如上图)。
1. 首先,打开在资源视图的String Table并添加两个ID:ID_INDICATOR_NISH 和ID_INDICATOR_TIME,如下图
2. 在该对话框的头文件中添加一个CStatusBar类对象
- <span style="font-size:16px;">CStatusBar m_bar;</span>
- <span style="font-size:16px;">static UINT BASED_CODE indicators[]=
- {
- ID_INDICATOR_NISH,
- ID_INDICATOR_TIME
- };
- </span>
- <pre name="code" class="cpp"><span style="font-size:16px;">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);</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>
- <pre></pre>
- <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>
- </span>
- <pre></pre>
- <p></p>
- <pre></pre>
- <span style="font-size:16px">5. 至此,对话框上的状态栏创建已经成功了。若是用户喜欢,可以单独设置状态栏背景颜色,</span>
- <p></p>
- <p><span style="font-size:16px">可以在OnInitDialog()函数中添加代码:</span></p>
- <pre name="code" class="cpp"><span style="font-size:16px;">m_bar.GetStatusBarCtrl().SetBKColor(RGB(180,180,180));</span></pre>
- <p></p>
- <p><span style="font-size:16px">6. 添加时钟显示。首先在OnInitDialog()中添加</span></p>
- <p></p>
- <pre name="code" class="cpp"><span style="font-size:16px;">SetTimer(100,1000,NULL);</span></pre>
- <p></p>
- <p><span style="font-family:monospace"><span style="white-space:pre"><span style="font-size:18px">之后添加WM_TIMER的相应函数:</span></span></span></p>
- <p><span style="font-family:monospace"><span style="font-size:16px"><span style="white-space:pre"></span></span></span></p>
- <pre name="code" class="cpp"><span style="font-size:16px;">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);
- }</span></pre><span style="font-size:16px">7. 添加XY坐标显示。重写函数OnMouseMove():</span>
- <p></p>
- <p><span style="font-family:monospace"><span style="font-size:16px"><span style="white-space:pre"></span></span></span></p>
- <pre name="code" class="cpp"><span style="font-size:16px;">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);
- }</span></pre><span style="font-size:16px"><br>
- 至此,编译运行程序,就可以看到预期的效果了。</span><span style="font-size:16px"><br>
- <br>
- </span><br>
- <br>
- <p></p>
- <div><span style="font-family:monospace; white-space:pre; background-color:rgb(240,240,240); font-size:16px"><br>
- </span></div>
- <div><span style="font-family:monospace; white-space:pre; background-color:rgb(240,240,240); font-size:16px"><br>
- </span></div>
- <pre></pre>
- <pre></pre>
- </pre>