windows 文件夹路径选择弹框

BROWSEINFO bi = { 0 };
bi.lpszTitle = L"请选择文件夹";
bi.ulFlags = BIF_NEWDIALOGSTYLE | BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.hwndOwner = ::GetForegroundWindow();
bi.lpfn = BrowseCallbackProc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
wchar_t path[MAX_PATH];
ZeroMemory(path, MAX_PATH);
SHGetPathFromIDList(pidl, path);
dir = QString::fromWCharArray(path);
CoTaskMemFree(pidl); //释放pIDList所指向内存空间;




static int CALLBACK  BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
	switch (uMsg)
	{
	case BFFM_INITIALIZED:    //初始化消息
	{
		wchar_t szDefaultDir[MAX_PATH] = “D:\\111\\”;
		::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDefaultDir);
	}
	break;
	case BFFM_SELCHANGED:    //选择路径变化,
	{
		TCHAR curr[MAX_PATH];
		SHGetPathFromIDList((LPCITEMIDLIST)lParam, curr);
		QString dir = QString::fromWCharArray(curr);
		QStringList listpath = dir.split("\\");
		if(listpath.size() == 1 || (listpath.size() > 1 && listpath[1].isEmpty()))
			::SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);
		else
			::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)curr);
	}
	break;
	default:
		break;
	}
	return 0;
}

::SendMessage(hwnd, BFFM_ENABLEOK, 0, 0);的lparam设置为0则将确定按钮置灰

BFFM_ENABLEOK   启用或禁用“浏览文件夹”对话框的“确定”按钮。要启用OK按钮,请将此消息的lParam参数设置为非零值。要禁用OK按钮,请将此消息的lParam设置为零。

BFFM_SETSELECTION   选择指定的文件夹。要使用指向ITEMIDLIST结构(PIDL)的指针指定文件夹,请将此消息的lParam设置为PIDL,并将wParam设置为FALSE。要指定文件夹的路径,请将消息的lParam值设置为指向包含路径的以NULL结尾的字符串,并将wParam设置为TRUE。

BFFM_SETSTATUSTEXT  设置状态文本。将此消息的lParam值设置为指向包含所需文本的以NULL结尾的字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值