MFC获得主窗口和父窗口指针
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_xxx,&hWnd);
CWnd * pWnd = FromHandle(hWnd);
?
獲得程序窗口指針的辦法
(1)獲得主框架窗口指針(任何時候都可以用,只要是MFC程序中)
CWnd* pWnd = AfxGetMainWnd();
(2)獲得對話框中控件指針
CWnd* pWnd = GetDlgItem(IDC_xxx);
(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());
http://www.cctry.com/thread-2635-1-1.html
在父類中定義了一個變量 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便是指向主窗口和父窗口的指針。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的MFC获得主窗口和父窗口指针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CString与LPCWSTR、LPST
- 下一篇: java会被rust替代吗_自从尝了 R