Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 带有钩子的OpenFileName导致CDERR\u对话框失败_Windows_Templates_Getopenfilename - Fatal编程技术网

Windows 带有钩子的OpenFileName导致CDERR\u对话框失败

Windows 带有钩子的OpenFileName导致CDERR\u对话框失败,windows,templates,getopenfilename,Windows,Templates,Getopenfilename,我从GetOpenFileName中得到一个错误CDERR\U DIALOGFAILURE。这是密码 //在WndProc LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HINSTANCE hInstance; switch (message) { case WM_CREATE:

我从GetOpenFileName中得到一个错误CDERR\U 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, UINT message, WPARAM wParam, LPARAM lParam)
   {

我不知道到底需要什么,但我修改了对话框,使其成为具有剪辑同级的子对象,并删除了所有其他样式和扩展样式,现在它可以工作。

我不知道确切需要什么,但我修改了对话框,使其成为具有剪辑同级的子对象,并删除了所有其他样式和扩展样式,现在它可以工作了有效。

我有另一个版本可以使用。我认为问题可能是,在这个程序中,sizeof(ofn)是76,而在一个有效的程序中,它是88。我曾尝试在include for windows.h和Commdlg.h前面放置一个#define _WIN32_WINNT 0x0500,但没有效果。在我的rc文件中似乎有一个include windows.h,所以可能会优先?我在StdAfx.h中添加了一个#define _WIN32 _winnt0x0500,现在sizeof(ofn)是88,但我仍然得到了CDERR_对话框failure.:-(好的,我将对话框更改为具有剪辑兄弟的子对话框,并删除了所有其他样式,现在它可以工作了。我有另一个版本可以工作。我认为问题可能是大小(ofn)在这个程序中是76,而在一个有效的程序中是88。我曾尝试在include for windows.h和Commdlg.h前面放一个#define(定义)WINNT 0x0500,但没有用。我的rc文件中似乎有一个include windows.h,所以可能优先?我在StdAfx.h中添加了一个#define(定义)WIN32(WINNT 0x0500,现在是sizeof(ofn)是88,但我仍然得到CDERR_对话框失败:-(好的,我将对话框更改为具有剪辑兄弟姐妹的子对话框,并删除了所有其他样式,现在它可以工作了。