2011-04-15 68 views
1

我從GetOpenFileName中收到錯誤CDERR_DIALOGFAILURE。這裏的代碼...帶鉤子的OpenFileName導致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, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
+0

我有這個工作的另一個版本。我認爲這個問題可能是sizeof(ofn)在這個程序中是76,而在這個程序中是88。我已經嘗試在windows.h和Commdlg.h的包含文件前加上#define _WIN32_WINNT 0x0500,但無濟於事。似乎有一個包含windows.h在我的rc文件中,所以也許這有優先權? – 2011-04-15 18:34:08

回答

1

我不知道需要什麼,但是我修改使其與剪輯的兄弟姐妹的孩子對話,並消除了所有其他樣式和擴展樣式,現在它的工作原理。