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 裡面,我們無法開發父頁面,因為父頁面是其他得系統,那麼我們子頁面怎麼獲得人員呢?父頁面狀態 父頁面得繫結值是這樣得,子頁面是我們二次開發得頁面 這裡就遇...