• 实现MFC的两种类型文件对话框


    在使用MFC中,我们经常使用到CFileDialog文件对话框,如果不使用MFC,用Win32如何来实现这种对话框呢?


    我们要做的第一个对话框样式就下面这种


    这里写图片描述
    
    /************************************************************/
    /* 类似MFC的CFileDialog对话框,通过使用GetOpenFileName来实现 
    /* hWnd:父窗口句柄
    /* buf:返回文件的完整路径
    /* nBufSize:buf的大小
    /* title:对话框的标题
    /*************************************************************/
    bool GetFileNameDlg(HWND hWnd,char *buf,int nBufSize,char *title)
    {
        OPENFILENAME fn;
        char * filter = "EXE(*.exe)*.exeAll files*.*";
        memset(&fn,0,sizeof(OPENFILENAME));
        memset(buf,0,nBufSize);
        fn.hwndOwner = hWnd; //设置后就是模态对话框
        fn.lStructSize = sizeof(OPENFILENAME); //结构体大小
        fn.lpstrFilter = filter; //设置过滤器
        fn.lpstrFile = buf; //文件路径
        fn.nMaxFile = nBufSize; 
        fn.lpstrTitle = title; //对话框标题
        fn.Flags = OFN_FILEMUSTEXIST;
        if (GetOpenFileName(&fn))
        {
            return true ;
        } 
        else
        {
            return false ;
        }
    }

    ———-

    再做第二种对话框,就是下面这种


    这里写图片描述
    
    /************************************************************************/
    /* 选择文件夹对话框,通过使用SHBrowseForFolder和SHGetPathFromIDList来实现 
    /* hWnd:父窗口句柄
    /* buf:返回文件夹的完整路径
    /* nBufSize:buf的大小
    /* title:对话框的标题
    /************************************************************************/
    bool GetFloderDlg(HWND hWnd,char *buf,int nBufSize,char *title)
    {
        BROWSEINFO bi;
        memset(&bi,0,sizeof(BROWSEINFO));
        memset(buf,0,nBufSize);
        bi.hwndOwner = hWnd; //设置后就是模态对话框
        bi.lpszTitle = title; //对话框标题
        bi.ulFlags = BIF_RETURNFSANCESTORS;
        LPITEMIDLIST idl = SHBrowseForFolder(&bi);
        if ( idl == NULL)
        {
            return false ;
        }
        SHGetPathFromIDList(idl,buf);
        return true ;
    }

            char szBuf[MAX_PATH];
            GetFloderDlg(hwnd,szBuf,MAX_PATH,"文件对话框");
            GetFileNameDlg(hwnd,szBuf,MAX_PATH,"文件对话框");
       通过调用函数就实现了MFC中CFileDialog的效果,相比较MFC中的,这个效率稍微高一些。
    
  • 相关阅读:
    [uoj276][清华集训2016]汽水——分数规划+点分治
    [bzoj3143][Hnoi2013]游走——动态规划+高斯消元
    TypeScript笔记八
    TypeScript笔记七
    TypeScript笔记六
    TypeScript笔记五
    TypeScript笔记四
    TypeScript笔记三
    TypeScript笔记二
    TypeScript笔记一
  • 原文地址:https://www.cnblogs.com/cuglzf/p/8490685.html
Copyright © 2020-2023  润新知