2017-11-15

来源:互联网 发布:ubuntu rm 删除文件夹 编辑:程序博客网 时间:2024/06/05 03:08

MFC探索

窗口句柄、指针之间的转换与获取

自定义类获取MFC对话框类对象

出处:http://blog.sina.com.cn/s/blog_624ca8080100rkeb.html

1.AfxGetApp()->m_pMainWnd->getDlgItem()

要在自定义的类中访问主对话框空间,须获得主对话的指针。主对话框的对象在app类的InitInstance()方法中声明。查看app类的cpp文件,在InitInstance()方法中有如下语句://有吗??
   CAppDlg dlg;
   m_pMainWnd = &dlg;
  主对话框指针被传给m_pMainWnd 成员,按f12查看其定义,发现m_pMainWnd 是在afxwin.h中声明的成员: CWnd* m_pMainWnd;       // main window (usually same AfxGetApp()->m_pMainWnd)
由于MFC中的自定义类会自动包含stdafx.h头文件,且stdafx.h包含afxwin.h,因此根据注释,在自定义类中可以直接使用
    AfxGetApp()->m_pMainWnd
来获取主对话框的指针。之后可通过
    AfxGetApp()->m_pMainWnd->GetDlgItem(  );
来获得要访问的主对话框控件的指针,以对其进行访问。

2.全局变量

假设CMyDialog为对话框类

1.先在CMyDialog.cpp中声明一个全局变量CMyDialog* pDlg;

2在OnInitDialog()的时候,pDlg = this;

3.在别的类使用他的时候,在别的类的Cpp中添加extern CMyDialog* pDlg;

4.pDlg->yourfunction();

3.静态变量

出处:https://www.cnblogs.com/perfy/p/5329630.html
用在单例模式中
1.在CMyDialog中定义一个静态变量pDlg;
2.在OnInitDialog()中,pDlg=this;
3.在别的类中使用时,CMyDialog::pDlg来获取目标对话框的指针
4.pDlg->成员变量

子窗口获取父窗口句柄、指针

2.主对话框创建子对话框时把this传入,那么在子对话框中就可以得到主对话的指针 
3.用GetParent()获取父窗口指针。
设你主对话框类为CMyDialog.
CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent();
pDlg->函数或变量;
第一个GetParent()获取的是tab control指针,再通过tab control获取主对话框指针。

各个窗口的句柄和指针的转换

获取主窗体句柄:      CWnd *wnd  = AfxGetMainWnd();
                     HWND hwnd = wnd->GetSafeHwnd();
HWND hWnd=::FindWindow(NULL,_T("Sphere"));      //得到对话框的句柄
   C***Dialog* pWnd= (C***Dialog*)C***Dialog::FromHandle(hWnd); //由句柄得到对话框的对象指针



从句柄到指针 
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;

SDK编程中窗体ID。句柄,指针三者相互转换函数 
ID--HANDLE--HWND三者之间的互相转换 
id->句柄-----------hWnd = ::GetDlgItem(hParentWnd,id); 
id->指针-----------CWnd::GetDlgItem(); 
句柄->id-----------id = GetWindowLong(hWnd,GWL_ID); 
句柄->指针--------CWnd *pWnd=CWnd::FromHandle(hWnd); 
指针->ID----------id = GetWindowLong(pWnd->GetSafeHwnd,GWL_ID); 
GetDlgCtrlID(); 
指针->句柄--------hWnd=cWnd.GetSafeHandle() or mywnd->m_hWnd;
HICON->ID--------HICON hIcon = AfxGetApp()->LoadIcon(nIconID);
                        HICON hIcon = LoadIcon(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(nIconID));

获取主窗口、主APP、视类窗口

AfxGetApp();//获取主app指针
AfxGetMainWnd();   AfxGetApp()->m_hMainWnd;//获取主窗口指针

获得对话框中控件指针

CWnd* pWnd = GetDlgItem(IDC_xxx);






原创粉丝点击