OPENFILENAME ofn;       // common dialog box structure
char szFile[260];       // buffer for file name
HWND hwnd;              // owner window
HANDLE hf;              // file handle// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
// use the contents of szFile to initialize itself.
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;// Display the Open dialog box. if (GetOpenFileName(&ofn)==TRUE) //
    hf = CreateFile(ofn.lpstrFile, 
                    GENERIC_READ,
                    0,
                    (LPSECURITY_ATTRIBUTES) NULL,
                    OPEN_EXISTING,
                    FILE_ATTRIBUTE_NORMAL,
                    (HANDLE) NULL);但是程序运行却没有出现对话框.经查证,应该是if (GetOpenFileName(&ofn)==TRUE)函数返回值不对.不知道要如何解决这样的问题呢?

解决方案 »

  1.   

    你应该对 CFileDialog 的 m_ofn 数据成员赋值, 并使用 DoModal 来显示对话框
      

  2.   

    ofn.hwndOwner = hwnd; <-有没有将父窗口的句柄传给hwnd?
      

  3.   

    看错了,不好意思用GetLastError看看是什么错误
      

  4.   

    class FileBrowserCtrl : public CEditBrowserCtrl
    {
    public:
    OPENFILENAME m_ofnstruct;
    BEGIN_MSG_MAP(FileBrowserCtrl)
    MESSAGE_HANDLER(WM_EDITBROWSER_PRESS, OnFileBrowserCtrlPress)
    CHAIN_MSG_MAP(CEditBrowserCtrl)
    END_MSG_MAP()
    FileBrowserCtrl()
    {
    _tcsncpy(m_Filter,_T("所有文件(*.*)\0*.*\0\0"),500);
    memset((void *)&m_ofnstruct, 0, sizeof(OPENFILENAME));
    m_ofnstruct.lpstrTitle = _T("选择文件");
    m_ofnstruct.lpstrFilter = m_Filter;
    m_ofnstruct.nFilterIndex = 0;
    m_ofnstruct.Flags = OFN_CREATEPROMPT | OFN_LONGNAMES |OFN_EXPLORER|OFN_ENABLEHOOK;//|OFN_ENABLESIZING ;
    }
    LRESULT OnFileBrowserCtrlPress(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
    TCHAR InitDir[MAX_PATH] = {0};
    GetWindowText(InitDir,MAX_PATH);
    if(_tcsclen(InitDir) == 0)
    ::GetCurrentDirectory(MAX_PATH,InitDir); if(!::PathFileExists(InitDir))
    ::PathRemoveFileSpec(InitDir); BYTE OFN_Struct[88];
    OPENFILENAME* ofnstruct = (OPENFILENAME*) OFN_Struct;
    memset(ofnstruct, 0, sizeof(OFN_Struct));
    memcpy((void *)ofnstruct,(void *)&m_ofnstruct,sizeof(OPENFILENAME));

    ofnstruct->lStructSize = sizeof(OFN_Struct); TCHAR filebuffer[255] = {0};
    TCHAR *sFileName;
    m_ofnstruct.hwndOwner = m_hWnd;
    ofnstruct->lpstrFile = filebuffer;
    ofnstruct->nMaxFile = 256;
    ofnstruct->lpstrInitialDir = InitDir;
    if ( GetOpenFileName( ofnstruct ) )
    {
    sFileName = ofnstruct->lpstrFile;
    SetWindowText(sFileName);
    int len = _tcslen(sFileName);
    SetSel(len,len,FALSE);
    }
    return 0;
    } void SetFilter(LPCTSTR filter)
    {
    _tcsncpy(m_Filter,filter,500);
    }protected:
    TCHAR m_Filter[512];
    };
      

  5.   

    谢谢大家的提示,我使用了FindWindow()解决了窗口句柄的问题,就OK了.