MFC怎么将几个Dialog显示在一个dialog里?要给用户的感觉是只是在一个窗口中操作!

2025-05-08 12:26:35
推荐回答(3个)
回答1:

CFileDialog 打开多个文件2006-12-01 17:28从CFileDialog派生一个类MFileDlg: 头文件://///////////////////////////////////////////////////////////////////////////

// MFileDlg dialogclass MFileDlg : public CFileDialog

{

DECLARE_DYNAMIC(MFileDlg)public:

MFileDlg(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs

LPCTSTR lpszDefExt = NULL,

LPCTSTR lpszFileName = NULL,

DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

LPCTSTR lpszFilter = NULL,

CWnd* pParentWnd = NULL);

int DoModal();

virtual ~MFileDlg();

protected:

//{{AFX_MSG(MFileDlg)

// NOTE - the ClassWizard will add and remove member functions here.

//}}AFX_MSG TCHAR* m_pszFile;

////////

DECLARE_MESSAGE_MAP()}; 类实现://///////////////////////////////////////////////////////////////////////////

// MFileDlgIMPLEMENT_DYNAMIC(MFileDlg, CFileDialog)MFileDlg::MFileDlg(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,

DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :

CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)

{

m_pszFile = new TCHAR[2048]; //set a 2K buffer to hold selected files

m_pszFile[0] = '\0'; //initialize pointer;

}

BEGIN_MESSAGE_MAP(MFileDlg, CFileDialog)

//{{AFX_MSG_MAP(MFileDlg)

// NOTE - the ClassWizard will add and remove mapping macros here.

//}}AFX_MSG_MAP

END_MESSAGE_MAP()MFileDlg::~MFileDlg()

{

if (m_pszFile != NULL)

delete [] m_pszFile; //cleanup

}int MFileDlg::DoModal()

{

ASSERT_VALID(this);

ASSERT(m_ofn.Flags & OFN_ALLOWMULTISELECT); //make sure multiple file selection is on m_ofn.lpstrFile = m_pszFile; //initialize the OPENFILENAME structure

m_ofn.nMaxFile = 2048;

return CFileDialog::DoModal();

} 具体使用: MFileDlg dlg( TRUE,_T("TXT"),_T("*.TXT"),

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,

_T("文本文件 (*.txt)|*.txt所有文件 (*.*)|*.*|"));

if(dlg.DoModal()!=IDOK) return FALSE; //取消操作 POSITION pos = dlg.GetStartPosition();

while (pos != NULL)

{

CString strPath = dlg.GetNextPathName(pos);

if (strPath.Find(":\\\\") == 1 && strPath.GetLength() > 4)

{

// this means we have an invalid path that looks like this:

// C:\\cda.dgl

// get rid of extra slash

CString temp;

temp = strPath.Left(3);

temp += strPath.Mid(4);

strPath = temp;

}

m_listFileNames.AddTail(strPath); //CStringList m_listFileNames

TRACE(_T("GetOpenFileName returned %s Files\r\n"),strPath);

}

另外,站长团上有产品团购,便宜有保证

回答2:

5.9 使用对话框作为子窗口

使用对话框作为子窗口是一种很常用的技术,这样可以使界面设计简化而且修改起来更加容易。

简单的说这种技术的关键就在于创建一个无模式的对话框,并在编辑对话框资源时指明Child风格和无边框风格,如图。接下来利用产生一个CDialog的派生类,并进行相关的消息映射。在创建子窗口时需要利用下面的代码:

回答3:

用rebar试试,俺没实践,只是瞎建议而已