Windows保存文件对话框、打开文件对话框、获取文件目录对话框

BOOL OpenFileDialog(const TCHAR* szTitle, HWND hWnd, TCHAR *szFullName, int fullNameLength,TCHAR* szFileName,int fileNameLength,TCHAR* szFilter)
	{
		OPENFILENAME ofn;
		ZeroMemory(&ofn, sizeof(ofn));

		ofn.lStructSize = sizeof(ofn);
		ofn.hwndOwner = hWnd;

		ofn.lpstrTitle = szTitle;//对话框标题

		ofn.lpstrFile = szFullName;//包含了全路径的文件名缓冲区
		ofn.nMaxFile = sizeof(TCHAR)*fullNameLength;
		// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
		// use the contents of szFile to initialize itself.
		if ((szFullName != NULL) && (fullNameLength > 0))
			ofn.lpstrFile[0] = _T('\0');

		ofn.lpstrFileTitle = szFileName;//不包含全路径的文件名缓冲区
		ofn.nMaxFileTitle = sizeof(TCHAR)*fileNameLength;
		if ((szFileName != NULL) && (fileNameLength > 0))
			ofn.lpstrFileTitle[0] = _T('\0');
		
		ofn.lpstrFilter = szFilter;//例如:_T("音乐文件(*.mp3)\0*.mp3\0所有文件(*.*)\0*.*\0\0");
		//ofn.nFilterIndex = 1;
		ofn.lpstrInitialDir = NULL;
		ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

		return GetOpenFileName(&ofn);
	}

	BOOL SaveFileDialog(const TCHAR* szTitle, HWND hWnd, TCHAR *szFullName, int fullNameLength, TCHAR* szFileName, int fileNameLength, TCHAR* szFilter)
	{
		OPENFILENAME ofn;
		ZeroMemory(&ofn, sizeof(ofn));
		ofn.lStructSize = sizeof(ofn);
		ofn.hwndOwner = hWnd;
		ofn.lpstrTitle = szTitle;//对话框标题

		ofn.lpstrFile = szFullName;//包含了全路径的文件名缓冲区
		ofn.nMaxFile = sizeof(TCHAR)*fullNameLength;
		// Set lpstrFile[0] to '\0' so that GetOpenFileName does not 
		// use the contents of szFile to initialize itself.
		if ((szFullName != NULL) && (fullNameLength > 0))
			ofn.lpstrFile[0] = _T('\0');

		ofn.lpstrFileTitle = szFileName;//不包含全路径的文件名缓冲区
		ofn.nMaxFileTitle = sizeof(TCHAR)*fileNameLength;
		if ((szFileName != NULL) && (fileNameLength > 0))
			ofn.lpstrFileTitle[0] = _T('\0');
		ofn.lpstrFilter = szFilter;//例如:_T("音乐文件(*.mp3)\0*.mp3\0所有文件(*.*)\0*.*\0\0");
		ofn.lpstrDefExt = _T("");
		ofn.lpstrInitialDir = NULL;
		ofn.Flags = OFN_OVERWRITEPROMPT;
		return GetSaveFileName(&ofn);
	}

bool OpenDirectory(HWND hwnd, TCHAR* szTitle, TCHAR* recvBuf)
{
	BROWSEINFO bi = { 0 };
	bi.hwndOwner = hwnd;
	bi.lpszTitle = szTitle;
	LPITEMIDLIST lpidlBrowse = SHBrowseForFolder(&bi);
	if (lpidlBrowse)
	{
		if (::SHGetPathFromIDList(lpidlBrowse, recvBuf))
		{
			::CoTaskMemFree(lpidlBrowse);
			return true;
		}
		else
		{
			::CoTaskMemFree(lpidlBrowse);
			return false;// 选择了计算机
		}
	}
	return false;
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值