MFC獲得主視窗和父視窗指標

2021-09-23 22:19:08 字數 2496 閱讀 1635

vc++中有關控制代碼和指標及其轉換

1.mfc視窗的控制代碼和指標的轉換

(1) 一般視窗物件都會有乙個其對應的控制代碼變數,所以我們可以取此物件的m_hwnd屬性來得到控制代碼。

(2)使用getsafehwnd函式取得程式所在視窗類的控制代碼

(3)使用fromhandle函式來通過控制代碼得到其想要的指標

其他的一些方法:

getactivewindow 取當前活動視窗控制代碼

afxgetmainwnd   取主視窗控制代碼

getforegroundwindow 取前台視窗控制代碼

findwindow尋找引數指定的視窗

enumwindow列舉視窗

2. 上下文無關裝置的控制代碼和指標的轉換

(1)this->m_hdc

(2)cdc::getsafehdc

(3)可以使用fromhandle函式來通過控制代碼得到其想要的指標

3.gdi物件的控制代碼和指標的轉換

(1)this->m_hobject

(2)cgdiobject::getsafehandle

(3)可以使用fromhandle函式來通過控制代碼得到其想要的指標

4.視窗、控制項的指標和控制代碼的相互轉化

(1)指標轉化為控制代碼

在mfc應用程式中首先要獲得視窗的指標,然後將其轉化為控制代碼

cwnd* pwnd;

handle hwnd = pwnd->getsafehwnd();

(2)控制代碼轉化為指標

在mfc應用程式中首先獲得對話方塊控制項的控制代碼,然後獲得其指標

handle hwnd;

getdlgitem(idc_***,&hwnd);

cwnd * pwnd = fromhandle(hwnd);

獲得程式視窗指標的辦法

(1)獲得主框架視窗指標(任何時候都可以用,只要是mfc程式中)

cwnd* pwnd = afxgetmainwnd();

(2)獲得對話方塊中控制項指標

cwnd* pwnd = getdlgitem(idc_***);

(3)獲得對話方塊中某控制項的控制代碼

handle getdlgitem(m_hdlg,m_nid_dlgitem);

(4)獲得gdi物件的控制代碼

handle m_hgdiobj = m_pgdiobj->getsafehanle();

假如父視窗類名稱為cfatherdlg,那麼在子視窗中可以呼叫getparent獲取父視窗物件指標,如

cfatherdlg* pfather = (cfatherdlg*)getparent();

這樣就能夠用pfather呼叫所有父類的公開方法和類成員變數了

這個**只針對對話方塊應用,文件應用沒用過

其實這個最好的方法還是傳指標

getparent()  ;  獲取到父指標後再進行一下強制轉換

在這裡,你要明白指標都是32位的,只是因為c++是強型別的語言,所以不轉換編譯不通過

因此進行強制轉換可以騙過編譯器

雖然轉換了,但是因為不管什麼指標都是32位,所以並沒有損失資料

比如在cmyview中獲取cframewnd的指標可以這樣

cframewnd *pframewnd = ((cframewnd *)getparent());

在父類中定義了乙個變數 com,子類模式對話方塊,裡面有乙個tab控制項,tab控制項上的一頁上有個button,我想單機button,呼叫父類的com。使用getparent(),有問題,沒有獲取到com的狀態,獲取的**如下:

csetzerodlg *parent = (csetzerodlg *)getparent();

ccalibrationdlg *pparent = (ccalibrationdlg *)parent->getparent();

請問怎麼解決?

獲取乙個類的變數,在該類被例項化後,只要獲取該類的物件或物件指標後通過物件或物件指標即可訪問,這是一般的方法,根本就不用管他是父類還是子類。你想訪問父類中定義了乙個變數 com變數,那麼只要獲取父類物件即可。getparent函式是獲取該視窗的父視窗物件的視窗類指標,而不是獲取父類物件視窗指標。不要把類的父子關係與視窗的父子關係混淆了。
mfc程式設計中常常遇到子視窗向父視窗傳遞引數的情況,這就需要獲得父視窗的指標。

例:主對話方塊cmymaindlg通過按鈕buttona進入對話方塊cmyparentdlg,cmyparentdlg在通過按鈕buttonb進入對話方塊cmychilddlg。現在需要在cmychilddlg分別訪問cmyparentdlg和cmymaindlg的內容,需要在cmychilddlg中加入以下兩條語句:

cmymaindlg    *pmmd = (cmymaindlg*)afxgetmainwnd();     //獲取主視窗指標

cmyparentdlg *pmpd = (cmyparentdlg*)this->getparent();   //獲取父視窗指標

其中,this代表當前視窗指標,指向cmychilddlg;pmmd和pmpd便是指向主視窗和父視窗的指標。

獲得父視窗指標 獲得MFC視窗其它類指標的方法

獲得cmainframe 在cchildframe中可用getparentframe 在其它類中用afxgetmainwnd 獲得cchildframe 在cview中用getparentframe 在cmainframe中用mdigetactive 或getactiveframe 在其它類中用af...

MFC獲得主窗體和父窗體指標

mfc程式設計中經常遇到子窗體向父窗體傳遞引數的情況,這就須要獲得父窗體的指標。例 主對話方塊cmymaindlg通過buttonbuttona進入對話方塊cmyparentdlg。cmyparentdlg在通過buttonbuttonb進入對話方塊cmychilddlg。如今須要在cmychild...

子視窗獲得父視窗得window

我們從乙個介面跳轉至另乙個介面,我們需要知道第乙個介面得使用者是誰,他的使用者放在window.configuration.currentuser 裡面,我們無法開發父頁面,因為父頁面是其他得系統,那麼我們子頁面怎麼獲得人員呢?父頁面狀態 父頁面得繫結值是這樣得,子頁面是我們二次開發得頁面 這裡就遇...