⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filedlg.cpp

📁 MD5算法的C++版本
💻 CPP
字号:
// FileDlg.cpp: implementation of the FileDlg class.

/*
 *	Copyright (c) 2006 - 2007 All Rights Reserved
 *
 *	程序作者:
 *		张鲁夺(zhangluduo) : 为所有爱我的人和我爱的人努力!
 *
 *	联系方式:
 *		zhangluduo@msn.com
 *		QQ群:34064264
 *
 *	更新时间:
 *		2007-10-31
 *
 *	功能描述:
 *		打开, 保存, 目录浏览 对话框之调用
 *
 *	授权声明:
 *		许可任何单位,个人随意使用,拷贝,修改,散布及出售这份代码,及其相关的
 *		开发文档,但是必须保留此版权信息,以慰藉作者辛勤的劳动,及表明此代码
 *		的来源,如若此份代码有任何BUG或者您有更好的修改建议, 请通知作者,以
 *		便弥补作者由于水平所限而导致的一些错误和不足,谢谢!
 */

#include "stdafx.h"
#include "FileDlg.h"
#include <memory.h> // for memset

FileDlg::FileDlg()
{
	/** 判断操作系统, 
		并根据操作系统填充结构体大小
	*/

	memset(&m_OFN, 0, sizeof(OPENFILENAMEEX));
	OSVERSIONINFOEX osvi;
	osvi.dwOSVersionInfoSize=sizeof(OSVERSIONINFOEX);
	if(!GetVersionEx((OSVERSIONINFO *)&osvi))
		return ;
	switch(osvi.dwPlatformId)
	{
	case VER_PLATFORM_WIN32_WINDOWS:
		if(	(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==10) || //win 98
			(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==90) || //win Me
			(osvi.dwMajorVersion==3 && osvi.dwMinorVersion ==51) || //win NT 3.51
			(osvi.dwMajorVersion==4 && osvi.dwMinorVersion ==0))	//win NT 4.0
		{
			m_OFN.lStructSize = sizeof(OPENFILENAME);
		}
		break;
	case VER_PLATFORM_WIN32_NT:
		if(	(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==0) ||	//win 2000
			(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==1) ||	//win xp
			(osvi.dwMajorVersion==5 && osvi.dwMinorVersion ==2))	//win 2003
		{
			m_OFN.lStructSize = sizeof(OPENFILENAMEEX);
		}
		break;
	default:
		return ;
	}

	// 初始目录

	char szAppName[256]	= {0};
	GetModuleFileName(NULL, szAppName, 255);
	string strAppName	= szAppName;
	m_InitDir			= strAppName.substr(0,strAppName.find_last_of("\\")+1);
}

FileDlg::~FileDlg()
{

}

UINT_PTR FileDlg::OpenProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	// 使打开对话框居中于屏幕
	if(uMsg == WM_INITDIALOG)
	{
		RECT rtWnd, rcSys;
		::GetWindowRect(GetParent(hwnd), &rtWnd);
		SystemParametersInfo(SPI_GETWORKAREA, 0, &rcSys, 0);
		::MoveWindow(GetParent(hwnd),
					(rcSys.right	- (rtWnd.right	- rtWnd.left))	/ 2,
					(rcSys.bottom	- (rtWnd.bottom	- rtWnd.top))	/ 2,
					rtWnd.right		- rtWnd.left,
					rtWnd.bottom	- rtWnd.top,
					true);
	}
	return 0;
}

vector<string> FileDlg::GetOpenFileName(HWND hWnd, bool bMulti, char* szFilter, char* szInitName)
{
	vector<string> Files;

	m_NameBuf				= new char[_FILEDLG_BUFSIZE + 1];
	memset(m_NameBuf, 0, _FILEDLG_BUFSIZE + 1);
	m_OFN.lpstrFile			= m_NameBuf;
	m_OFN.nMaxFile			= _FILEDLG_BUFSIZE;


	m_OFN.Flags				|= OFN_EXPLORER | OFN_ENABLEHOOK | OFN_FILEMUSTEXIST;
	m_OFN.hwndOwner			= hWnd;
	m_OFN.lpstrInitialDir	= m_InitDir.c_str();
	m_OFN.lpfnHook			= (LPOFNHOOKPROC)m_ThunkOpen.thiscall(this, Thunk::GetAddr(&FileDlg::OpenProc));

	if(szFilter != NULL)
		m_OFN.lpstrFilter	= szFilter;
	if(bMulti)
		m_OFN.Flags			|= OFN_ALLOWMULTISELECT;	

	string strTmp			= "";
	char* ptr				= m_OFN.lpstrFile;
	int nFiles				= 0;

	if(!::GetOpenFileName(&m_OFN))
		goto ERR;

	while(*ptr++)
	{
		nFiles++;
		if(nFiles == 1)
		{
			strTmp = ptr - 1;
			if(strTmp[strTmp.size() - 1] != '\\')
			{
				strTmp += "\\";
				m_InitDir = strTmp;
			}
		}
		else if(nFiles >= 2)
		{
			Files.push_back(strTmp+(ptr - 1));
		}
		while(*ptr++);
	}
	if(Files.size() ==0 )
		Files.push_back(m_OFN.lpstrFile);

	// 返回
	delete[] m_NameBuf;
	return Files;

ERR:

	delete[] m_NameBuf;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -