开发者

OpenFileName with hook results in CDERR_DIALOGFAILURE

I'm getting an error CDERR_DIALOGFAILURE from GetOpenFileName. here's the code...

// In 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);

// In message processing within 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 == CDE开发者_如何学运维RR_DIALOGFAILURE)

// The dialog procedure looks like this but never gets called.

   UINT_PTR CALLBACK HookFileOpen (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
   {


I don't know exactly what is needed but I modified the dialog making it a child with clip siblings and eliminated all other styles and extended styles and now it works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