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

📄 maindlg.h

📁 zlib 1.2.1 : Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler zlib Home site http://www.
💻 H
字号:
// MainDlg.h : interface of the CMainDlg class
//
/////////////////////////////////////////////////////////////////////////////
#ifndef UNZLIB_MAIN_DLG_H

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
		public CMessageFilter, public CIdleHandler
{
private:
	bool mOkEnable;

public:
	enum { IDD = IDD_MAINDLG };
	enum { BUFF_SIZE = (1 << 14) };	// inflate(), deflate()偵搉偡僶僢僼傽偺僒僀僘

	virtual BOOL PreTranslateMessage(MSG* pMsg)
	{
		return CWindow::IsDialogMessage(pMsg);
	}

	virtual BOOL OnIdle()
	{
		UIUpdateChildWindows();
 		return FALSE;
	}

	DWORD StrToHex(LPTSTR Src)
	{
		DWORD RetVal;
#ifdef	USE_STR_TO_ULONG
		Src[8]	= '\0';
		LPTSTR EndData;
		RetVal	= strtoul(Src, &EndData, 16);
		if (EndData == Src)
			RetVal	= 0xFFFFFFFF;
#else
		BYTE HexBuf[8];
		int HexSize = 8;

		if (FALSE ==AtlHexDecode(Src, 8, HexBuf, &HexSize))
			RetVal	= 0xFFFFFFFF;
		else
		{	
			RetVal	= (HexBuf[0] << 8) | HexBuf[1];
			RetVal	= (RetVal << 8) | HexBuf[2];
			RetVal	= (RetVal << 8) | HexBuf[3];
		}
#endif
		return RetVal;
	}

	int ZCompress(LPBYTE Src, DWORD SrcSize, LPTSTR DestPath)
	{
		// 弌椡僼傽僀儖偺僆乕僾儞
		CAtlFile DestFile;
		if (S_OK != DestFile.Create(DestPath, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_DELETE, OPEN_ALWAYS))
		{
			MessageBox(DestPath, _T("僼傽僀儖偑嶌惉偱偒側偄"), MB_ICONEXCLAMATION);
			return Z_STREAM_ERROR;
		}

		// zlib 弶婜壔
		BYTE DestBuf[BUFF_SIZE];	// 弌椡梡僶僢僼傽
		z_stream ZStream;

		ZStream.next_in = Src;
		ZStream.avail_in = SrcSize;
	
		ZStream.next_out = DestBuf;
		ZStream.avail_out = BUFF_SIZE;

		ZStream.zalloc = Z_NULL;
		ZStream.zfree = Z_NULL;
		ZStream.opaque = Z_NULL;

		int Result = deflateInit(&ZStream, Z_DEFAULT_COMPRESSION);		// zlib 弶婜壔
		if (Z_OK != Result)
		{
			MessageBox((ZStream.msg) ? ZStream.msg : _T("晄柧側僄儔乕"), _T("zlib"), MB_ICONEXCLAMATION);
			return Result;
		}

		// 埑弅
		int Flush	= Z_NO_FLUSH;
		while (1)
		{
			if (ZStream.avail_in < BUFF_SIZE)
				Flush	= Z_FINISH;
			Result	= deflate(&ZStream, Flush);
			if (Z_STREAM_END == Result)		// 姰椆
			{
				DWORD WriteBytes	= BUFF_SIZE - ZStream.avail_out;
				if (WriteBytes > 0)
				{
					if (S_OK != DestFile.Write(DestBuf, WriteBytes))
					{
						MessageBox(DestPath, _T("僼傽僀儖偵彂偒崬傔側偄"), MB_ICONEXCLAMATION);
						Result	= Z_STREAM_ERROR;
						break;
					}
				}
				break;
			}
			else if(Z_OK != Result)		// 僄儔乕
			{
				MessageBox((ZStream.msg) ? ZStream.msg : _T("晄柧側僄儔乕"), _T("zlib"), MB_ICONEXCLAMATION);
				break;
			}
			if (! ZStream.avail_out)	// 弌椡僶僢僼傽偑堦攖偵側偭偨傜丄彂偒弌偡
			{
				if (S_OK != DestFile.Write(DestBuf, BUFF_SIZE))
				{
					MessageBox(DestPath, _T("僼傽僀儖偵彂偒崬傔側偄"), MB_ICONEXCLAMATION);
					Result	= Z_STREAM_ERROR;
					break;
				}
				ZStream.next_out = DestBuf;
				ZStream.avail_out = BUFF_SIZE;
			}
		}

		// 屻張棟
		deflateEnd(&ZStream);
		return Result;
	}

	int ZUncompress(LPBYTE Src, DWORD SrcSize, LPTSTR DestPath)
	{
		// 弌椡僼傽僀儖偺僆乕僾儞
		CAtlFile DestFile;
		if (S_OK != DestFile.Create(DestPath, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_DELETE, OPEN_ALWAYS))
		{
			MessageBox(DestPath, _T("僼傽僀儖偑嶌惉偱偒側偄"), MB_ICONEXCLAMATION);
			return Z_STREAM_ERROR;
		}

		// zlib 弶婜壔
		BYTE DestBuf[BUFF_SIZE];	// 弌椡梡僶僢僼傽
		z_stream ZStream;

		ZStream.next_in = Src;
		ZStream.avail_in = SrcSize;
	
		ZStream.next_out = DestBuf;
		ZStream.avail_out = BUFF_SIZE;

		ZStream.zalloc = Z_NULL;
		ZStream.zfree = Z_NULL;

		int Result = inflateInit(&ZStream);		// zlib 弶婜壔
		if (Z_OK != Result)
		{
			MessageBox((ZStream.msg) ? ZStream.msg : _T("晄柧側僄儔乕"), _T("zlib"), MB_ICONEXCLAMATION);
			return Result;
		}

		// 揥奐丂- 弌椡僒僀僘偑傢偐偭偰偄傟偽丄uncompress()偱廫暘
		while (1)
		{
			Result	= inflate(&ZStream, Z_NO_FLUSH);
			if (Z_STREAM_END == Result)		// 姰椆
			{
				DWORD WriteBytes	= BUFF_SIZE - ZStream.avail_out;
				if (WriteBytes > 0)
				{
					if (S_OK != DestFile.Write(DestBuf, WriteBytes))
					{
						MessageBox(DestPath, _T("僼傽僀儖偵彂偒崬傔側偄"), MB_ICONEXCLAMATION);
						Result	= Z_STREAM_ERROR;
						break;
					}
				}
				break;
			}
			else if(Z_OK != Result)		// 僄儔乕
			{
				MessageBox((ZStream.msg) ? ZStream.msg : _T("晄柧側僄儔乕"), _T("zlib"), MB_ICONEXCLAMATION);
				break;
			}
			if (! ZStream.avail_out)	// 弌椡僶僢僼傽偑堦攖偵側偭偨傜丄彂偒弌偡
			{
				if (S_OK != DestFile.Write(DestBuf, BUFF_SIZE))
				{
					MessageBox(DestPath, _T("僼傽僀儖偵彂偒崬傔側偄"), MB_ICONEXCLAMATION);
					Result	= Z_STREAM_ERROR;
					break;
				}
				ZStream.next_out = DestBuf;
				ZStream.avail_out = BUFF_SIZE;
			}
		}

		// 屻張棟
		inflateEnd(&ZStream);
		return Result;
	}

	BEGIN_UPDATE_UI_MAP(CMainDlg)
        UPDATE_ELEMENT(IDOK, UPDUI_CHILDWINDOW)
        UPDATE_ELEMENT(IDC_BTN_COMPRESS, UPDUI_CHILDWINDOW)
	END_UPDATE_UI_MAP()

	BEGIN_MSG_MAP(CMainDlg)
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
		MESSAGE_HANDLER(WM_DROPFILES, OnDropFiles)
//		COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout)
		COMMAND_ID_HANDLER(IDC_BTN_SRC, OnBnClkSrc)
		COMMAND_ID_HANDLER(IDC_BTN_DEST, OnBnClkDest)
		COMMAND_CODE_HANDLER(EN_UPDATE, OnEnUpdate)
		COMMAND_ID_HANDLER(IDOK, OnOK)
		COMMAND_ID_HANDLER(IDC_BTN_COMPRESS, OnOK)
 		COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
 	END_MSG_MAP()

// Handler prototypes (uncomment arguments if needed):
//	LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
//	LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
//	LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)

/* ------------ 儊僢僙乕僕僴儞僪儔 --------------------------------------------------------------------- */
	LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
	{
		// center the dialog on the screen
		CenterWindow();

		// set icons
		HICON hIcon = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
			IMAGE_ICON, ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON), LR_DEFAULTCOLOR);
		SetIcon(hIcon, TRUE);
		HICON hIconSmall = (HICON)::LoadImage(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDR_MAINFRAME), 
			IMAGE_ICON, ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON), LR_DEFAULTCOLOR);
		SetIcon(hIconSmall, FALSE);

		// register object for message filtering and idle updates
		CMessageLoop* pLoop = _Module.GetMessageLoop();
		ATLASSERT(pLoop != NULL);
		pLoop->AddMessageFilter(this);
		pLoop->AddIdleHandler(this);

		UIAddChildWindowContainer(m_hWnd);
	
		// 僐儞僩儘乕儖偺弶婜壔
		SetDlgItemText(IDC_EDT_OFFSET, _T("00007EDB"));
		UIEnable(IDOK, 0);
		UIEnable(IDC_BTN_COMPRESS, 0);
		mOkEnable	= FALSE;

		return TRUE;
	}
	LRESULT OnDropFiles(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
	{
		HDROP hDrop = (HDROP)wParam;
		TCHAR SrcPath[MAX_PATH * 2];

		// 僪儔僢僌偝傟偨僼傽僀儖傪丄僄僨傿僢僩儃僢僋僗偵僙僢僩
		::DragQueryFile(hDrop, 0, SrcPath, MAX_PATH * 2 - 4);
		SetDlgItemText(IDC_EDT_SRC, SrcPath);
		lstrcat(SrcPath, _T(".log"));
		SetDlgItemText(IDC_EDT_DEST, SrcPath);

		return 0;
	}

/* ------------- 僐儅儞僪僴儞僪儔 ---------------------------------------------------------------------- */
	LRESULT OnAppAbout(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		CAboutDlg dlg;
		dlg.DoModal();
		return 0;
	}

	LRESULT OnBnClkSrc(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("All Files (*.*)\0*.*\0"), CWindow::m_hWnd);
		if (dlg.DoModal() == IDOK)
		{
			ATLTRACE("Src : title = %s\n", dlg.m_szFileTitle);
			ATLTRACE("name = %s\n", dlg.m_szFileName);

			// 擖椡僼傽僀儖柤傪僙僢僩
			CEdit EditSrc	= GetDlgItem(IDC_EDT_SRC);
			EditSrc.SetWindowText(dlg.m_szFileName);

			// 弌椡僼傽僀儖柤傪僙僢僩
			CEdit EditDest	= GetDlgItem(IDC_EDT_DEST);
			TCHAR DestPath[MAX_PATH * 2];

			lstrcpyn(DestPath, dlg.m_szFileName, MAX_PATH * 2 - 4);
			lstrcat(DestPath, _T(".log"));
			EditDest.SetWindowText(DestPath);
		}
		return 0;
	}

	LRESULT OnBnClkDest(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		CFileDialog dlg(TRUE, _T("log"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Data Files (*.log)\0*.dat\0All Files (*.*)\0*.*\0"), CWindow::m_hWnd);
		if (dlg.DoModal() == IDOK)
		{
			ATLTRACE("Dest : title = %s\n", dlg.m_szFileTitle);
			ATLTRACE("name = %s\n", dlg.m_szFileName);

			// 弌椡僼傽僀儖柤傪僙僢僩
			CEdit EditDest	= GetDlgItem(IDC_EDT_DEST);
			EditDest.SetWindowText(dlg.m_szFileName);
		}
		return 0;
	}

	LRESULT OnEnUpdate(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		WORD wID2;
		if (wID == IDC_EDT_SRC)
			wID2	= IDC_EDT_DEST;
		else if (wID == IDC_EDT_DEST)
			wID2	= IDC_EDT_SRC;
		else return 0;

		// 僷僗偑桳岠偐偳偆偐
		TCHAR FilePath[4];
		DWORD PathLen	= GetDlgItemText(wID, FilePath, sizeof(TCHAR) * 4);
		if (mOkEnable)
		{
			if (PathLen == 0)
			{
				mOkEnable	= false;
				UIEnable(IDOK, 0);
				UIEnable(IDC_BTN_COMPRESS, 0);
			}
		}
		else
		{
			if (PathLen > 0 && GetDlgItemText(wID2, FilePath, sizeof(TCHAR) * 4) > 0)
			{
				mOkEnable	= true;
				UIEnable(IDOK, 1);
				UIEnable(IDC_BTN_COMPRESS, 1);
			}
		}

		return 0;
	}

	LRESULT OnOK(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		// TODO: Add validation code 
		//CloseDialog(wID);

		// 擖椡僼傽僀儖偺僆乕僾儞
		CEdit EditSrc	= GetDlgItem(IDC_EDT_SRC);
		TCHAR SrcPath[MAX_PATH * 2];

		EditSrc.GetWindowText(SrcPath, MAX_PATH * 2);
		ATLTRACE("SrcPath = %s\n", SrcPath);

		CAtlFile SrcFile;
		if (S_OK != SrcFile.Create(SrcPath, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING))
		{
			MessageBox(SrcPath, _T("僼傽僀儖偑奐偗側偄"), MB_ICONEXCLAMATION);
			return 0;
		}

		ULONGLONG UlSrcSize;
		SrcFile.GetSize(UlSrcSize);
		if (UlSrcSize >> 32)
		{
			MessageBox(SrcPath, _T("僼傽僀儖僒僀僘偑戝偒夁偓傞"), MB_ICONEXCLAMATION);
			return 0;
		}
		DWORD SrcSize	= (DWORD)UlSrcSize;
		ATLTRACE("SrcSize = %ld\n", SrcSize);

		// 僆僼僙僢僩抣偺撉傒崬傒
		int Result;
		DWORD Offset	= 0;
		if (wID == IDOK)
		{
			TCHAR HexData[16];
			int Result	= GetDlgItemText(IDC_EDT_OFFSET, HexData, sizeof(TCHAR) * 16);
			Offset	= StrToHex(HexData);
			if (Result > sizeof(TCHAR) * 8 || Offset > SrcSize)
			{
				MessageBox(_T("僆僼僙僢僩抣偑晄惓"), _T("僄儔乕"), MB_ICONEXCLAMATION);
				return 0;
			}
		}

		// 擖椡僼傽僀儖偺撉傒崬傒
		HANDLE hf	= (HANDLE)SrcFile;
		CAtlFileMapping<BYTE> SrcMap;
		if (S_OK != SrcMap.MapFile(hf))
		{
			MessageBox(SrcPath, _T("僼傽僀儖偑撉傒崬傔側偄"), MB_ICONEXCLAMATION);
			return 0;
		}
		LPBYTE Src	= static_cast<LPBYTE>(SrcMap) + Offset;

		// 揥奐 or 埑弅
		CEdit EditDest	= GetDlgItem(IDC_EDT_DEST);
		TCHAR DestPath[MAX_PATH * 2];

		EditDest.GetWindowText(DestPath, MAX_PATH * 2);
		ATLTRACE("DestPath = %s\n", DestPath);

		if (wID == IDOK)
		{
			// zlib 僿僢僟乕偺僠僃僢僋
			int ZlibHeader	= (Src[0] << 8) | Src[1];
			ATLTRACE("Header = %d (0x%04x)\n", ZlibHeader, ZlibHeader);

			if (ZlibHeader % 31)
			{
				MessageBox(SrcPath, _T("zlib : Incorrect header"), MB_ICONEXCLAMATION);
				return 0;
			}
			Result	= ZUncompress(Src, SrcSize, DestPath);
		}
		else if (wID == IDC_BTN_COMPRESS)
			Result	= ZCompress(Src, SrcSize, DestPath);

		// 屻張棟
		if (Z_STREAM_END == Result)
			MessageBox(_T("姰椆偟傑偟偨"), _T(""), MB_OK);
		else
			Result	= ::DeleteFile(DestPath);	// 幐攕側傜丄弌椡僼傽僀儖嶍彍

		return 0;
	}

	LRESULT OnCancel(WORD /*wNotifyCode*/, WORD wID, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
	{
		CloseDialog(wID);
		return 0;
	}

	void CloseDialog(int nVal)
	{
		DestroyWindow();
		::PostQuitMessage(nVal);
	}
};

#endif // UNZLIB_ABOUT_DLG_H

⌨️ 快捷键说明

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