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

MFC 架構下各類對象互相獲取指針的總結(App、Frame、View、Doc、Menu、Toolbar、StatusBar)

     編輯:關於VC++

核心獲取路徑速查表

1. 獲取應用程序對象 (CWinApp 派生類)

AfxGetApp()           // 返回 CWinApp* 指針
AfxGetInstanceHandle() // 返回 HINSTANCE

2. 文檔-視圖-框架鏈路

SDI (單文檔界面):

CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd();
CView* pView = pFrame->GetActiveView();
CDocument* pDoc = pView->GetDocument();

MDI (多文檔界面):

CMDIFrameWnd* pMainFrame = (CMDIFrameWnd*)AfxGetMainWnd();
CMDIChildWnd* pChild = pMainFrame->MDIGetActive();
CView* pView = pChild->GetActiveView();
CDocument* pDoc = pView->GetDocument();

3. 從文檔獲取視圖

POSITION pos = pDoc->GetFirstViewPosition();
while (pos) {
    CView* pView = pDoc->GetNextView(pos);
    // 使用 pView...
}

4. 獲取主菜單

CMenu* pMenu = AfxGetApp()->m_pMainWnd->GetMenu();

5. 獲取工具欄與狀態欄

方法 A(視圖類中):

CMainFrame* pFrame = (CMainFrame*)GetParent();
CToolBar& toolbar = pFrame->m_wndToolBar;
CStatusBar& statusBar = pFrame->m_wndStatusBar;

方法 B(通用,通過主窗口查找子窗口):

CStatusBar* pStatusBar = (CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar* pToolBar = (CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);

關鍵提醒:類型轉換

上述 API 返回的均為基類指針(CWinApp*、CFrameWnd*、CView* 等),使用自定義派生類成員時必須強制轉換:

// 正確用法
((CMyApp*)AfxGetApp())->MyCustomFunction();
((CMainFrame*)AfxGetMainWnd())->m_wndToolBar.SetButtonInfo(...);

注意: MDI 下 AfxGetMainWnd() 返回 CMDIFrameWnd*,SDI 下返回 CFrameWnd*,轉換時需匹配實際框架類型。

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