📄 huffmandlg.cpp
字号:
{
p=GetDlgItem(IDC_EDIT7);
p->EnableWindow(TRUE);
i++;
}
if(i<num)
{
p=GetDlgItem(IDC_EDIT8);
p->EnableWindow(TRUE);
i++;
}
if(i<num)
{
p=GetDlgItem(IDC_EDIT9);
p->EnableWindow(TRUE);
i++;
}
if(i<num)
{
p=GetDlgItem(IDC_EDIT10);
p->EnableWindow(TRUE);
i++;
}
nownum=0;
nowpage=0;
for(i=0;i<num;i++)
w[i]=0;
}
//CDialog::OnOK();
}
void CHuffmanDlg::OnNextpage()
{
// TODO: Add your control notification handler code here
int i;
if(nownum+10<num)
{
if(UpdateData())
{
w[nownum]=m_f1;
nownum++;
w[nownum]=m_f2;
nownum++;
w[nownum]=m_f3;
nownum++;
w[nownum]=m_f4;
nownum++;
w[nownum]=m_f5;
nownum++;
w[nownum]=m_f6;
nownum++;
w[nownum]=m_f7;
nownum++;
w[nownum]=m_f8;
nownum++;
w[nownum]=m_f9;
nownum++;
w[nownum]=m_f10;
nownum++;
}
}
i=nownum;
nowpage++;
CWnd* p;
p=GetDlgItem(IDC_EDIT1);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT2);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT3);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT4);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT5);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT6);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT7);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT8);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT9);
p->EnableWindow(FALSE);
p=GetDlgItem(IDC_EDIT10);
p->EnableWindow(FALSE);
if(i<num)
{
m_nStr1.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT1);
p->EnableWindow(TRUE);
m_f1=w[i];
i++;
}
if(i<num)
{
m_nStr2.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT2);
p->EnableWindow(TRUE);
m_f2=w[i];
i++;
}
if(i<num)
{
m_nStr3.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT3);
p->EnableWindow(TRUE);
m_f3=w[i];
i++;
}
if(i<num)
{
m_nStr4.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT4);
p->EnableWindow(TRUE);
m_f4=w[i];
i++;
}
if(i<num)
{
m_nStr5.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT5);
p->EnableWindow(TRUE);
m_f5=w[i];
i++;
}
if(i<num)
{
m_nStr6.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT6);
p->EnableWindow(TRUE);
m_f6=w[i];
i++;
}
if(i<num)
{
m_nStr7.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT7);
p->EnableWindow(TRUE);
m_f7=w[i];
i++;
}
if(i<num)
{
m_nStr8.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT8);
p->EnableWindow(TRUE);
m_f8=w[i];
i++;
}
if(i<num)
{
m_nStr9.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT9);
p->EnableWindow(TRUE);
m_f9=w[i];
i++;
}
if(i<num)
{
m_nStr10.Format("%d",i+1);
p=GetDlgItem(IDC_EDIT10);
p->EnableWindow(TRUE);
m_f10=w[i];
i++;
}
UpdateData(FALSE);
}
void CHuffmanDlg::OnLastpage()
{
// TODO: Add your control notification handler code here
int i=nownum;
if(UpdateData())
{
if(i<num)
{
w[i]=m_f1;
i++;
}
if(i<num)
{
w[i]=m_f2;
i++;
}
if(i<num)
{
w[i]=m_f3;
i++;
}
if(i<num)
{
w[i]=m_f4;
i++;
}
if(i<num)
{
w[i]=m_f5;
i++;
}
if(i<num)
{
w[i]=m_f6;
i++;
}
if(i<num)
{
w[i]=m_f7;
i++;
}
if(i<num)
{
w[i]=m_f8;
i++;
}
if(i<num)
{
w[i]=m_f9;
i++;
}
if(i<num)
{
w[i]=m_f10;
i++;
}
}
CWnd* p;
p=GetDlgItem(IDC_EDIT1);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT2);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT3);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT4);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT5);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT6);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT7);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT8);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT9);
p->EnableWindow(TRUE);
p=GetDlgItem(IDC_EDIT10);
p->EnableWindow(TRUE);
if(nowpage>0)
nowpage--;
if(nownum>0)
nownum-=10;
i=nownum;
m_f1=w[i];
m_nStr1.Format("%d",i+1);
i++;
m_f2=w[i];
m_nStr2.Format("%d",i+1);
i++;
m_f3=w[i];
m_nStr3.Format("%d",i+1);
i++;
m_f4=w[i];
m_nStr4.Format("%d",i+1);
i++;
m_f5=w[i];
m_nStr5.Format("%d",i+1);
i++;
m_f6=w[i];
m_nStr6.Format("%d",i+1);
i++;
m_f7=w[i];
m_nStr7.Format("%d",i+1);
i++;
m_f8=w[i];
m_nStr8.Format("%d",i+1);
i++;
m_f9=w[i];
m_nStr9.Format("%d",i+1);
i++;
m_f10=w[i];
m_nStr10.Format("%d",i+1);
i++;
UpdateData(FALSE);
}
void CHuffmanDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CWnd *p;
if(nowpage==0)
{
p=GetDlgItem(IDC_LASTPAGE);
p->EnableWindow(FALSE);
}
else
{
p=GetDlgItem(IDC_LASTPAGE);
p->EnableWindow();
}
if(nownum+10>num)
{
p=GetDlgItem(IDC_NEXTPAGE);
p->EnableWindow(FALSE);
}
else
{
p=GetDlgItem(IDC_NEXTPAGE);
p->EnableWindow();
}
if(m_nFlag==-1)
{
p=GetDlgItem(IDC_OTHERHUFFMAN);
p->EnableWindow(FALSE);
}
else
{
p=GetDlgItem(IDC_OTHERHUFFMAN);
p->EnableWindow();
}
CDialog::OnTimer(nIDEvent);
}
bool CHuffmanDlg::IsRight()
{
int i;
float s=0;
for(i=0;i<num;i++)
{
s+=w[i];
if(w[i]==0)
return false;
}
if(s-1<0.000001&&s-1>-0.000001)
return true;
else
return false;
}
void CHuffmanDlg::Extend2(float s1)
{
/* HE2=new char*[num];
int i,sn1=0,sn2,j,k,j2,l,k3;//sn1为第一段编码的个数,j为第一段编码的长度;
//sn2为第二段编码的个数,j2为第二段编码的长度;
for(i=0;i<num;i++)
{
if(w[i]>=s1)
sn1++;
}
sn2=num-sn1;
i=2;
j=1;
while(i<sn1)
{
i=i*2;
j++;
}
for(k=0;k<sn1;k++)
{ //第一段编码
HE2[k]=new char[j+1];
HE2[k][j]='\0';
mychange(HE2[k],k,j);
}
//第二段编码
if(i>=sn1+sn2)
{
for(k=0;k<sn2;k++)
{
HE2[k+sn1]=new char[j+1];
HE2[k+sn1][j]='\0';
mychange(HE2[k+sn1],k,j);
}
j2=0;
}
else
{
i=2*(i-sn1);
j2=1;
while(i<sn2)
{
i=i*2;
j2++;
}
i=i/(i-sn1);
l=sn1;
k3=0;
for(k=0;k<sn2;k++)
{
if(k3>i-1)
{
k3=0;
l++;
}
HE2[k+sn1]=new char[j+j2+1];
HE2[k+sn1][j+j2]='\0';
mychange(HE2[k+sn1],l,j);
mychange(HE2[k+sn1]+j,k3,j2);
k3++;
}
l=l-sn2;
}*/
}
void CHuffmanDlg::mychange(char *str, int n, int len)
{
int temp;
len--;
while(n)
{
temp=n%2+48;
str[len]=temp;
n=n/2;
len--;
}
for(;len>=0;len--)
str[len]='0';
}
void CHuffmanDlg::OnOtherhuffman()
{
// TODO: Add your control notification handler code here
// Extend2(0.1);
CResultDlg dlg;
dlg.flag=m_nFlag;
dlg.w2=ws;
dlg.type=1;
dlg.num=num;
dlg.DoModal();
}
void CHuffmanDlg::bubble()
{
int i,j,t;
float temp;
for(i=0;i<=num-1;i++)
{
t=num-i;
for(j=0;j<t-1;j++)
if(ws[j]<ws[j+1])
{
temp=ws[j];
ws[j] =ws[j+1];
ws[j+1] =temp;
}
}
}
void CHuffmanDlg::OnRadio1()
{
// TODO: Add your control notification handler code here
m_nFlag=1;
}
void CHuffmanDlg::OnRadio3()
{
// TODO: Add your control notification handler code here
m_nFlag=2;
}
void CHuffmanDlg::OnBest()
{
// TODO: Add your control notification handler code here
CResultDlg dlg;
dlg.flag=3;
dlg.w2=ws;
dlg.type=0;
dlg.num=num;
dlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -