首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

在 MDI 應用程式中啟動指定的開啟文件

     編輯:關於VC++

問題背景

在 MFC 的 MDI (Multiple Document Interface) 架構中,開發者常遇到這樣的需求:使用者在樹狀控制項中雙擊某個項目,該項目儲存著一個 CDocument 指標,程式需要將對應的文件視窗帶到前景並使其成為作用中的視窗。乍看之下似乎只要「啟動文件」即可,但實際上 文件本身無法被啟動,只有視窗可以。

核心觀念釐清

在 MDI 架構下,每個文件通常關聯一個或多個視圖 (CView),而每個視圖又包含在一個 MDI 子視窗框架 (CMDIChildWnd) 中。因此,要讓某個文件成為作用中文件,實際上是要啟動其所屬的 MDI 子視窗框架。

實作步驟

  1. 取得文件的第一個視圖
    假設該文件只有一個視圖(若有多個需自行決定啟動哪一個):
POSITION pos = pDoc->GetFirstViewPosition();
CView* pView = pDoc->GetNextView(pos);
  1. 取得包含該視圖的父框架視窗
    透過 GetParentFrame() 可獲得第一個 CFrameWnd 父視窗,在 MDI 應用中這通常是 CMDIChildWnd:
CFrameWnd* pFrame = pView->GetParentFrame();
  1. 啟動 MDI 子視窗
    將指標轉型為 CMDIChildWnd 並呼叫 MDIActivate():
CMDIChildWnd* pChild = static_cast<CMDIChildWnd*>(pFrame);
pChild->MDIActivate();

注意事項

  • 若文件有多個視圖,GetFirstViewPosition() / GetNextView() 只會取得第一個,需依據業務邏輯選擇適當的視圖。
  • 確認應用程式確實為 MDI 架構,否則 CMDIChildWnd 轉型會失敗。
  • 此方法適用於 MFC 6.0 及更新版本。

總結

透過「文件 → 視圖 → 父框架 → MDI 啟動」的指標鏈結,即可在 MDI 應用中將任意開啟的文件視窗帶到前景,實現使用者預期的「啟動文件」行為。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved