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

📄 数据压缩dlg.h

📁 自己做的作业(自适应霍夫曼解压缩) 完成功能解压缩文件!方法:自适应霍夫曼编码(8bit编码)(有GUI界面)
💻 H
字号:
// 数据压缩Dlg.h : header file
//

#if !defined(AFX_DLG_H__E112D843_A399_4942_B674_E705A681EB8C__INCLUDED_)
#define AFX_DLG_H__E112D843_A399_4942_B674_E705A681EB8C__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
//***************************************
//先试验对8比特编码
#define bitnum  8
#define symbolnum 256
//********************************
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

class CMyDlg : public CDialog
{
// Construction
public:
	typedef struct tree
	{//Huffman树结构
#define NYT 256                                   //设定NYT值 = 256
#define SYMBOL_COUNT 257                          //字符数量 = 257 
#define NODE_TABLE_COUNT ((SYMBOL_COUNT * 2) - 1) //节点数量
#define ROOT_NODE 0                               //根节点
		long int leaf[SYMBOL_COUNT];              //每个字符在Huffman树中的位置
		struct node
		{//节点结构,二差树
			DWORD weight;                         //节点权值
			long int parent;                      //父节点位置
			BOOL child_is_leaf;                   //判定节点是否为叶节点 
			long int child;                        //左边孩子位置,右边孩子位置= 左边 + 1,如果是叶节点=字符数值
		}nodes[NODE_TABLE_COUNT];                  
	}TREE;
	struct FileHeader
	{                                       //压缩后文件记录原始文件的信息
		DWORD namelength;
		DWORD oldlength;
		DWORD newlength;
	};
	void InitializeTree(TREE *tree);             //初始化Huffman树
	void add_new_node(TREE *tree,WORD ch);       //增加新节点
	void swap_nodes(TREE *tree,long int i,long int j); //调换两个节点
	void UpdateWeight(TREE *tree,WORD ch);              //更新Huffman树
	int DecodeSymbol(TREE *tree,BYTE *intput);         //解译字符
	void EncodeSymbol(TREE *tree,BYTE ch,BYTE *output);//编译字符
	void Encode();                                       //编码
	void Decode();                                       //解码
	CMyDlg(CWnd* pParent = NULL);	// standard constructor
	unsigned int iFileNum;                           //处理多文件时总的文件数
	unsigned int iFile;                              //处理多文件时正在处理的文件编号
	CString FileList[4096];                          //处理文件名的数组
	CString CurrentFileName;                         //当前处理路径文件名
	CString FileName;
	CString FileExt;
	CString FileTitle;
	CString FilePath;
	BOOL workflag;                                   //工作状态
	HANDLE m_hThread;                                 //多线程
	HWND hWnd;
	__int64 jc;                                       //进度条计数
	unsigned long int length;                         //打开文件长度
	unsigned long int outlength;                      //压缩文件的比特数
	DWORD timenum;                                    //记录处理时间

// Dialog Data
	//{{AFX_DATA(CMyDlg)
	enum { IDD = IDD_MY_DIALOG };
	CStatic	m_T1;
	CStatic	m_R1;
	CStatic	m_L2;
	CStatic	m_L1;
	CEdit	m_FileLength2;                            //压缩/解压后文件长度
	CEdit	m_Ratio;                                  //压缩比
	CEdit	m_Time;                                   //压缩/解压时间
	CStatic	m_Msg;                                    //消息
	CProgressCtrl	m_ProgBar;                        //进度条
	CString	m_FilePath;                               //压缩文件
	CStatic	m_FileLength;                             //压缩/解压前文件长度
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CMyDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	HICON m_hIcon;

	// Generated message map functions
	//{{AFX_MSG(CMyDlg)
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	afx_msg void OnBtndir();
	afx_msg void OnBtncompress();
	afx_msg void OnBtnuncompress();
	afx_msg void OnTimer(UINT nIDEvent);
	afx_msg void OnBtnhelp();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DLG_H__E112D843_A399_4942_B674_E705A681EB8C__INCLUDED_)

⌨️ 快捷键说明

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