文档介绍:11 / 13
哈
弗
码
编
码
程
序
说
明
书
:
__
用到的位图和图标添加进去。
3.设计IDD_HUFFMANCODE_DIALOG对话框模板,删除该模板上除Cancel按钮外的所有控件并根据要求和如下表的容,向对话框模板中加入控件。
控件类型
ID
标题
其他属性
静态图片
IDC_STATIC
Type列表框选择Bitmap
静态图片
IDC_STATIC
Type列表框选择Bitmap选中
命令按钮
IDC_VALUE
字符权值输入编码/译码
选中Default button
命令按钮
IDC_TEXT
文本输入编码/译码
选中Default button
命令按钮
IDCANCEL
退出
选中Default button
如下图:
,并添加相关控件,关联成员变量:
成员变量如下表:
控件ID
变量类型
变量名
IDC_CHAR
CString
m_strChar
IDC_CVALUE
int
m_strValue
IDC_EDIT_CONTENT1
CString
m_strContent1
IDC_EDIT_OUTPUT1
CString
m_strOutput1
IDC_LIST_BOX1
CListBox
m_listBox1
IDC_LIST_BOX2
CListBox
m_listBox2
添加消息处理函数:
对象ID
消息
消息处理函数
IDC_ADD
BN_CLICKED
OnAdd〔默认名〕
IDC_OK
BN_CLICKED
OnOk〔默认名〕
IDC_MAKECODE1
BN_CLICKED
OnMakecode1〔默认名〕
IDC_TRANSLATECODE1
BN_CLICKED
OnTranslatecode1<默认名>
编写消息处理函数:
char *str;
char code[27];
int w[27];
HuffmanTree HT;
HuffmanCode HC;
2 / 15
char c[27];
int count=0;
void HuffmanCoding1<HuffmanTree &HT,HuffmanCode &HC,int *w,int n>
{//编码函数,用于调用
if<n<=1> return;
int m=2*n-1;
int i,start,s1,s2;
HT=<HuffmanTree>malloc<<m+1>*sizeof<HTNode>>;
int sum=0;
for<i=1;i<=n;++i>
{
HT[i].weight=w[i];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
sum = sum + HT[i].weight;
}
for<i=n+1;i<=m;++i>
{
HT[i].weight=0;
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
for<i=n+1;i<=m;++i>
{
unsigned int min1 = sum;
unsigned int min2 = sum;
for<int j = 1;j<=i - 1;++j>
if<HT[j].parent ==0 && min1>=HT[j].weight >
{
min1 = HT[j].weight;
s1 = j;
}
for<j=1;j<=i-1;j++ >
if <j!=s1 && HT[j].parent==0 && min2>=HT[j].weight>
{
min2 = HT[j].weight;
s2 = j;
}
HT[s1].parent=i;HT[s2].parent=i;