选择文件或文件夹对话框---带有回调函数

QString FileDialogUtils::getSaveFileDir(const QString& tips/* = QString()*/, QWidget* parent/* = 0*/)
{
    QString result;

    BROWSEINFO bi = {0};

    if(!tips.isEmpty()) {
        bi.lpszTitle = tips.utf16();
    }

    if(parent) {
        bi.hwndOwner = (HWND)parent->winId();
    }

  //BIF_BROWSEINCLUDEFILES | // 用来显示文件
    bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; 

    bi.lpfn = BrowseCallbackProc; // 回调函数

    LPITEMIDLIST pidl = SHBrowseForFolder(&bi);

    if (pidl != NULL) {  // else, user canceled
        TCHAR szPath[MAX_PATH];
        if(SHGetPathFromIDList(pidl, szPath)) {
            result = QString::fromUtf16(szPath);
        }
    }

    return result;
}

INT CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lp, LPARAM pData)
{
    LPITEMIDLIST tmp = (LPITEMIDLIST)pData;
    QString result;

    switch(uMsg)
    {
    case BFFM_INITIALIZED:
       //SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szdir);
        break;

    case BFFM_SELCHANGED:
        // Set the status window to the currently selected path.
        if (tmp != NULL) {  // else, user canceled
            TCHAR szPath[MAX_PATH];
            if(SHGetPathFromIDList(tmp, szPath)) {
                result = QString::fromUtf16(szPath);
            }
        }
        break;
    }

    return 0;
}
时间: 2024-10-03 04:08:28

选择文件或文件夹对话框---带有回调函数的相关文章

c#调用c++带有回调函数方法的实现

最近完成了一个C++版本的对外sdk程序,其中有部分回调函数使用. C++程序使用时没有异常,但是在C#环境下使用时出了点问题,简单总结下. 感谢博客:http://blog.csdn.net/songjinshi/article/details/8153635 帮助我解决了问题. C++中的回调函数原型如下: typedef void (STDCALL *fCallback)(const char* csDetail, void *pUser); 其中有一个参数是char * ,就是字符指针,

基于委托的C#异步编程的一个小例子 带有回调函数的例子

我创建的是一个winform测试项目:界面如下: 设置: 下面是代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; usin

Cocos2d-x 3.x中新的回调函数归纳

由于引入了C++ 11特性,cocos2d-x 3.x中许多实现方案,相对于以前的cocos2d-x 2.x,都有了很大的改进,当然性能上也得到一定的提升. 本文关注的是回调函数从2.x到3.x的变化. cocos2d-x 2.x时代的回调函数 2.X时代主要使用CCCallFunc.CCCallFuncN和CCCallFuncND等几种方式实现. CCCallFunc.CCCallFuncN和CCCallFuncND都用来创建带有回调函数的动作,区别主要在于回调函数是否带有参数. 2.x时代实

弹出打开/保存文件对话框 选择文件夹对话框

打开/保存文件对话框: CFileDialog::CFileDialog( BOOL bOpenFileDialog, //为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框 LPCTSTR lpszDefExt = NULL, //默认的文件扩展名 LPCTSTR lpszFileName = NULL, //默认的文件名 DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //设定风格 LPCTSTR lpszFilt

VC中打开对话框选择文件和文件夹

1.选择文件 CFileDialogdlg(true, NULL, NULL, NULL, "所有文件 | *.*", this); if (IDOK == dlg. DoModal()) { MessageBox(dlg .GetPathName(), _T("" )); } 2.选择文件夹 BROWSEINFO bi ;            // BROWSEINFO结构体 TCHAR Buffer [512] = ""; TCHAR Fu

Windows--MFC选择文件对话框和选择文件夹对话框

选择单个文件对话框: 1 CString strFile = _T(""); 2 3 CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"), NULL); 4 5 if (dlgFile.DoModal()) 6 { 7 strFile = dlgFile.GetPathName(); 8 } 选

java 选择文件夹对话框

java swing 选择文件夹对话框 import java.io.File; import javax.swing.JFileChooser; public class Test2 { public static void main(String[] args) { JFileChooser jf = new JFileChooser(); jf.setSelectedFile(new File("c:\\我的报表.xls")); int value = jf.showSaveDi

确定文件的位置--浏览文件夹对话框folderBrowserDialog

private void button1_Click(object sender, EventArgs e) { folderBrowserDialog1.ShowNewFolderButton = true;//是否显示新建的文件夹选项 DialogResult dr = folderBrowserDialog1.ShowDialog();//显示选择文件夹对话框 if (dr == DialogResult.OK) { MessageBox.Show(folderBrowserDialog1

自学整理一:java文件对话框的使用(包括文件多选,文件、文件夹同时可选操作)

老早写的,现在转移阵地 在java中有两种方式调用文件对话框 (1)一种是AWT中的FileDialog类,通过FileDialog类创建一个对象,该对象即是所需要的对话框, 例如,FileDialog dialog=new FileDialog(new Frame(),"选择存放位置",FileDialog.LOAD);   这一行代码使用了FileDialog类的其中一个构造函数 FileDialog(Dialog parent,String title, int mode)