VC中編程對於剛剛開始學習的同學,最大的障礙和問題就是訊息機制和指標擷取與操作。其實這些內容基本上是每本VC學習工具書上必講的內容,而且通過MSDN很多問題都能解決。一般我們使用的架構是VC提供的Wizard產生的MFC App Wizard(exe)架構,無論是多文檔還是單文檔,都存在指標擷取和操作問題。下面這節內容主要是一般的架構,然後再講多線程中的指標使用。使用到的類需要包含響應的標頭檔。首先一般獲得本類(視,文檔,對話方塊都支援)執行個體指標this,用this的目的,主要可以通過類中的函數向其他類或者函數中髮指針,以便於在非本類中操作和使用本類中的 功能。
目錄:
1) 在View中獲得Doc指標
2) 在App中獲得MainFrame指標
3) 在View中獲得MainFrame指標
4) 獲得View(已建立)指標
5) 獲得當前文檔指標
6) 獲得狀態列與工具列指標
7) 獲得狀態列與工具列變數
8) 在Mainframe獲得菜單指標
9) 在任何類中獲得應用程式類
10) 從文檔類取得視圖類的指標
1) 在View中獲得Doc指標
CYouSDIDoc *pDoc=GetDocument();一個視只能有一個文檔。
2) 在App中獲得MainFrame指標
CWinApp 中的 m_pMainWnd變數就是MainFrame的指標
也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
3) 在View中獲得MainFrame指標
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
4) 獲得View(已建立)指標
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();
5) 獲得當前文檔指標
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
6) 獲得狀態列與工具列指標
CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果架構中加入工具列和狀態列變數還可以這樣
(CMainFrame *)GetParent()->m_wndToolBar;
(CMainFrame *)GetParent()->m_wndStatusBar;
8) 在Mainframe獲得菜單指標
CMenu *pMenu=m_pMainWnd->GetMenu();
9) 在任何類中獲得應用程式類
用MFC全域函數AfxGetApp()獲得。
10) 從文檔類取得視圖類的指標
從文檔獲得視圖類指標目的一般為了控制同一文檔的多個視圖的定位問題,我的體會特別是文文書處理CEditView當產生多個視圖類時,這個功能是非常需要的。
CDocument類提供了兩個函數用於視圖類的定位:
GetFirstViewPosition()和GetNextView()
virtual POSITION GetFirstViewPosition() const;
virtual CView* GetNextView(POSITION& rPosition) const;