AfxGetMainWnd 的问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 03:46:58
AfxGetMainWnd()是得到主窗口的指针,那么怎样得到其它窗口的指针呢?
一个对话框工程,有三个对话框,第一个调用第二个,第二个调用第三个.然后再逐级返回.
在第一个对话框的.cpp中,如何获得第三个对话框窗口的指针呢?
(我想在第一个对话框的.cpp中引用第三个对话框类中的某个变量x的值)

给楼主提供点思路:
如果两级子对话框都是模态对话框的话,推荐使用多线程技术。因为模态对话框是同步操作,不用多线程的话等到主对话框得到子对话框句柄时,子对话框已经消失了, 不能动态交互.

在子对话框的初始化函数中,向主对话框发送消息告知自身句柄,主对话框响应该消息开启工作线程,可以在该工作线程中与模态的子对话框进行交互。

代码片段:
//....

#define WM_TELL_HANDLE ( WM_USR + 100 ) 定义消息
//....
//子对话框的初始化函数,需要手动添加
BOOL ChildDlg::OnInitDialog()
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here

HWND hWndMain = AfxGetApp()->GetMainWnd()->GetSafeHwnd(); //得到主程序句柄
HWND hWndThis = this->GetSafeHwnd(); //得到子对话框自身句柄

//向主对话框发送自身句柄
::PostMessage(hWndMain, WM_TELL_HANDLE, 0, (LPARAM)hWndThis);

return TRUE; // return TRUE unless you set the focus to a control
}

//...
//主对话框中的消息响应函数, 保存子对话框句柄.
LRESULT CTestMainDlg::OnSaveHwnd(WPARAM wParam, LPARAM lParam)
{
m_hWndProcess = (HWND)lParam;
//这以下位置开启工作用线程
BeginThreadFunc();
return 0;
}