解析VC++6中的指標 (轉)

worldblog發表於2008-01-31
解析VC++6中的指標 (轉)[@more@]

  摘要:指標,在VC++中是很常見的,這裡我們並不打算去詳細講解在C++中那樣的指標用法(我們會有另外的文章去詳細討論),這裡主要講一下VC++中常見的對指標獲取的方法,包括:工具條、狀態條、和視窗的指標。

  獲取工具條的指標
  在預設狀態下,有一個預設的工具條AFX_IDW_TOOLBAR,我們可以根據相應的ID去獲取工具條指標,方法如下:
  CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
  是不是很簡單?
 
  獲取狀態條的指標
  在預設狀態下,有一個預設的狀態條AFX_IDW_STATUS_BAR,我們自然也可以根據相應的ID去獲取狀態條指標,方法如下:
  CStatar* pToolBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
  是不是同樣很簡單?

  獲取控制元件的指標
  這裡有兩種方法。
  一、CWnd: : GetDlgItem,獲取一個CWnd*指標呼叫成員。例如,我們想獲取CButton指標,方法如下:
  CButton* pButton=(CButton*) GetDlgItem (IDC_MYBUTTON);
  二、可以使用ClassWizard將控制元件和成員變數聯絡起來。在ClassWizard中簡單地選擇Member Variables標籤,然後選擇Add Variable …按鈕。如果在對話資源編輯器中,按下Ctrl鍵並雙擊控制元件即可轉到Add Member Variable對話。

  在文件類中呼叫檢視類指標
  我們可以利用文件類的成員函式GetFirstView()和GetNextView()遍歷檢視。

  在檢視類中呼叫文件類
  其實,在檢視類中有一個現成的成員函式供我們使用,那就是:GetDocument();利用它我們可以很容易的得到文件類指標,我們先看一下GetDocument()函式的實現:
  CColorButtonDoc* CColorButtonView::GetDocument()
  {
 ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CColorButtonDoc)));
 return (CColorButtonDoc*)m_pDocument;
  }
  這裡實際上是將m_pDocument強制轉換成CColorButtonDoc*,也就是我們想要的。

  在類中呼叫文件類、檢視類
  這裡我們可以利用GetXXXX()去掉用當前啟用的文件和檢視:
  CMyDoc*  pDoc=(CMyDoc*)GetActiveDocument();
  CMyView* pView=(CMyView*)GetActiveView();

  獲得應用指標
  這個很簡單,一句話搞定:
  CMyApp* pApp=(CMyApp*)AfxGetApp();

  獲得主框架指標
  在類CWinThread裡面有一個公有的成員變數:CWnd* m_pMainWnd; 它存在的主要目的就是提供我們獲得CWnd指標,我們可以利用它來達到我們的目的:
  CMainFrame* pFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);
 
  透過滑鼠獲得子視窗指標
  這裡我們要用到一個不太常用的函式:ChildWindowFromPoint。他的原型如下:
  CWnd* ChildWindowFromPoint(POINT point) const;
  CWnd* ChildWindowFromPoint(POINT point,UINT nFlags) const;
  這個函式用於確定包含指定點的子視窗,如果指定點在客戶區之外,函式返回NULL;如果指定點在客戶區內,但是不屬於任何一個子視窗,函式返回該CWnd的指標;如果有多個子視窗包含指定點,則返回第一個子視窗的指標。不過,這裡還要注意的是:該函式返回的是一個偽視窗指標,不能將它儲存起來供以後使用。
  對於第二個引數nFlags有幾個含義:
  CWP_ALL  忽略任何子視窗
  CWP_SKIPNIVSIBLE  略不可見子視窗
  CWP_SKIPDISABLED  略禁止的子視窗
  CWP_SKIPRANSPARENT  略透明子視窗


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-998889/,如需轉載,請註明出處,否則將追究法律責任。

相關文章