1. 程式人生 > >MFC獲得各種控制代碼的函式總結

MFC獲得各種控制代碼的函式總結

本文內容索引:

=========================================================

MFC中獲取常見類控制代碼<檢視類,文件類,框架類,應用程式類>

MFC中獲取視窗控制代碼及相關函式 

MFC獲取控制元件控制代碼

MFC各類中獲取類指標詳解

 MSDN關於應用程式資訊和管理的各個函式

==========================================================

MFC中獲取常見類控制代碼<檢視類,文件類,框架類,應用程式類>

本節為VC中常用的文件類,檢視類,框架類,應用程式類,自定義類中獲取其它四個類的

方法:
GET App 
   AfxGetInstanceHandle() 
   AfxGetApp() 
GET Frame->View->Document 
    SDI   AfxGetMainWnd() -> GetActiveView() -> GetDocument() 
    MDI   AfxGetMainWnd() -> MDIGetActive() -> GetActiveView() -> GetDocument() 
GET Menu 
     CMenu *pMenu=AfxGetApp()->m_pMainWnd->GetMenu(); 

GET ToolBar,StatusBar 
      (CMainFrame *)GetParent()->m_wndToolBar; 
      (CMainFrame *)GetParent()->m_wndStatusBar; 
      CStatusBar * pStatusBa=(CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR); 
      CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR); 

Get View from Document 
      GetFirstViewPosition 和 GetNextView 函式得到指標。 



MFC中獲取視窗控制代碼及相關函式 

首先,視窗控制代碼,在視窗類中直接使用成員變數m_hWnd,在視窗外最常見是用AfxGetMainWnd (獲取主視窗指標,其成員變數m_hWnd為主視窗控制代碼):

HWND hWnd = AfxGetMainWnd()->m_hWnd;

與其相關的函式說明如下,這些函式對於獲取視窗控制代碼非常有用:

GetTopWindow
函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回在z序頂部的子視窗的控制代碼。
函式原型:HWND GetTopWindow(HWND hWnd);
引數:
  hWnd:被查序的父視窗的控制代碼。如果該引數為NULL,函式返回Z序頂部的視窗控制代碼。
返回值:
    如果函式成功,返回值為在Z序頂部的子視窗控制代碼。如果指定的視窗無子視窗,返回值為NULL。


GetForegroundWindow
函式功能:該函式返回當前系統的前臺視窗的視窗控制代碼。
函式原型:HWND GetForegroundWindow(VOID)  
返回值:函式返回前臺窗回的控制代碼。


☆☆GetActiveWindow    獲取當前視窗控制代碼

函式功能:該函式可以獲得與呼叫該方法的執行緒的訊息佇列相關的活動視窗的視窗控制代碼(就是取得當前程序的活動視窗的視窗控制代碼)。
函式原型:HWND GetActiveWindow(VOID)
返回值:返回值是與呼叫執行緒的訊息佇列相關的活動視窗的控制代碼。否則,返回值為NULL。



GetSafeHwnd
函式功能:獲取某個視窗物件(CWnd的派生物件)指標的控制代碼(HWND)時,最安全的方法是使用GetSafeHwnd()函式。
通過下面的例子來看其理由:
  CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器

  1. CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器
  2.   HWND hwnd = pwnd->m_hwnd; //得到它的HWND

HWND hwnd = pwnd->m_hwnd; //得到它的HWND

  這樣的程式碼當開始得到的pwnd為空的時候就會出現一個“General protection error”,並關閉應用程式,因為一般不能對一個NULL指標訪問其成員,如果用下面的程式碼:
  1. CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //希望找到資源管理器
  2.   HWND hwnd = pwnd->GetSafeHwnd(); //得到它的HWND

就不會出現問題,因為儘管當pwnd是NULL時,GetSafeHwnd仍然可以用,只是返回NULL




IsWindowVisible
函式功能:該函式獲得給定視窗的可視狀態。
函式原型:BOOL IsWindowVisible(HWND hWnd);
引數;
  hWnd:被測試視窗的控制代碼。
返回值:
    如果指定的視窗及其父視窗具有WS_VISIBLE風格,返回值為非零;如果指定的視窗及其父視窗不具有WS_VISIBLE風格,返回值為零。由於返回值表明了視窗是否具有Ws_VISIBLE風格,因此,即使該視窗被其他視窗遮蓋,函式返回值也為非零。
