通过全局句柄(extern HWND)访问其他类

一般我们是通过定义一个类的对象来访问类的成员变量及函数的。这比较简单,比如:
CPage1 m_page1;
然后就可以通过m_page1访问CPage1类中的定义的函数 比如:m_page1.Add(2,3);

但是如果需要再CPage1类中访问主窗口类中的函数该怎么办?
我们可以通过句柄来访问。

1.首先在Test.h(主程序头文件) 或StdAfx.h中定义也行

extern HWND g_hWnd;

2.在TestDlg.cpp中确保Test.h头文件被引用,并定义

HWND g_hWnd;

3.在CTestDlg::OnInitDialog()中

g_hWnd=m_hWnd;

好了 在任何地方如CPage1中引用如:

((CTestDlg*)FromHandle(g_hWnd))->m_page1.ShowWindow(SW_HIDE);

当然因为g_hWnd也是程序主窗口的句柄 所以g_hWnd也可以写成AfxGetMainWnd()->m_hWnd

这种方法在相同类中中比较常见。比如定义了CPage1、CPage2、CPage3等等类。他们相互之间引用通过句柄是一种比较方便的办法。

 

posted @ 2009-03-05 22:07  ciey  阅读(986)  评论(0编辑  收藏  举报