解析VC++6中的指針
發(fā)表時(shí)間:2023-08-23 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]摘要:指針,在VC++中是很常見(jiàn)的,這里我們并不打算去詳細(xì)講解在C++中那樣的指針用法(我們會(huì)有另外的文章去詳細(xì)討論),這里主要講一下VC++中常見(jiàn)的對(duì)指針獲取的方法,包括:工具條、狀態(tài)條、控件和窗...
摘要:指針,在VC++中是很常見(jiàn)的,這里我們并不打算去詳細(xì)講解在C++中那樣的指針用法(我們會(huì)有另外的文章去詳細(xì)討論),這里主要講一下VC++中常見(jiàn)的對(duì)指針獲取的方法,包括:工具條、狀態(tài)條、控件和窗口的指針。
獲取工具條的指針
在缺省狀態(tài)下,有一個(gè)默認(rèn)的工具條AFX_IDW_TOOLBAR,我們可以根據(jù)相應(yīng)的ID去獲取工具條指針,方法如下:
CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
是不是很簡(jiǎn)單?
獲取狀態(tài)條的指針
在缺省狀態(tài)下,有一個(gè)默認(rèn)的狀態(tài)條AFX_IDW_STATUS_BAR,我們自然也可以根據(jù)相應(yīng)的ID去獲取狀態(tài)條指針,方法如下:
CStatusBar* pToolBar=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
是不是同樣很簡(jiǎn)單?
獲取控件的指針
這里有兩種方法。
一、調(diào)用CWnd: : GetDlgItem,獲取一個(gè)CWnd*指針調(diào)用成員函數(shù)。例如,我們想獲取CButton指針,方法如下:
CButton* pButton=(CButton*) GetDlgItem (IDC_MYBUTTON);
二、可以使用ClassWizard將控件和成員變量聯(lián)系起來(lái)。在ClassWizard中簡(jiǎn)單地選擇Member Variables標(biāo)簽,然后選擇Add Variable …按鈕。如果在對(duì)話資源編輯器中,按下Ctrl鍵并雙擊控件即可轉(zhuǎn)到Add Member Variable對(duì)話。
在文檔類中調(diào)用視圖類指針
我們可以利用文檔類的成員函數(shù)GetFirstView()和GetNextView()遍歷視圖。
在視圖類中調(diào)用文檔類
其實(shí),在視圖類中有一個(gè)現(xiàn)成的成員函數(shù)供我們使用,那就是:GetDocument();利用它我們可以很容易的得到文檔類指針,我們先看一下GetDocument()函數(shù)的實(shí)現(xiàn):
CColorButtonDoc* CColorButtonView::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CColorButtonDoc)));
return (CColorButtonDoc*)m_pDocument;
}
這里實(shí)際上是將m_pDocument強(qiáng)制轉(zhuǎn)換成CColorButtonDoc*,也就是我們想要的。
在框架類中調(diào)用文檔類、視圖類
這里我們可以利用GetActiveXXXXX()去掉用當(dāng)前激活的文檔和視圖:
CMyDoc* pDoc=(CMyDoc*)GetActiveDocument();
CMyView* pView=(CMyView*)GetActiveView();
獲得應(yīng)用程序指針
這個(gè)很簡(jiǎn)單,一句話搞定:
CMyApp* pApp=(CMyApp*)AfxGetApp();
獲得主框架指針
在類CWinThread里面有一個(gè)公有的成員變量:CWnd* m_pMainWnd; 它存在的主要目的就是提供我們獲得CWnd指針,我們可以利用它來(lái)達(dá)到我們的目的:
CMainFrame* pFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);
通過(guò)鼠標(biāo)獲得子窗口指針
這里我們要用到一個(gè)不太常用的函數(shù):ChildWindowFromPoint。他的原型如下:
CWnd* ChildWindowFromPoint(POINT point) const;
CWnd* ChildWindowFromPoint(POINT point,UINT nFlags) const;
這個(gè)函數(shù)用于確定包含指定點(diǎn)的子窗口,如果指定點(diǎn)在客戶區(qū)之外,函數(shù)返回NULL;如果指定點(diǎn)在客戶區(qū)內(nèi),但是不屬于任何一個(gè)子窗口,函數(shù)返回該CWnd的指針;如果有多個(gè)子窗口包含指定點(diǎn),則返回第一個(gè)子窗口的指針。不過(guò),這里還要注意的是:該函數(shù)返回的是一個(gè)偽窗口指針,不能將它保存起來(lái)供以后使用。
對(duì)于第二個(gè)參數(shù)nFlags有幾個(gè)含義:
CWP_ALL file://不忽略任何子窗口
CWP_SKIPNIVSIBLE file://忽略不可見(jiàn)子窗口
CWP_SKIPDISABLED file://忽略禁止的子窗口
CWP_SKIPRANSPARENT file://忽略透明子窗口