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

2021-09-07 10:46:43 字數 3839 閱讀 8021

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...

MFC 視窗控制代碼獲取

控制代碼獲取方法 獲取該視窗的控制代碼後,即可向該視窗類類傳送訊息 處理程式 0。獲取所在類視窗的控制代碼 this m hwnd 1。主視窗的控制代碼 無論在主視窗類內,還是子視窗類內,獲取主視窗控制代碼的方法 afxgetmainwnd m hwnd,如 sendmessage afxgetma...

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

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