MFC-GetMainWnd获取主窗口指针

Posted 天子骄龙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC-GetMainWnd获取主窗口指针相关的知识,希望对你有一定的参考价值。

 

    CWinApp* pwin = AfxGetApp();//获取当前应用进程的指针
    CWnd* pWnd = pwin->GetMainWnd();//获取主窗口指针
    CGetMainWndDlg* pDlg = (CGetMainWndDlg*)pWnd;
    //主窗口指针转化成对话框类指针
    pDlg->SetWindowText(_T("练习"));

    CWnd* pWnd1 = pWnd->GetDlgItem(IDC_BUTTON1);//获取按钮的句柄
    pWnd1->SetWindowText(_T("获取进程指针"));

 

 

 

 

 

 

 

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

【中文标题】获取指向对话框表单的 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);

【讨论】:

以上是关于MFC-GetMainWnd获取主窗口指针的主要内容,如果未能解决你的问题,请参考以下文章

qt如何获取主窗口的指针

Qt:子窗口中如何获取主窗体ui中的控件

MFC 主窗口如何在创建的子窗口前

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

多文档获取常用窗口的指针方式

MFC中应用对象的成员:窗口指针m_pMainWnd说明