WEB开发网
开发学院软件开发VC 计算MDI子窗口数,仅显示文件夹的打开对话框 阅读

计算MDI子窗口数,仅显示文件夹的打开对话框

 2006-07-19 11:29:33 来源:WEB开发网   
核心提示: CWinList& wl = theApp.m_winlist;for (CWinList::iterator it=wl.begin(); it!=wl.end(); it++) {CWnd* pWnd = *it;// do something}我写了一个小程序 WinCount,它用
CWinList& wl = theApp.m_winlist;
for (CWinList::iterator it=wl.begin(); it!=wl.end(); it++) {
  CWnd* pWnd = *it;
  // do something
}

我写了一个小程序 WinCount,它用 CWinList 计数 MDI 子窗口。运行画面如 Figure 2 所示。

Figure 2 计算子窗口的 WinCount

WinCount 右下角有一个状态栏窗格显示打开的窗口数量,该程序的“关于”对话框列出了窗口的标题。这个“关于”对话框就是用 CWinList::iterator 来产生它的反馈消息;该状态栏窗格是一个标准的 MFC 指示器窗格,使用 ON_UPDATE_COMMAND_UI 来显示视图数量。

void CMainFrame::OnUpdateWinIndicator(CCmdUI* pCmdUI)
{
  CString s;
  s.Format(_T("Open:%d"), theApp.m_winlist.size());
  pCmdUI->SetText(s);
}

List::size 是 STL list 方法,返回列表中的项数,注意在 WinCount 中,视图与子窗口是一对一的,所以计算出的视图数就是 MDI 子窗口的数量。如果你的 MDI 是更复杂的多视图子框架,那么你必须重写 CMDIChildWnd 以便在派生类中进行 Add/Remove 调用,或者你可以用其它窗口类,保证它在每个子框架中只出现一次。你可以随便使用多少个 CWinList 来跟踪不同的窗口类。

我知道我们处在一个令人兴奋得 MFC、.NET 和 GUI 框架时代,很多事情都可以让它们代劳——但不要忘了如何使用基本的数据结构!

[编辑更新 - 5/9/2005:在 Figure 1 所示的 CWinList 原创实现里,它是从 list<CWnd*> 派生而来的。然而,一般情况下,从 STL 容器派生被认为是一种糟糕的做法,因为这样做搞不好会导致不可预知的结果。本文最终下载的代码是一个新版本的 CWinList,使用 typedef。需要用 push_back 和 remove 来代替 Add 和 Remove。]

上一页  1 2 3 4 5 6  下一页

Tags:计算 MDI 窗口

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