小弟最近按照书上的案例写了一个扩展打开对话框的功能,在这个对话框里添加显示文件的大小,文件名和扩展名,但是这个程序能编译成功,运行时打开对话框却弹出非法对话框,不知这是什么原因,部份源程序如下:
#if !defined(AFX_EXTENDFILEDLG_H__8B1C09CF_9108_4CF2_913D_6C29123A14F7__INCLUDED_)
#define AFX_EXTENDFILEDLG_H__8B1C09CF_9108_4CF2_913D_6C29123A14F7__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ExtendFileDlg.h : header file
///////////////////////////////////////////////////////////////////////////////
// CExtendFileDlg dialogclass CExtendFileDlg : public CFileDialog
{
// Construction
public:
CExtendFileDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data
//{{AFX_DATA(CExtendFileDlg)
enum { IDD = IDD_EXTEND_FILE_DIALOG };
CString m_sFName;
CString m_sExtName;
int m_nFSize;
//}}AFX_DATA
public:
virtual void OnFileNameChange();// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CExtendFileDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected: // Generated message map functions
//{{AFX_MSG(CExtendFileDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_EXTENDFILEDLG_H__8B1C09CF_9108_4CF2_913D_6C29123A14F7__INCLUDED_)// ExtendFileDlg.cpp : implementation file
//#include "stdafx.h"
#include "Step.h"
#include "ExtendFileDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CExtendFileDlg dialogCExtendFileDlg::CExtendFileDlg(CWnd * pParent):CFileDialog(TRUE,NULL,NULL,NULL)
{
//{{AFX_DATA_INIT(CExtendFileDlg)
m_sFName = _T("");
m_sExtName = _T("");
m_nFSize = 0;
//}}AFX_DATA_INIT m_ofn.lpstrFilter="Header Files(*.H)\0*.H\0Source Files(*.CPP)\0*.CPP\0All Files(*.*)\0*.*\0\0";
m_ofn.Flags=OFN_EXPLORER|OFN_ENABLETEMPLATE|OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY;
m_ofn.lpTemplateName=MAKEINTRESOURCE(IDD_EXTEND_FILE_DIALOG);
}
void CExtendFileDlg::DoDataExchange(CDataExchange* pDX)
{
CFileDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExtendFileDlg)
DDX_Text(pDX, IDC_FILE_NAME, m_sFName);
DDX_Text(pDX, IDC_EXT_NAME, m_sExtName);
DDX_Text(pDX, IDC_FILE_SIZE, m_nFSize);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CExtendFileDlg, CFileDialog)
//{{AFX_MSG_MAP(CExtendFileDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CExtendFileDlg message handlersBOOL CExtendFileDlg::OnInitDialog() //最有可能出问题的地方,可是不知道怎么改!
{
CFileDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}void CExtendFileDlg::OnFileNameChange()
{
CString fileName=GetPathName();
if(fileName.IsEmpty()){
m_nFSize=0;
m_sFName="";
m_sExtName="";
}
else {
CFile file(fileName.GetBuffer(fileName.GetLength()),CFile::modeRead);
m_nFSize=file.GetLength();
m_sFName=GetFileTitle();
m_sExtName=GetFileExt();
UpdateData(FALSE);
}
CFileDialog::OnFileNameChange();
}
请各位帮我看看,谢谢!
问题解决马上结贴!
#if !defined(AFX_EXTENDFILEDLG_H__8B1C09CF_9108_4CF2_913D_6C29123A14F7__INCLUDED_)
#define AFX_EXTENDFILEDLG_H__8B1C09CF_9108_4CF2_913D_6C29123A14F7__INCLUDED_#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ExtendFileDlg.h : header file
///////////////////////////////////////////////////////////////////////////////
// CExtendFileDlg dialogclass CExtendFileDlg : public CFileDialog
{
// Construction
public:
CExtendFileDlg(CWnd* pParent = NULL); // standard constructor// Dialog Data
//{{AFX_DATA(CExtendFileDlg)
enum { IDD = IDD_EXTEND_FILE_DIALOG };
CString m_sFName;
CString m_sExtName;
int m_nFSize;
//}}AFX_DATA
public:
virtual void OnFileNameChange();// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CExtendFileDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL// Implementation
protected: // Generated message map functions
//{{AFX_MSG(CExtendFileDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif // !defined(AFX_EXTENDFILEDLG_H__8B1C09CF_9108_4CF2_913D_6C29123A14F7__INCLUDED_)// ExtendFileDlg.cpp : implementation file
//#include "stdafx.h"
#include "Step.h"
#include "ExtendFileDlg.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CExtendFileDlg dialogCExtendFileDlg::CExtendFileDlg(CWnd * pParent):CFileDialog(TRUE,NULL,NULL,NULL)
{
//{{AFX_DATA_INIT(CExtendFileDlg)
m_sFName = _T("");
m_sExtName = _T("");
m_nFSize = 0;
//}}AFX_DATA_INIT m_ofn.lpstrFilter="Header Files(*.H)\0*.H\0Source Files(*.CPP)\0*.CPP\0All Files(*.*)\0*.*\0\0";
m_ofn.Flags=OFN_EXPLORER|OFN_ENABLETEMPLATE|OFN_ALLOWMULTISELECT|OFN_HIDEREADONLY;
m_ofn.lpTemplateName=MAKEINTRESOURCE(IDD_EXTEND_FILE_DIALOG);
}
void CExtendFileDlg::DoDataExchange(CDataExchange* pDX)
{
CFileDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExtendFileDlg)
DDX_Text(pDX, IDC_FILE_NAME, m_sFName);
DDX_Text(pDX, IDC_EXT_NAME, m_sExtName);
DDX_Text(pDX, IDC_FILE_SIZE, m_nFSize);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CExtendFileDlg, CFileDialog)
//{{AFX_MSG_MAP(CExtendFileDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CExtendFileDlg message handlersBOOL CExtendFileDlg::OnInitDialog() //最有可能出问题的地方,可是不知道怎么改!
{
CFileDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}void CExtendFileDlg::OnFileNameChange()
{
CString fileName=GetPathName();
if(fileName.IsEmpty()){
m_nFSize=0;
m_sFName="";
m_sExtName="";
}
else {
CFile file(fileName.GetBuffer(fileName.GetLength()),CFile::modeRead);
m_nFSize=file.GetLength();
m_sFName=GetFileTitle();
m_sExtName=GetFileExt();
UpdateData(FALSE);
}
CFileDialog::OnFileNameChange();
}
请各位帮我看看,谢谢!
问题解决马上结贴!
{
CFileDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}BOOL CExtendFileDlg::OnInitDialog() //最有可能出问题的地方,可是不知道怎么改!
{
CFileDialog::OnInitDialog();
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}你这个里面什么 都没写啊!!
出什么问题!?void CExtendFileDlg::OnFileNameChange()
这个函数在什么时候调用!!??作为普通的对话框]
应该 可以,但是作为filedlg
我没做过,所以也不知道!!
你设置断点,看看使那里出错!!
是不是这里 有问题!!
.h文件:(片断)
class CFilePlay : public CFileDialog
{
public:
bool m_bCanRead;
DWORD m_nTextWords;
public:
CFilePlay (BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL);
///////////////////////////
.cpp文件(片断)
CFilePlay::CFilePlay(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,
DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :
CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
{
//{{AFX_DATA_INIT(CFilePlay)
m_bPreview = FALSE;
//}}AFX_DATA_INIT
m_ofn.Flags|=(OFN_EXPLORER | OFN_ENABLETEMPLATE);
m_ofn.Flags&=~OFN_ENABLESIZING;
m_ofn.lpTemplateName =MAKEINTRESOURCE(IDD_FILEPLAY);
m_ofn.lpstrTitle ="文件排版";
///
}
CString str;
str.Format("%d,%f",i,j);
CWnd * pWnd = GetDlgItem( ID_STATIC_..);
pWNd->SetWindowText(str);//设置显示的文本!
void CMainFrame::OnActionsFiledlg()
{
// TODO: Add your command handler code here
CExtendFileDlg dlg;
dlg.DoModal();
}
谢谢帮忙!