如何解决带有钩子的OpenFileName导致CDERR_DIALOGFAILURE
|| 我从GetopenFileName收到错误CDERR_DIALOGFAILURE。这是代码... //在WndProc中 LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WParaM wParam,LParaM lParam)
{
static HINSTANCE hInstance;
switch (message)
{
case WM_CREATE:
hInstance = (HINSTANCE) getwindowlong (hWnd,GWL_HINSTANCE);
//在WndProc中进行消息处理
case ID_READ_LOG_FILE:
{
OPENFILENAME ofn;
char fn[MAX_PATH]=\"\\0\";
char filter[32]=\"Text Files\\0*.TXT;\\0\\0\";
char title[]=\"Open Log File\";
char defext[]=\"TXT\";
int status;
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.hInstance = hInstance;
ofn.lpstrFilter = filter;
ofn.nFilterIndex = 0;
ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = 0 ;
ofn.lpstrFile = fn;
ofn.nMaxFile = sizeof(fn);
ofn.lpstrFileTitle = NULL;
if (ReadLogFileLastDir[0] == \'\\0\')
{
SHGetSpecialFolderPath (NULL,ReadLogFileLastDir,0x0005,false);
};
ofn.lpstrInitialDir = ReadLogFileLastDir;
ofn.lpstrTitle = title;
ofn.Flags = OFN_FILEMUSTEXIST |
OFN_PATHMUSTEXIST |
OFN_EXPLORER |
OFN_ENABLETEMPLATE |
OFN_ENABLESIZING |
OFN_ENABLEHOOK ;
ofn.lpstrDefExt = NULL;
ofn.lpfnHook = HookFileOpen;
ofn.lCustData = 1234; // just for fun
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_HOOKFILEOPEN);
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
ofn.lpstrDefExt = defext;
status = GetopenFileName (&ofn);
if (status == 0)
{
DWORD iStat,z;
iStat = CommDlgExtendedError();
if (iStat == CDERR_DIALOGFAILURE)
//对话过程看起来像这样,但从未被调用。
UINT_PTR CALLBACK HookFileOpen (HWND hDlg,LParaM lParam)
{
解决方法
我不知道到底需要什么,但是我修改了对话框,使其成为带有剪辑兄弟的孩子,并消除了所有其他样式和扩展样式,现在可以使用了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。