zoukankan      html  css  js  c++  java
  • MFC中 自定义类访问主对话框控件的方法

    之前一直在找有木有好点的方法。现在终于被我找到,收藏之~~~~~~

    在使用mfc的时候经常遇到自定义类访问主对话框控件的问题,例如自定义类中的方法要输出一段字符串到主对话框的EDIT控件、控制对话框的进度条等。

    要在自定义的类中访问主对话框空间,须获得主对话的指针。主对话框的对象在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(  );
    来获得要访问的主对话框控件的指针,以对其进行访问。

    下面是子对话框得到父对话框指针的方法

    1. extern CMainApp theApp;
    CMainDlg* dlg = (CMainDlg*)theApp.m_pMainWnd;
    获得主对话框指针就可以调用它的成员


    2.主对话框创建子对话框时把this传入,那么在子对话框中就可以得到主对话的指针 


    3.用GetParent()获取父窗口指针。
    设你主对话框类为CMyDialog.
    CMyDialog *pDlg = (CMyDialog *)GetParent()->GetParent();
    pDlg->函数或变量;
    第一个GetParent()获取的是tab control指针,再通过tab control获取主对话框指针。

    下面是通过全局变量的使用来获取对话框的指针

    假设CMyDialog为对话框类

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

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

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

    4.pDlg->yourfunction();

    来源:http://blog.sina.com.cn/s/blog_624ca8080100rkeb.html

  • 相关阅读:
    leetcode Super Ugly Number
    leetcode Find Median from Data Stream
    leetcode Remove Invalid Parentheses
    leetcode Range Sum Query
    leetcode Range Sum Query
    leetcode Minimum Height Trees
    hdu 3836 Equivalent Sets
    hdu 1269 迷宫城堡
    hud 2586 How far away ?
    poj 1330 Nearest Common Ancestors
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3147475.html
Copyright © 2011-2022 走看看