获取指向对话框表单的 CWnd 的指针

Posted

技术标签:

【中文标题】获取指向对话框表单的 CWnd 的指针【英文标题】:To get pointer to CWnd of dialog form 【发布时间】:2016-11-17 08:42:26 【问题描述】:

我有以CSrvDlg 对话框形式作为主窗口的 MFC 应用程序:

    BOOL CSrvApp::InitInstance()
    
        CWinApp::InitInstance();
        CSrvDlg SrvDlg; 
...
        INT_PTR nResponse = SrvDlg.DoModal();
    

我需要创建子对话框表单。但出于这个原因,我需要获取指向主窗体的CWnd 的指针,以传递构造函数参数,如指向父窗口的指针。如何获取指向我的SrvDlg 表单的CWnd 的指针?

【问题讨论】:

相信你已经从@S那里得到了答案。指田。但是你应该更详细地解释这一点。创建模态对话框后,在用户单击“确定/取消”之前,您无法从对话框外部执行任何操作。我不确定你打算用那个手柄做什么。 如果您像今天的 earlier question 所暗示的那样从主窗体创建子对话框,那么您将传递 this 指针,因为 CDialog 是 CWnd。 【参考方案1】:

因为CSrvDlg是CWnd的子类,所以可以通过获取CWnd*指针

CWnd* ptr = &SrvDlg;

或明确

CWnd* ptr = static_cast<CWnd*>(&SrvDlg);

【讨论】:

以上是关于获取指向对话框表单的 CWnd 的指针的主要内容,如果未能解决你的问题,请参考以下文章

MFC对话框工程默认背景色怎么修改成其他颜色

改变对话框和控件的背景及文本颜色

Visual C++编程技巧之四

属性页对话框

透明 CWnd 过期时删除打开对话框的窗口句柄

将 OnNcHItTest 用于 CWnd 而不是 CDialog