求大神,快被这个问题搞疯了

hymzk 2011-10-21 09:29:49
写了个画板程序,在实现保存功能的时候,要先初始化一个保存对话框,可是每次都是初始化失败无法打开对话框,代码如下,求解啊。
void PopFileInitialize(HWND hWnd)
{
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hWnd ;
ofn.hInstance = NULL ;
ofn.lpstrFilter = _T("Painter File\0*.mzk\0All Files\0*.*\0\0");
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 1 ;
ofn.lpstrFile = NULL ;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
ofn.Flags = 0 ;
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = _T ("mzk") ;
ofn.lCustData = 0 ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
ofn.dwReserved = 0;
ofn.FlagsEx = 0;
}
//这里是打开对话框
BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
ofn.hwndOwner = hwnd;
ofn.lpstrFile = pstrFileName;
ofn.lpstrFileTitle = pstrTitleName;
ofn.Flags = OFN_CREATEPROMPT | OFN_HIDEREADONLY;

return GetOpenFileName (&ofn);
}
//这个GetOpenFileName 每次都是返回0,我用CommDlgExtendedError函数测试发现返回的错误信息是

“CDERR_STRUCTSIZE:对应的公共对话框初始化结构旧IStructSize成无效成员。”

不知道为什么啊,大家帮帮忙!!
...全文
119 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
JieTouLangRen 2011-10-22
  • 打赏
  • 举报
回复
帮顶了`~
hymzk 2011-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chiyer 的回复:]
BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
ofn.hwndOwner = hwnd;
ofn.lpstrFile = pstrFileName;
ofn.lpstrFileTitle = pstrTitleName;
ofn.Flags = OFN_CREATEPROMPT | O……
[/Quote]
是我忘了先调用PopFileInitialize,看了回复才突然响起来,非常感想!
星羽 2011-10-22
  • 打赏
  • 举报
回复
BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
ofn.hwndOwner = hwnd;
ofn.lpstrFile = pstrFileName;
ofn.lpstrFileTitle = pstrTitleName;
ofn.Flags = OFN_CREATEPROMPT | OFN_HIDEREADONLY;

return GetOpenFileName (&ofn);
}

你这个函数里没定义ofn
ofn是全局的
我用的代码试了下,没啥问题啊,先init了然后调用这个函数,
hymzk 2011-10-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 hymzk 的回复:]
写了个画板程序,在实现保存功能的时候,要先初始化一个保存对话框,可是每次都是初始化失败无法打开对话框,代码如下,求解啊。
void PopFileInitialize(HWND hWnd)
{
ofn.lStructSize = sizeof (OPENFILENAME) ;
ofn.hwndOwner = hWnd ;
ofn.hInstance = ……
[/Quote]
这是要我在哪里改动呢?
vrace 2011-10-21
  • 打赏
  • 举报
回复
OPENFILENAME ofn = {0};
TCHAR path[MAX_PATH];

ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFilter = _T("Painter File\0*.mzk\0All Files\0*.*\0\0");
ofn.lpstrFile = path;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;

if (GetOpenFileName(&ofn))
{
// chosen filename is stored in 'path' now.
}

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