解析VC 6中的指標

2021-04-08 19:26:51 字數 1841 閱讀 4392

解析vc++6中的指標

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

獲取工具條的指標

在預設狀態下,有乙個預設的工具條afx_idw_*******,我們可以根據相應的id去獲取工具條指標,方法如下:

c******** p*******=(c********)afxgetmainwnd()->getdescendantwindow(afx_idw_*******);

是不是很簡單?

獲取狀態條的指標

在預設狀態下,有乙個預設的狀態條afx_idw_status_bar,我們自然也可以根據相應的id去獲取狀態條指標,方法如下:

cstatusbar* p*******=(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()

這裡實際上是將m_pdocument強制轉換成ccolorbuttondoc*,也就是我們想要的。

在框架類中呼叫文件類、檢視類

這裡我們可以利用getactive***xx()去掉用當前啟用的文件和檢視:

cmydoc*  pdoc=(cmydoc*)getactivedocument();

cmyview* pview=(cmyview*)getactiveview();

獲得應用程式指標

這裡我們要用到乙個不太常用的函式:childwindowfrompoint。他的原型如下:

cwnd* childwindowfrompoint(point point) const;

cwnd* childwindowfrompoint(point point,uint nflags) const;

這個函式用於確定包含指定點的子視窗,如果指定點在客戶區之外,函式返回null;如果指定點在客戶區內,但是不屬於任何乙個子視窗,函式返回該cwnd的指標;如果有多個子視窗包含指定點,則返回第乙個子視窗的指標。不過,這裡還要注意的是:該函式返回的是乙個偽視窗指標,不能將它儲存起來供以後使用。

對於第二個引數nflags有幾個含義:

cwp_all             file://不忽略任何子視窗

cwp_skipnivsible    file://忽略不可見子視窗

cwp_skipdisabled    file://忽略禁止的子視窗

cwp_skipransparent  file://忽略透明子視窗

解析VC 6中的指標

摘要 指標,在vc 中是很常見的,這裡我們並不打算去詳細講解在c 中那樣的指標用法 我們會有另外的文章去詳細討論 這裡主要講一下vc 中常見的對指標獲取的方法,包括 工具條 狀態條 控制項和視窗的指標。獲取工具條的指標 在預設狀態下,有乙個預設的工具條afx idw 我們可以根據相應的id去獲取工具...

vc6 控制項

詳見msdn 為控制項新增乙個控制項型變數然後訪問之 edit idc edit1 m edit1 void ctest1dlg onbutton1 也可以直接使用id訪問 cstring str int i getdlgitemtextw idc edit1,str afxmessagebox s...

VC6中新增訊息對映

今天發現程式未顯示about box,分析發現,是因為程式未處理wm syscommand命令導致 但vc的classview裡好像不能直接處理該訊息 只好手動新增.記錄下方法和需要注意的地方。處理mfc的classview中沒有定義的訊息需要注意三個地方,如wm syscommand訊息,可以接收...