WEB开发网
开发学院软件开发VC MFC程序员的WTL指南(4)工具条与状态条 阅读

MFC程序员的WTL指南(4)工具条与状态条

 2006-07-22 22:03:37 来源:WEB开发网   
核心提示: 下面是我们对SetPanes()的调用:// Create the status bar panes.int anPanes[] = { ID_DEFAULT_PANE, IDPANE_STATUS,IDPANE_CAPS_INDICATOR };m_wndStatusBar.SetPan

下面是我们对SetPanes()的调用:

// Create the status bar panes.
int anPanes[] = { ID_DEFAULT_PANE, IDPANE_STATUS,
         IDPANE_CAPS_INDICATOR };
  m_wndStatusBar.SetPanes ( anPanes, 3, false );

IDPANE_STATUS对应的字符串是“@@@@”,这样应该有足够的宽度(希望是)显示两个时钟状态字符串“Running”和“Stopped”。和MFC一样,你需要自己估算窗格的宽度,IDPANE_CAPS_INDICATOR对应的字符串是“CAPS”。

窗格的UI状态更新

为了更新窗格上的文本,我们需要将相应的窗格添加到UI更新表:

BEGIN_UPDATE_UI_MAP(CMainFrame)
    //...
    UPDATE_ELEMENT(1, UPDUI_STATUSBAR) // clock status
    UPDATE_ELEMENT(2, UPDUI_STATUSBAR) // CAPS indicator
  END_UPDATE_UI_MAP()

这个宏的第一个参数是窗格的索引而不是ID,这很不幸,因为如果你重新排列了窗格,你要记得更新UI更新表。

由于我们在调用SetPanes()是第三个参数是false,所以窗格初始是空的。我们下一步要做得就是将时钟状态窗格的初始文本设为“Running”

// Set the initial text for the clock status pane.
  UISetText ( 1, _T("Running") );

和前面一样,第一个参数是窗格的索引。UISetText()是状态条唯一支持的UI更新函数。

最后,在CMainFrame::OnIdle()中添加对UIUpdateStatusBar()函数的调用,使状态条的窗格能够在空闲时间被更新:

BOOL CMainFrame::OnIdle()
{
  UIUpdateToolBar();
  UIUpdateStatusBar();
  return FALSE;
}

当你使用UIUpdateStatusBar()时CUpdateUI的一个问题就暴露出来了--菜单项的文本在调用UISetText()后没有改变!如果你在看WTLClock3工程的代码,时钟的开始/停止菜单项被移到了Clock菜单,在菜单项命令的响应处理函数中设置菜单项的文本。无论如何,如果当前调用的是UIUpdateStatusBar(),那么对UISetText()的调用就不会起作用。我没有研究这个问题是否可以被修复,所以如果你打算改变菜单的文本,你需要留意这个地方。

最后,我们需要检查CAPS LOCK键的状态,更新相应的两个窗格。这些代码是通过OnIdle()被调用的,所以程序会在每次空闲时间检查它们的状态。

BOOL CMainFrame::OnIdle()
{
  // Check the current Caps Lock state, and if it is on, show the
  // CAPS indicator in pane 2 of the status bar.
  if ( GetKeyState(VK_CAPITAL) & 1 )
    UISetText ( 2, CString(LPCTSTR(IDPANE_CAPS_INDICATOR)) );
  else
    UISetText ( 2, _T("") );
  UIUpdateToolBar();
  UIUpdateStatusBar();
  return FALSE;
}

第一次调用UISetText()时将从字符串资源中装载“CAPS”字符串,但是在CString的构造函数中使用了一个机灵的窍门(有充分的文档说明)。

在完成所有的代码之后,状态条看起来是这个样子:

承上启下:有关对话框的话题

在第四章我将介绍对话框的用法(包括ATL的类和WTL的增强功能),控件的包装类和WTL有关对话框消息处理的改进。

引用和参考

"How to use the WTL multipane status bar control" by Ed Gadziemski 更详细的介绍了CMultiPaneStatusBarCtrl类的用法。 修改记录

2003年4月11日,本文第一次发表。

上一页  5 6 7 8 9 10 

Tags:MFC 程序员 WTL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接