微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有钩子的OpenFileName导致CDERR_DIALOGFAILURE

如何解决带有钩子的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 举报,一经查实,本站将立刻删除。