[code = C\C++]
void CMyDialog::OnBnClickedButton1()
{//调用
CFileDialog fileDlg(true);
fileDlg.m_pOFN->lpstrFileFilter = "打开数据文件";
if(fileDlg.DoModal() == IDOK)
{}
}
[/code]
[code = C\C++]
_AfxActivationWndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{//wincore中
...
TRY
{
BOOL bCallDefault = TRUE;
switch(nMsg)
{
case WM_INITDIALOG:
{
DWORD dwStyle;
CRect rectOld;
CWnd* pWnd = CWnd::FromHandle(hWnd);
_AfxPreInitDialog(pWnd,&rectOld,&dwStyle);
bCallDefault = FALSE;
lResult = CallWindowProc(oldWndProc,hWnd,nMsg,wParam,lParam);//出错的地方
_AfxPostInitDialog(pWnd,rectOld,dwStyle);
}break;
...
}
}
[/code]
请问这是什么原因造成的?
void CMyDialog::OnBnClickedButton1()
{//调用
CFileDialog fileDlg(true);
fileDlg.m_pOFN->lpstrFileFilter = "打开数据文件";
if(fileDlg.DoModal() == IDOK)
{}
}
[/code]
[code = C\C++]
_AfxActivationWndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{//wincore中
...
TRY
{
BOOL bCallDefault = TRUE;
switch(nMsg)
{
case WM_INITDIALOG:
{
DWORD dwStyle;
CRect rectOld;
CWnd* pWnd = CWnd::FromHandle(hWnd);
_AfxPreInitDialog(pWnd,&rectOld,&dwStyle);
bCallDefault = FALSE;
lResult = CallWindowProc(oldWndProc,hWnd,nMsg,wParam,lParam);//出错的地方
_AfxPostInitDialog(pWnd,rectOld,dwStyle);
}break;
...
}
}
[/code]
请问这是什么原因造成的?
解决方案 »
- VC2010 控件随窗体大小改变 还是要写代码控制吗 ?? 苹果下面的怎么那么方便
- 菜鸟的Socket问题
- 进来帮帮我
- 用c++基于openGL开发环境中,如何播放.mov格式的文件?
- ____________数值转换问题__________
- 如何让ActiveX的视图全屏显示阿?(在线等。。。)
- 如何在自己的程序中调用“记事本”(NotePad.exe)打开特定的文件?
- QueryInterface的一个问题
- 如何改变编辑,组合框等控件的边框颜色
- c++编程思想中的重载操作符一节中关于灵巧指针(->)有些不理解
- 最近有个后缀是.skin的文件,不知道如何编辑,打开里面的资源
- 如何防止自绘的虚框被其他窗口覆盖
void CMyDialog::OnBnClickedButton1()
{//调用
CFileDialog fileDlg(true);
fileDlg.m_pOFN->lpstrFileFilter = "打开数据文件";
if(fileDlg.DoModal() == IDOK)
{}
}
_AfxActivationWndProc(HWND hWnd,UINT nMsg,WPARAM wParam,LPARAM lParam)
{//wincore中
...
TRY
{
BOOL bCallDefault = TRUE;
switch(nMsg)
{
case WM_INITDIALOG:
{
DWORD dwStyle;
CRect rectOld;
CWnd* pWnd = CWnd::FromHandle(hWnd);
_AfxPreInitDialog(pWnd,&rectOld,&dwStyle);
bCallDefault = FALSE;
lResult = CallWindowProc(oldWndProc,hWnd,nMsg,wParam,lParam);//出错的地方
_AfxPostInitDialog(pWnd,rectOld,dwStyle);
}break;
...
}
}
应该写成
"Chart Files (*.xlc)|*.xlc|All Files (*.*)|*.*||"
现在错误貌似是fileDlg中OnInitDialog有冲突
{
CMyDialog MyDlg;
MyDlg.DoModal();
}//class CMyDialog :public CDialog
//对话框中有个button
void CMyDialog::OnBnClickedButton1()
{//调用
CFileDialog fileDlg(true);
fileDlg.m_pOFN->lpstrTitle = "打开数据文件";
if(fileDlg.DoModal() == IDOK)
{}
}
也就是我现在自己创建的对话框调用comm dialog有问题,不知道其中是不是有什么需要设置的地方没设置好。或者是需要非模态对话框才能调用模态对话框?
单步调试到Wincore.cpp里面,到出错的地方给一个绿箭头移到上面提示“此代码调用了另一个函数。当该函数完成后,这是将要执行的下一条语句。”
也就是2楼发的第二段代码出错的地方。我用的是vs.net2003。
lResult = CallWindowProc(oldWndProc,hWnd,nMsg,wParam,lParam);//出错的地方
提示的错误是“myApp.exe在0x77f417e处未处理的异常:0xC00000005:写入位置0x0041ca20时发生访问冲突。”
从单步到运行的地方个人感觉是CFileDialog对象发消息WM_INITDIALOG,但是某个函数被其他函数调用未结束,不能为这个CFileDialog对象进行初始化,导致程序出错,崩溃掉了。这是一个MFC程序,这里想问一下,对话框调用CFileDialog需要有什么特别的初始化吗,或者跟模态和非模态有关?
{
OPENFILENAME ofn;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = GetSafeHwnd();
ofn.lpstrFile = new TCHAR[MAX_PATH * 500];
ofn.nMaxFile = MAX_PATH * 500;
ZeroMemory(ofn.lpstrFile, ofn.nMaxFile * sizeof(TCHAR));
ofn.lpstrFilter = _T("WAV Files(*.wav)\0*.wav\0\0");
ofn.nFilterIndex = 0;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST |
OFN_ALLOWMULTISELECT | OFN_EXPLORER | OFN_HIDEREADONLY; // Display the Open dialog box.
if (GetOpenFileName(&ofn))
{
LPCTSTR lpFile = ofn.lpstrFile;
if (lpFile[lstrlen(lpFile) + 1] == 0)//one file
{
arFiles.Add(lpFile);
}
else
{
lpFile += lstrlen(lpFile) + 1;//first file
while(lpFile[0] != 0)
{
CString strFilePath(ofn.lpstrFile);
strFilePath.TrimRight('\\');
strFilePath += CString("\\") + lpFile; arFiles.Add(strFilePath); lpFile += lstrlen(lpFile) + 1;//Next file
}
}
delete[] ofn.lpstrFile;
return &arFiles;
}
delete[] ofn.lpstrFile;
return NULL;}
另外,如果是通过 m_ofn.lpstrFilter = XXX 这种赋值方式,
后面的字符串应该使用 \0 分割,最后使用两个 \0 结束。
15楼的方法可以实现打开对话框的正常打开,看来vs2003里对话框调用 打开文件对话框 只能不用通用的CFileDialog了。
结贴了,谢谢楼上各位。各位费心了。