• 实现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中的,这个效率稍微高一些。
    
  • 相关阅读:
    推荐系统学习--cb+cf 初见
    耳机的阻抗和灵敏度问题
    java中常见的几种Runtimeexception
    java泛型
    ubuntu安装opencv
    ubuntu12.04静态ip设置问题
    Graph Theory
    SQL简单上手教程
    C++ 构造函数、拷贝构造函数和赋值运算符重载
    C语言函数调用栈
  • 原文地址:https://www.cnblogs.com/cuglzf/p/8490685.html
Copyright © 2020-2023  润新知