MFC中獲取各個窗體之間的控制代碼或者指標物件的方法

2021-07-29 05:54:37 字數 3812 閱讀 6030

mfc在很多的對話方塊操作中,我們經常要用到在乙個對話方塊中呼叫另乙個對話方塊的函式或變數.可以用如下方法來解決.

hwnd hwnd=::findwindow(null,_t("sphere"));      //得到對話方塊的控制代碼

c***dialog* pwnd= (c***dialog*)c***dialog::fromhandle(hwnd); //由控制代碼得到對話方塊的物件指標

pwnd->***( );   //呼叫c***dialog中的函式***();

以上參考:

通過視窗類函式:cwnd *getwindow獲得視窗指標,pwnd->m_hwnd(the handle of the windows window attached to this cwnd)在::fromhandle(hwnd);

獲取主視窗控制代碼:

cwnd *wnd  = afxgetmainwnd();

hwnd hwnd = wnd->getsafehwnd();

設定控制項為視窗焦點:

getdlgitem(idc_tree1)->setfocus();

獲取控制項控制代碼:

hwnd hwndctrl = ::getdlgitem(mainhwnd, idc_tree1);

//獲取樹形控制項的控制代碼

idc_tree idc_combo1

獲取當前最上層視窗的控制代碼: hwnd  mainhwnd = ::getforegroundwindow();

//獲取當前

topmost

的視窗控制代碼

獲取當前視窗的焦點控制代碼:

hwnd  currentfocus = ::getfocus();

(一)mfc中獲得各個類的控制代碼總結

vc中程式設計,最大的障礙和問題就是訊息機制和指標獲取與操作。其實這些內容基本上是每本vc學習工具書上

必講的內容,而且通過msdn很多問題都能解決。

下面文字主要是個人在程式設計中指標使用的一些體會,說的不當的地方請指正。

下面這節內容主要是一般的框架,然後再講多執行緒中的指標使用。使用到的類需要包含響應的標頭檔案。首先一般獲得本類(視,文件,對話方塊都支援)例項指標this,用this的目的,主要可以通過類中的函式向其他類或者函式中發指標,以便於在非本類中操作和使用本類中的功能。

7) 如果框架中加入工具欄和狀態列變數還可以這樣

(cmainframe *)getparent()->m_wnd*******;

(cmainframe *)getparent()->m_wndstatusbar;

b1.如何在自己的類和「應用程式類」中獲得「文件類」的控制代碼?

sdi afxgetmainwnd() -> getactiveview() -> getdocument() 得到指標

mdi afxgetmainwnd() -> mdigetactive() -> getactiveview() -> getdocument() 得到指標

b3.如何在「框架類」中獲得「文件類」控制代碼?

sdi getactiveview() -> getdocument() 得到指標,mdi mdigetactive() -> getactiveview() -> getdocument() 從 cmainframe 得到指標,getactiveview() -> getdocument() 從 cchildframe 得到指標

b4.如何在「檢視類」中獲得「文件類」控制代碼?

getdocument()

c1.如何在「文件類」中獲得「檢視類」控制代碼?

getview(),呼叫 getfirstviewposition 和 getnextview 函式得到指標。

c2.如何在自己的類和「應用程式類」中獲得「檢視類」控制代碼?

sdi getactiveview 得到指標

mdi mdigetactive() -> getactiveview() 從 cmainframe 得到指標,getactiveview 從 cchildframe 得到指標

(二)mfc中

控制代碼、指標、id之間的轉換

win32直接操作的是控制代碼handle,每個控制代碼就對應windows視窗,而vc對handle進行類封裝,間接操作的都是handle,現在控制代碼只是類的乙個成員變數。

從控制代碼到指標 

cwnd* pwnd=cwnd::fromhandle(hwnd); //a temporary cwnd object is created //and attached. 

pwnd->attach(hwnd); //attaches a windows window to a cwnd object

從指標到控制代碼 

hwnd hwnd=pwnd->getsafehandle(); 

hwnd=pwnd->m_hwnd;

附註:獲得視窗控制代碼三種方法

1.hwnd findwindow(lpctstr lpclassname, lpctstr lpwindowname)

hwnd findwindowex(hwnd hwndparent, hwnd hwndchildafter,lpctstr lpclassname, lpctstr lpwindowname)

2.hwnd windowfrompoint(point& point)//獲得當前滑鼠游標位置的視窗hwnd

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();

MFC中獲取各個窗體之間的控制代碼或者指標物件的方法

mfc在很多的對話方塊操作中,我們經常要用到在乙個對話方塊中呼叫另乙個對話方塊的函式或變數.可以用如下方法來解決.hwnd hwnd findwindow null,t sphere 得到對話方塊的控制代碼 c dialog pwnd c dialog c dialog fromhandle hwn...

MFC中獲取各個視窗之間的控制代碼或者指標物件的方法

mfc在非常多的對話方塊操作中,我們常常要用到在乙個對話方塊中呼叫還有乙個對話方塊的函式或變數.能夠用例如以下方法來解決.hwnd hwnd findwindow null,t sphere 得到對話方塊的控制代碼 c dialog pwnd c dialog c dialog fromhandle...

MFC中獲取各個視窗之間的控制代碼或者指標物件的方法

mfc在非常多的對話方塊操作中,我們常常要用到在乙個對話方塊中呼叫還有乙個對話方塊的函式或變數.能夠用例如以下方法來解決.hwnd hwnd findwindow null,t sphere 得到對話方塊的控制代碼 c dialog pwnd c dialog c dialog fromhandle...