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

  • 相关阅读:
    接口测试(apipost、jmeter和python脚本)
    接口测试人员需要掌握的知识技能
    使用抓包工具fiddler和apipost进行接口测试
    接口工具使用对比(apipost、jmeter、postman、swagger等)
    如何获取变量token的值
    接口文档生成工具apipost
    (Win10 应用中心打不开) Microsoft store 无法联网
    判断当前系统是64位还是32位
    VS2017 远程调试方法
    基于COM组件接口ICMLuaUtil的BypassUAC
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3147475.html
Copyright © 2011-2022 走看看