備註:
    視窗的可視狀態由WS_VISIBLE位指示。當設定了WS_VISIBLE位,視窗就可顯示,而且只要視窗具有WS_VISIBLE風格,任何畫在視窗的資訊都將被顯示。



IsWindow:
函式功能:該函式確定給定的視窗控制代碼是否標示一個已存在的視窗。 
函式原型:BOOL IsWindow(HWND hWnd);
引數:
    hWnd:被測試視窗的控制代碼。
返回值:
    如果視窗控制代碼標識了一個已存在的視窗,返回值為TURE;如果視窗控制代碼未標識一個已存在視窗,返回值為FALSE。

FindWindow:
HWND FindWindow(LPCSTR lpClassName,LPCSTR lpWindowName );
引數:
lpClassName

  指向一個以null結尾的、用來指定類名的字串或一個可以確定類名字串的原子。如果這個引數是一個原子,那麼它必須是一個在呼叫此函式前已經通過GlobalAddAtom函式建立好的全域性原子。這個原子(一個16bit的值),必須被放置在lpClassName的低位位元組中,lpClassName的高位位元組置零。

lpWindowName
  指向一個以null結尾的、用來指定視窗名(即視窗標題)的字串。如果此引數為NULL,則匹配所有視窗名。
返回值:
如果函式執行成功,則返回值是擁有指定視窗類名或視窗名的視窗的控制代碼。

  如果函式執行失敗,則返回值為 NULL 。可以通過呼叫GetLastError函式獲得更加詳細的錯誤資訊。

來說個應用,視窗標題的改變,我們可以通過SetWindowText來實現:

注:如果視窗本身屬性是不顯示標題的,這個函式的呼叫不會影響視窗屬性。

  1. //Set title for application’s main frame window .
  2. AfxGetMainWnd ( ) -> SetWindowText (_T("Application title") )  
  3. //Set title for View’s MDI child frame window .
  4. GetParentFrame ( ) -> SetWindowText ("_T ("MDI Child Frame new title") )  
  5. //Set title for dialog’s push button control.
  6. GetDigitem (IDC_BUTTON) -> SetWindowText (_T ("Button new title ") )  

MFC獲取控制元件控制代碼

SDI中的控制元件控制代碼獲取:

  1. CWnd   *pWnd   =   GetDlgItem(ID_***); // 取得控制元件的指標
  2. HWND hwnd = pWnd->GetSafeHwnd();  // 取得控制元件的控制代碼
取得CDC的指標是CDC* pdc = pwnd->GetWindowDC();

MFC各類中獲取類指標詳解


使用到的類需要包含響應的標頭檔案。首先一般獲得本類(視,文件,對話方塊都支援)例項指標 this,用this的目的,主要可以通過類中的函式向其他類或者函式中髮指針,以便於在非本類中操作和使用本類中的功能。這其中的關鍵在於理解 m_pMainWnd,AfxGetApp(),AfxGetMainWnd()的意義!


1)在View中獲得Doc指標
CYouSDIDoc *pDoc=GetDocument();一個視只能有一個文件。


2) 在App中獲得MainFrame指標
CWinApp 中的 m_pMainWnd變數就是MainFrame的指標,也可以: CMainFrame *pMain =(CMainFrame*)AfxGetMainWnd();


3) 在View中獲得MainFrame指標
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;


4) 獲得View(已建立)指標
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();


5) 獲得當前文件指標
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();


6) 獲得狀態列與工具欄指標
CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar * pToolBar=(CtoolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);


7) 如果框架中加入工具欄和狀態列變數還可以這樣
(CMainFrame *)GetParent()->m_wndToolBar;
(CMainFrame *)GetParent()->m_wndStatusBar;


8) 在Mainframe獲得選單指標
CMenu *pMenu=m_pMainWnd->GetMenu();


9) 在任何類中獲得應用程式類
AfxGetInstanceHandle 得到控制代碼,AfxGetApp得到指標


最後提醒大家,在提取到各個控制代碼之後,因為初次提取的都是標準類控制代碼,所以,在使用時要注意將標準控制代碼轉換成自己的類的控制代碼。
如:
AfxGetApp();//得到的是WinApp類的控制代碼,
所以操作前記得轉換成自己定義的類的控制代碼。
如:
((CMyApp*)AfxGetApp())->XXXX();//這的xxxx()就是你定義的類中間的成員。




