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;
}

猜你喜欢

转载自blog.csdn.net/csdn_gddf102384398/article/details/88592274