zoukankan      html  css  js  c++  java
  • 实现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中的,这个效率稍微高一些。
    
  • 相关阅读:
    好还是坏:人工智能二分类问题
    神经网络手写数字识别
    TensorFlow or PyTorch
    什么是深度学习
    五个常见 AI 开发库
    AI——第四次工业革命
    NodeJs获取不到POST参数
    Android权限
    【nodejs学习】3.进程管理及异步编程
    每日一题
  • 原文地址:https://www.cnblogs.com/cuglzf/p/8490685.html
Copyright © 2011-2022 走看看