MFC对话框跨文件调用

Posted jeasonliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC对话框跨文件调用相关的知识,希望对你有一定的参考价值。

    在非doc源文件中调用对话框,先建立好对话框,定义类,变量以及头文件源文件等。因为一开始在建立对话框的时候想着建立独立对话框,就没有设到其他文件中去。

    为了在该对话框中直接引用他cpp中内容,并修改该对话框的头文件和源文件:

(准确来说,不知道这样的有什么好处,如果有想法欢迎留言!谢谢!)

//===========头文件 C_LatticeTransfDlg.h
#include "resource.h"
#include "Mylattice.h"//==需要引用该对话框的文件
class C_LatticeTransfDlg : public CDialogEx
{
    DECLARE_DYNAMIC(C_LatticeTransfDlg)

public:
    C_LatticeTransfDlg(CMyLattice* theLatticePos, CWnd* pParent = NULL);   // 标准构造函数=====此处构造函数添加Mylattice类
    virtual ~C_LatticeTransfDlg();
      #ifdef AFX_DESIGN_TIME              // ==如果是非模态对话框需要去掉该ifdef条件编译语

      enum { IDD = IDD_TransFormDlg };
      #endif

}

.
.
.

//============源文件 C_LatticeTransfDlg.cpp====
#include "stdafx.h"
#include "Liu_Occ.h"
#include "C_LatticeTransf.h"
#include "afxdialogex.h"

C_LatticeTransfDlg::C_LatticeTransfDlg(CMyLattice* theLatticePos, CWnd* pParent /*=NULL*/)//===构造函数
    : CDialogEx(IDD_TransFormDlg, pParent)
    , m_Tx(0)
    , m_Ty(0)
    , m_Tz(0)
    , m_Rx(0)
    , m_Ry(0)
    , m_Rz(0)
    ,iscomplete(false)
{
    myLatticePos = theLatticePos;
}

C_LatticeTransfDlg::~C_LatticeTransfDlg()
{
}
.
.
.

 

在其他文件中调用对话框:

包含对话框头文件后,

#include "C_LatticeTransf.h" 
void
CMyLattice::test5() { C_LatticeTransfDlg *latticeTransfdlg; latticeTransfdlg = new C_LatticeTransfDlg(this); latticeTransfdlg->DoModal(); //==模态对话框打开方式
//latticeTransfdlg->Create(C_LatticeTransfDlg::IDD, NULL);//==如果非模态对话框用下列语句 //latticeTransfdlg->ShowWindow(SW_SHOW); float tx = latticeTransfdlg->Tx; float rx = latticeTransfdlg->Rx; }

 默认的情况如下,可以在其他cpp中引用:

//===头文件

class C_LatticeTransfDlg : public CDialogEx
{
    DECLARE_DYNAMIC(C_LatticeTransfDlg)

public:
    C_LatticeTransfDlg(CWnd* pParent = NULL);   // 标准构造函数
    virtual ~C_LatticeTransfDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
    //enum { IDD = IDD_DIALOG4 };
    enum { IDD = IDD_TransFormDlg };
#endif
.
.
.
}


//===源文件
C_LatticeTransfDlg::C_LatticeTransfDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(IDD_TransFormDlg, pParent)
    , m_Tx(0)
    , m_Ty(0)
    , m_Tz(0)
    , m_Rx(0)
    , m_Ry(0)
    , m_Rz(0)
    ,iscomplete(false)
{
    /*myLatticePos = theLatticePos;*/
}

//==其他源文件
void CMyLattice::test5()
{
    C_LatticeTransfDlg *latticeTransfdlg;
    latticeTransfdlg = new C_LatticeTransfDlg();//==不需要this指针
    latticeTransfdlg->DoModal();

    //latticeTransfdlg->Create(C_LatticeTransfDlg::IDD, NULL);
    //latticeTransfdlg->ShowWindow(SW_SHOW);
    //myAISContext->UpdateCurrentViewer();

    float tx = latticeTransfdlg->Tx;
    float rx = latticeTransfdlg->Rx;
}

 



以上是关于MFC对话框跨文件调用的主要内容,如果未能解决你的问题,请参考以下文章

在 MFC C++ 中打开对话框

vc++中如何调用打开文件对话框

mfc通过调用dll文件弹出对话框时出现中断

VC6的MFC如何调用C#的tlb文件

MFC 单文档调用对话框

MFC 对话框应用程序未关闭