MSDN關於應用程式資訊和管理的各個函式 When you write an application, you create a single CWinApp-derived object. Attimes, you may want to get information about this object from outside theCWinApp-derived object.
The Microsoft Foundation Class Library provides the following global functionsto help you accomplish these tasks:
Application Information and Management Functions
AfxFreeLibrary
Decrements the reference count of the loaded dynamic-link library (DLL) module;when the reference count reaches zero, the module is unmapped.


AfxGetApp
Returns a pointer to the application's single CWinApp object.


AfxGetAppName
Returns a string containing the application's name.


AfxGetInstanceHandle
Returns an HINSTANCE representing this instance of the application.


AfxGetMainWnd
Returns a pointer to the current "main" window of a non-OLEapplication, or the in-place frame window of a server application.


AfxGetResourceHandle
Returns an HINSTANCE to the source of the application's default resources. Usethis to access the application's resources directly.


AfxInitRichEdit
Initializes the version 1.0 rich edit control for the application.


AfxInitRichEdit2
Initializes the version 2.0 and later rich edit control for the application.


AfxLoadLibrary
Maps a DLL module and returns a handle that can be used to get the address of aDLL function.


AfxRegisterWndClass
Registers a Windows window class to supplement those registered automaticallyby MFC.


AfxSocketInit
Called in a CWinApp::InitInstance override to initialize Windows Sockets.


AfxSetResourceHandle
Sets the HINSTANCE handle where the default resources of the application areloaded.


AfxRegisterClass
Registers a window class in a DLL that uses MFC.


AfxBeginThread
Creates a new thread.


AfxEndThread
Terminates the current thread.


AfxGetThread
Retrieves a pointer to the current CWinThread object.


AfxWinInit
Called by the MFC-supplied WinMain function, as part of the CWinAppinitialization of a GUI-based application, to initialize MFC. Must be calleddirectly for console applications using MFC.

Reference:

相關推薦

MFC獲得各種控制函式總結

本文內容索引: ========================================================= MFC中獲取常見類控制代碼<檢視類,文件類,框架類,應用程式類> MFC中獲取視窗控制代碼及相關函式  MFC獲取控制元件控制代碼 MFC各類中獲取類

如何獲得視窗控制(FindWindow函式的使用)

一: 獲得主視窗 HWND WINAPI FindWindow( _In_opt_  LPCTSTR lpClassName, _In_opt_  LPCTSTR lpWindowName ); 該函式通過建立視窗時的類名和視窗名查詢視窗並返回該視窗的控制代碼,

matlab學習筆記 圖形控制屬性總結

1.MATLAB給每種物件的每一個屬性規定了一個名字,稱為屬性名,而屬性名的取值成為屬性值。例如,LineStyle是曲線物件的一個屬性名,它的值決定著線型,取值可以是'-' 、':'、'-.'、'--'或'none'。 2.屬性的操作     set函式的呼叫格式為:   

MFC獲取視窗控制的方法

AfxGetMainWnd AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回

幾個獲取視窗控制函式

AfxGetMainWnd AfxGetMainWnd獲取自身視窗控制代碼 HWND hWnd = AfxGetMainWnd()->m_hWnd; GetTopWindow 函式功能:該函式檢查與特定父視窗相聯的子視窗z序(Z序:垂直螢幕的方向,即疊放次序),並返回在z序頂部的子視窗的控制代碼。 函式

mfc 根據視窗控制(HWND)殺死程序

先列舉桌面所有的視窗的標題或者類名。根據類名或者標題得知該視窗的控制代碼(HWND)。然後再殺死程序。看程式碼: BOOL bTerminateProcess = FALSE; HWND hwndE

獲得模組控制

