📄 compressdlg.h
字号:
// compressDlg.h : header file
//
#if !defined(AFX_COMPRESSDLG_H__C75E6DBF_EF1B_46C6_8270_DB3E2DC4C298__INCLUDED_)
#define AFX_COMPRESSDLG_H__C75E6DBF_EF1B_46C6_8270_DB3E2DC4C298__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CCompressDlg dialog
class CCompressDlg : public CDialog
{
// Construction
public:
void FileCompress();
void SelectSmall(int cnt,int *s1,int *s2);
void HuffmanCoding();
void WeightCount();
CCompressDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CCompressDlg)
enum { IDD = IDD_COMPRESS_DIALOG };
CString m_InputFileName;
CString m_OutFileName;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CCompressDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
///////////////////////////////////////////////////////////////////////////
//自己定义的
FILE *fp,*fout;//文件指针
typedef unsigned char BYTE;//8bits
typedef unsigned short WORD;//16bits
typedef unsigned long DWORD;//32bits
////////////////*.hfm文件的文件头结构////////////////////
typedef struct tagBITMAPFILEHEADER
{
WORD hfType; //指定文件类型,必须是0x4846,即字符串"HF"
DWORD hfSize; //指定文件大小,包括这12个字节
WORD FileNameLength; //指定被压缩文件名称的字节数
BYTE SourceSignalNum; //指定信源符号的个数,也是HUFFMAN码表的项数。
WORD hfOffBits; //从文件头到实际数据的偏移字节数,
//即前两个部分(文件头和码表)的长度之和。
BYTE ValidDataBitsNum; //(数据部分中)最后一个字节中有效的比特位数
} HUFFMANFILEHEADER;
///////////////*.hfm文件的Huffman码表的数据结构//////////////
typedef struct tagHUFFMANTABLE
{
BYTE SourceSignal_CodeLength; //高4bits为信源符号,
//即从原始文件头开始以4bits为单位作为一个信源符号;
//低4bits指定该信源符号对应的Huffman码字的长度,即比特数
WORD CodeBits; //信源符号的Huffman编码码字,为两个字节。其
//码字从高位开始,若低位不足则补“0”。
} HUFFMANTABLE;
typedef struct HuffmanTree //哈夫曼树节点数据结构,准备用三元组伪指针实现二叉树
{
unsigned int Weight;
unsigned int Parent;
unsigned int lChild;
unsigned int rChild;
unsigned char code; //编码值0或1
unsigned char source;//信源符号
}HTNode;
typedef struct t_table
{
WORD HCode;
BYTE length;
}TNode;
HUFFMANFILEHEADER f_head;
HUFFMANTABLE f_table[16]; //定义输出文件码表
TNode temp_table[16]; //临时码表,编程方便
DWORD count[16];
DWORD all_count; //源文件总字符数
HTNode *HT;
CString fname,ftitle,fext;
//////////////////////////////////////////////////////////////////////////////
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CCompressDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnBUTTONBrowse();
virtual void OnOK();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_COMPRESSDLG_H__C75E6DBF_EF1B_46C6_8270_DB3E2DC4C298__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -