是在SDK的编程环境下,用getopenfilename打开了系统的对话框
想选择一个文件名,并把它显示在某个按钮上,显示在按钮上我知道怎么实现可是怎么获得选定文件的文件名啊,getfilename不好用,取不到文件名
或许getopenfilename里面的参数有问题,有没有高手帮帮我啊,要快哦
马上给分:)

解决方案 »

  1.   

    CFileDialog::GetPathName 
    CString GetPathName( ) const;Return ValueThe full path of the file.ResCall this function to retrieve the full path of the file entered in the dialog box. The path of the filename includes the file’s title plus the entire directory path. For example, GetPathName will return "C:\FILES\TEXT.DAT" for the file C:\FILES\TEXT.DAT.
      

  2.   

    从"C:\FILES\TEXT.DAT" 解析出文件名应该不难了吧
      

  3.   

    这个是msdn里的吧,我也看到了,不过用这个的话还不如直接用
    getfilename,它返回的直接就是filename了,可是就是不知道函数的用法
    不知道是不是要先调用getfile(),而我是用的getopenfilename来
    打开系统文件对话框的,接着就不知道怎么把这几者联合在一起了:(不过谢谢你啊
      

  4.   

    char* sname = (char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 4096 );
    *sname = '\0';
    OPENFILENAME ofn;
    memset(&ofn, 0, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = m_hWnd;
    ofn.lpstrFilter = "任意类型\0*.*\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFile = sname;
    ofn.nMaxFile = 4096;
    ofn.lpstrTitle = "选择文件";
    ofn.Flags = OFN_CREATEPROMPT|OFN_ENABLESIZING|OFN_HIDEREADONLY;
    if(::GetOpenFileName(&ofn))
    {
    filepath = ofn.lpstrFile;//THIS!!
    }
    HeapFree(GetProcessHeap(), 0, sname );
      

  5.   

    static OPENFILENAME ofn ;void DibFileInitialize (HWND hwnd)
    {
         static TCHAR szFilter[] = TEXT ("Bitmap Files (*.BMP)\0*.bmp\0")  \
                                   TEXT ("All Files (*.*)\0*.*\0\0") ;
         
         ofn.lStructSize       = sizeof (OPENFILENAME) ;
         ofn.hwndOwner         = hwnd ;
         ofn.hInstance         = NULL ;
         ofn.lpstrFilter       = szFilter ;
         ofn.lpstrCustomFilter = NULL ;
         ofn.nMaxCustFilter    = 0 ;
         ofn.nFilterIndex      = 0 ;
         ofn.lpstrFile         = NULL ;          // Set in Open and Close functions
         ofn.nMaxFile          = MAX_PATH ;
         ofn.lpstrFileTitle    = NULL ;          // Set in Open and Close functions
         ofn.nMaxFileTitle     = MAX_PATH ;
         ofn.lpstrInitialDir   = NULL ;
         ofn.lpstrTitle        = NULL ;
         ofn.Flags             = 0 ;             // Set in Open and Close functions
         ofn.nFileOffset       = 0 ;
         ofn.nFileExtension    = 0 ;
         ofn.lpstrDefExt       = TEXT ("bmp") ;
         ofn.lCustData         = 0 ;
         ofn.lpfnHook          = NULL ;
         ofn.lpTemplateName    = NULL ;
    }
    BOOL DibFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
    {
         ofn.hwndOwner         = hwnd ;
         ofn.lpstrFile         = pstrFileName ;
         ofn.lpstrFileTitle    = pstrTitleName ;
         ofn.Flags             = 0 ;
         
         return GetOpenFileName (&ofn) ;
    }
    DibFileSaveDlg (hwnd, szFileName, szTitleName)
    这样szFileName就是你要的文件名。
     
      

  6.   

    BOOL GetOpenFileName(
      LPOPENFILENAME lpofn   // initialization data
    );
    在OPENFILENAME结构中有一个参数是LPTSTR        lpstrFileTitle; 
    当你执行完操作这个参数就会被填上文件名了。你取出来就可以了。
      

  7.   

    OPENFILENAME ofn ;
        static CHAR szFilter[] = "Programs\0*.exe\0" ;    ZeroMemory(&ofn, sizeof( OPENFILENAME)) ;
        ofn.lStructSize = sizeof( OPENFILENAME) ;
        ofn.hwndOwner = HWND_DESKTOP;
        ofn.lpstrFilter = szFilter ;
        ofn.nFilterIndex = 0 ;
        ofn.nMaxFile = MAX_PATH ;
        ofn.lpstrTitle = "请选择目标应用程序:" ;
        ofn.lpstrFile = szFileName ;
        ofn.Flags = OFN_FILEMUSTEXIST | 
                OFN_PATHMUSTEXIST | OFN_EXPLORER ;
        //文件浏览
        if(!GetOpenFileName( &ofn))//选择了取消按钮
            return FALSE ;
        return TRUE ;