WIN32 sdk 编程,VS2005如何调出打开文件的通用对话框
用VC6的话,如下可以调出#incude<windows.h>OPENFILENAMEofn;//只把重要的一些写了出来ofn.lStructSize=sizeof(OP...
用VC6的话,如下可以调出
#incude <windows.h>
OPENFILENAME ofn;
//只把重要的一些写了出来
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hwnd ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = "abcdef\0*.txt;*.bmp\0\0";
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.lpstrFile = szFileName ;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = szTitleName ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ;
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = ”bmp“ ;
ofn.lCustData = 0 ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
if( !GetOpenFileName (&ofn) ) return false; //函数执行成功,出现对话框,不会返回false
..........
但是到了VS2005里面,出现了如下问题:
编译时,error C2065: “OPENFILENAME”: 未声明的标识符
上面这个问题是最无语的。
后来知道OPENFILENAME结构体是包含在了<CommDlg.h>文件里,上面这个问题解决了。
但按上面的方法给ofn赋值后,再调用函数GetOpenFileNameA却发生错误,无法打开对话框!我用的是ASCII码,用OPENFILENAMEA代替了OPENFILENAME。
怎样设置ofn中的各个变量才能打开那个千刀杀的对话框啊? 展开
#incude <windows.h>
OPENFILENAME ofn;
//只把重要的一些写了出来
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hwnd ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = "abcdef\0*.txt;*.bmp\0\0";
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
ofn.lpstrFile = szFileName ;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = szTitleName ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ;
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = ”bmp“ ;
ofn.lCustData = 0 ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
if( !GetOpenFileName (&ofn) ) return false; //函数执行成功,出现对话框,不会返回false
..........
但是到了VS2005里面,出现了如下问题:
编译时,error C2065: “OPENFILENAME”: 未声明的标识符
上面这个问题是最无语的。
后来知道OPENFILENAME结构体是包含在了<CommDlg.h>文件里,上面这个问题解决了。
但按上面的方法给ofn赋值后,再调用函数GetOpenFileNameA却发生错误,无法打开对话框!我用的是ASCII码,用OPENFILENAMEA代替了OPENFILENAME。
怎样设置ofn中的各个变量才能打开那个千刀杀的对话框啊? 展开
1个回答
展开全部
CFileDialog CFileDialogEx(TRUE,0,0,4|2|OFN_ALLOWMULTISELECT,filefilter,this->GetSafeOwner(),0,1);
OPENFILENAME& ofn = CFileDialogEx.GetOFN();
ofn.lpstrTitle = sTitle;
ofn.lpstrFile = sMaxfile.GetBuffer(MAXFILEBUFFER);
ofn.nMaxFile = MAXFILEBUFFER;
ofn.lpstrInitialDir = path;//设置初始文件夹;
sMaxfile.ReleaseBuffer();//必须有;
我的是多选的代码。比较简单。
建议你参考一下MSDN的例子。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd940349(v=vs.85).aspx
记住,千万不要随意使用OPENFILENAMEA这种后缀是A的ASCII系统API,除非你知道怎么使用!建议使用不带后缀的OPENFILENAME这种宏定义!
OPENFILENAME& ofn = CFileDialogEx.GetOFN();
ofn.lpstrTitle = sTitle;
ofn.lpstrFile = sMaxfile.GetBuffer(MAXFILEBUFFER);
ofn.nMaxFile = MAXFILEBUFFER;
ofn.lpstrInitialDir = path;//设置初始文件夹;
sMaxfile.ReleaseBuffer();//必须有;
我的是多选的代码。比较简单。
建议你参考一下MSDN的例子。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd940349(v=vs.85).aspx
记住,千万不要随意使用OPENFILENAMEA这种后缀是A的ASCII系统API,除非你知道怎么使用!建议使用不带后缀的OPENFILENAME这种宏定义!
追问
刚刚解决了这个问题,你用的好像是MFC,我这是SDK。不过不是不能随意使用OPENFILENAMEA,我这次用的就是它,其实跟VC6的基本都一样。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询