CFileDialog在多选模式下无法选择过多的文件

来源:互联网 发布:武汉电视台网络直播 编辑:程序博客网 时间:2024/06/08 03:55
最近做一个备份工具。工具功能很简单就是将若干文件打包备份以及Oracle数据库备份 。文件备份自然使用CFileDialog来选择要备份的文件。代码很快搞定,进入测试发现选择文件时无法选择过多的文件,当选择的文件数超过一定的数量(没有仔细计算)时.DoModal()给了我个IDCANCEL。郁闷了!!??

后来想到用函数

BOOL GetOpenFileName(
  LPOPENFILENAME lpofn
);

这个函数需要一个结构OPENFILENAME作为参数,来看看该结构的定义
typedef struct tagOFN { /* ofn */
  DWORD lStructSize;
  HWND hwndOwner;
  HINSTANCE hInstance;
  LPCSTR lpstrFilter;
  LPSTR lpstrCustomFilter;
  DWORD nMaxCustFilter;
  DWORD nFilterIndex;
  LPSTR lpstrFile;
  DWORD nMaxFile;
  LPSTR lpstrFileTitle;
  DWORD nMaxFileTitle;
  LPSTR lpstrInitialDir;
  LPCSTR lpstrTitle;
  DWORD Flags;
  WORD nFileOffset;
  WORD nFileExtension;
  LPCSTR lpstrDefExt;
  DWORD lCustData;
  LPOFNHOOKPROC lpfnHook;
  LPCSTR lpTemplateName;
} OPENFILENAME;

通过阅读msdn我们知道能取得文件数量主要是受到lpstrFile和nMaxFile两个成员的控制。如果直接使用GetOpenFileName()方法来处理可以非常自由的完成,但是这样处理的细节较多,搞不好还有很多的bug。
于是只有在CFileDialog上面打主意了,仔细察看CFileDialog类你会发现一个指向OPENFILENAME结构指针对象m_pOFN。他管理着CFileDialog的工作。 CFileDialog设定nMaxFile为常量MAX_PATH(260),这个值太小无法选择更多的文件。如果你想选择更多的话,只需要修改m_pOFN对象即可。

第一次写blog有什么错误还请海涵。

    

 
原创粉丝点击