/* 獲取自己模組控制代碼 */ HMODULE GetSelfModuleHandle() { MEMORY_BASIC_INFORMATION mbi; return ((::VirtualQuery(GetSelfModuleHandle, &mbi,

MFC中視窗控制控制元件控制的獲取

1. 程式主視窗控制代碼的獲得     CWnd* p = AfxGetMainWnd();//函式AfxGetMainWnd()獲得主對話方塊的指標p     HWND h = p->m_hW

獲得窗體控制

MDI物件之間的互動函式類  函式 返回值 Global AfxGetApp CWinApp *(指向當前程式)  Global AfxGetMainWnd CWnd *(指向程式主視窗框架) CMDIFrameWnd MDIGetActive CMDIChild Wnd

MFC 怎樣獲得某個視窗的控制

GetSafeHandle();this-> hWnd;GetDlgItem(hwnd,ID);//獲取視窗ID所對應的HWND的子視窗控制代碼 在主視窗中,如果要用到父視窗的控制代碼,可以用 HWND   GetParent(HWND   hWnd)       得

MFC中使用GetParent獲得子視窗的父視窗控制

今天真是暈了,為了解決控制端開啟程序管理器頁面只能開啟一個介面且關閉後還可以開啟這個問題,在設計的主視窗類CBOFDlg,子視窗類CProcessManagerPageDlg,以及會話類CSession三個類之間周旋了好久,在這個類放一個變數來標記,另一個類中判斷,最後還是

MFC+OpenCV獲得動態建立視窗的控制

//獲得動態建立視窗的控制代碼 cvNamedWindow(“Mywindow”, 0); HWND  hWnd = (HWND)cvGetWindowHandle(“Mywindow”); //獲得動態建立視窗父視窗的控制代碼 HWND hParent = ::Ge

MFC中獲取其他類、視窗控制等相關函式

轉載自http://blog.csdn.net/xiaoyun8822/article/details/7939605 一般我們使用的框架是VC提供的Wizard生成的MFC App Wizard(exe)框架,無論是多文件還是單文件,都存在指標和控制代碼獲取和操作問

MFC 獲得各類指標、控制的方法

最近有些人在問MFC程式設計一些要點,有一些控制代碼的獲取、指標的獲取是常見的問題,本文將對這些問題做以解釋,參考了前人的筆錄(見reference),希望能夠幫助大家更方便地進行MFC程式開發。    一般我們使用的框架是VC提供的Wizard生成的MFC App W

MFC通過對話方塊視窗控制獲得對話方塊物件指標

MFC在很多的對話方塊操作中,我們經常要用到在一個對話方塊中呼叫另一個對話方塊的函式或變數.可以用如下方法來解決. HWND hWnd=::FindWindow(NULL,_T("視窗名"));      //得到對話方塊的控制代碼C***Dialog* pWnd= (C*

emWin介面庫注意事項之自定義回撥函式之後,控制為0

        由於在嵌入式裝置上可供使用的介面庫很少,專案當中所使用的介面庫為德國SEGGER公司開發的emWin介面庫。使用上和windows的GDI大致類似,也提供了豐富的API介面。如果我們需要對控制元件進行自繪的話,一定要進行的一個操作是通過設定回撥

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

轉載:https://www.cnblogs.com/gavanwanggw/p/6743774.html MFC中獲取各個視窗之間的控制代碼或者指標物件的方法 MFC在非常多的對話方塊操作中,我們常常要用到在一個對話方塊中呼叫還有一個對話方塊的函式或變數.能夠用例如以下方法來解決.

[MFC] HWND(獲取控制元件或窗體控制) [大三TJB_708]

1 C++窗體物件和HWND 窗體物件是一個繼承於CWnd類的C++類的 物件。咱們可以用建構函式生成一個windows窗體,此windows窗體被一個 "window handle" (HWND)唯一標識,當一個窗體被建立後,此視窗的視窗控制代碼也響應的被建立。此視窗的視窗控制代碼被儲存在窗體

MFC 獲取當前視窗控制,或者父子視窗控制

父子視窗 在子視窗中,需要用到父視窗的控制代碼: AfxGetMainWnd()->m_hWnd 注:在父視窗中,也可以這麼用來呼叫自己視窗的控制代碼 在子視窗中,需要用到自己視窗的控制代碼 ChildDlg *pChildDlg ; pChildDlg->m_h

【虛擬機器】關於VMware 提示“無法獲得VMCI驅動程式的版本:控制無效”的解決方案

一、問題的出現     在VMware進行完虛擬機器安裝嚮導之後,剛要開啟虛擬機器進行作業系統的安裝時,會出現“無法獲得VMCI驅動程式的版本:控制代碼無效”的錯誤提示,如圖1 所示。(本人執行環境為Windows 10,VMware 12) &