📄 zhdlg.cpp
字号:
}
ReleaseDC(pDC );
DeleteObject(pOldBrush);
DeleteObject(Rgn);
DeleteObject(Brush);
CDialog::OnMouseMove(nFlags, point);
}
/*void CZhDlg::getzd(CPoint p[300],int i)
{
// CPoint zz,zy,zs,zx;
int ds;
zz=zy=zs=zx=p[0];
ds=i;
for(i=0;i<ds;i++)
if(p[i].x<zz.x) zz=p[i];
if(p[i].x>zy.x) zy=p[i];
if(p[i].y<zx.y) zx=p[i];
if(p[i].y>zs.y) zs=p[i];
}*/
void CZhDlg::OnChangeEdit1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
void CZhDlg::OnButton1() //清除按纽
{
// TODO: Add your control notification handler code here
CBrush Brush (RGB (255, 255 , 255) );
CDC *pDC=GetDC();
CBrush* pOldBrush = pDC->SelectObject (&Brush);
pDC->Rectangle(Startx,Starty,Startx+wid-1,Starty+lon-1);
arch=arcs=arcp=arcn=arcz=0;
m_counting.SetPos(0);
m_showa.DeleteAllItems();
m_showb.DeleteAllItems();
m_hzs.SetWindowText("");
for(i=0;i<m;i++)
zi[i]="";
m=0;
fat=0;
for(i=0;i<allnum;i++)
{
alldata[i].x=0;
alldata[i].y=0;
}
mouseDown=0;
}
void CZhDlg::OnChangeEdit2()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
void CZhDlg::OnOutofmemorySpin1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CZhDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_hzs.SetWindowText("");
int nLength= m_hzs.SendMessage(WM_GETTEXTLENGTH);
int iItem;
iItem=m_showa.GetNextItem(-1,LVNI_SELECTED);
CString hz = m_showa.GetItemText( iItem, 0);
hz=hz.Right(2);
m_hzs.SetSel(nLength,nLength);
m_hzs.ReplaceSel(hz);
CBrush Brush (RGB (255, 255 , 255) );
CDC *pDC=GetDC();
CBrush* pOldBrush = pDC->SelectObject (&Brush);
pDC->Rectangle(Startx,Starty,Startx+wid-1,Starty+lon-1);
arch=arcs=arcp=arcn=arcz=0;
m_counting.SetPos(0);
for(i=0;i<m;i++)
zi[i]="";
m=0;
fat=0;
for(i=0;i<allnum;i++)
{
alldata[i].x=0;
alldata[i].y=0;
}
mouseDown=0;
*pResult = 0;
}
void CZhDlg::OnButton2()
{
// TODO: Add your control notification handler code here
getzi(bihua,arch,arcs,arcp,arcn,arcz);
int dim=0;//循环的是第几个字
if(m>=2)
{
m_showa.DeleteAllItems();
CBrush brushWhite(RGB(255, 255, 255));
CBrush brushBlue(RGB(0, 0, 255));
CBrush brushRed(RGB(255, 0, 0));
CBrush brushGreen(RGB(0, 255, 0)); //画刷的定义
CDC *pDC=GetDC();
CBrush* pOldBrush = pDC->SelectObject (&brushWhite);
pDC->Rectangle(Startx,Starty,Startx+wid-1,Starty+lon-1);
CRgn Rgn;
Rgn.CreateRectRgn(Startx,Starty,Startx+wid-1,Starty+lon-1); //创建一个矩形区域
pDC->SelectClipRgn(&Rgn); //为指定设备场景选择新的剪裁区
int distan,kuan;
float ratio;
min.x=allzz.x;min.y=allzx.y;max.x=allzy.x;max.y=allzs.y;
if((max.x-min.x)>(max.y-min.y))
{
kuan=max.x-min.x;
distan=((max.x-min.x)-(max.y-min.y))/2;
min.y=min.y-distan;
max.y=max.y+distan;
}
else
{
kuan=max.y-min.y;
distan=((max.y-min.y)-(max.x-min.x))/2;
min.x=min.x-distan;
max.x=max.x+distan;
} //求出外接矩形
for(i=0;i<allnum;i++)
{
ratio=(float)((float)173/(float)kuan);
alldata[i]=alldata[i]-(min-zero);
alldata[i].x=(int)((alldata[i].x-40) * ratio)+40;
alldata[i].y=(int)((alldata[i].y -39)* ratio)+39;
CBrush* pOldBrush = pDC->SelectObject (&brushBlue);
pDC->Ellipse(alldata[i].x-4,alldata[i].y-4,alldata[i].x+4,alldata[i].y+4);
} //字体放大
int rgb[36],can[24][24];
int k;
int wm[24][24];
int zm[24][24];
for (i=0;i<24;i++) for (j=0;j<24;j++)
{
can[i][j]=0;
for (k=0;k<64;k++)
{
rgb[k]=GetRValue(pDC->GetPixel(Startx+i*8+k/8,Starty+j*8+k%8)); //获取每个点块(6*6)的36个点的红分量
if (rgb[k]>200) can[i][j]++;
}//在指定的设备场景中取得一个像素的RGB值
if (can[i][j]>32) wm[i][j]=0; else wm[i][j]=1;
}//用户绘图转换为点位型字模
CString str;
int qh,wh,offset;
BYTE bytes[72];
for(dim=0;dim<m;dim++)
{
str=zi[dim];
char a[3];
strcpy(a,str.GetBuffer(str.GetLength()));
qh=a[0]+0x60;
wh=a[1]+0x60;
offset=(94*(qh-16)+(wh-1))*72L; //计算字库偏移
cf.Seek( offset, CFile::begin );
cf.Read(bytes,72); //读取该汉字字模,一次读72字节,刚好是一个24*24汉字字模点阵的大小
int zmc=0;
for (k=0;k<72;k++)
{
i=k/3;
j=(k%3)*8;
if (bytes[k]&128) zm[i][j+0]=1;else zm[i][j+0]=0;
if (bytes[k]&64) zm[i][j+1]=1;else zm[i][j+1]=0;
if (bytes[k]&32) zm[i][j+2]=1;else zm[i][j+2]=0;
if (bytes[k]&16) zm[i][j+3]=1;else zm[i][j+3]=0;
if (bytes[k]&8) zm[i][j+4]=1;else zm[i][j+4]=0;
if (bytes[k]&4) zm[i][j+5]=1;else zm[i][j+5]=0;
if (bytes[k]&2) zm[i][j+6]=1;else zm[i][j+6]=0;
if (bytes[k]&1) zm[i][j+7]=1;else zm[i][j+7]=0; //字节型字模转换为点位型字模
}
int wzmc=0;
int bwzmc=0;
for (i=0;i<24;i++)
for (j=0;j<24;j++)
{
if (zm[i][j]==1) zmc++;
if ((wm[i][j]==1) && (zm[i][j]==1)) wzmc++;
if ((wm[i][j]==1) && (zm[i][j]==0)) bwzmc++;
}
CString msg;
float xsl=float(wzmc)/(float)zmc;
if (((xsl>0.1) || (bwzmc==0)) && (wzmc!=0))//如果相似概率达到一个阕值,则在list中添加该汉字
{
msg.Format("%f:",xsl);
char a[3]=" ";//开辟内存空间
a[0]=qh+0xA0;
a[1]=wh+0xA0;
m_showa.InsertItem(dim,msg+a);
}
}
}
}
void CZhDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
getzi(bihua,arch,arcs,arcp,arcn,arcz);
m_showa.DeleteAllItems();
m_showb.DeleteAllItems();
for (i=0;i<16 && i<m;i++)
m_showa.InsertItem(i,zi[i]); //显示前面的字符
int dim=0;//循环的是第几个字
// if(m>=1)
// {
m_showb.DeleteAllItems();
CBrush brushWhite(RGB(255, 255, 255));
CBrush brushBlue(RGB(0, 0, 255));
CBrush brushRed(RGB(255, 0, 0));
CBrush brushGreen(RGB(0, 255, 0)); //画刷的定义
CDC *pDC=GetDC();
CBrush* pOldBrush = pDC->SelectObject (&brushWhite);
pDC->Rectangle(Startx,Starty,Startx+wid-1,Starty+lon-1);
CRgn Rgn;
Rgn.CreateRectRgn(Startx,Starty,Startx+wid-1,Starty+lon-1); //创建一个矩形区域
pDC->SelectClipRgn(&Rgn); //为指定设备场景选择新的剪裁区
int distan,kuan;
float ratio;
min.x=allzz.x;min.y=allzx.y;max.x=allzy.x;max.y=allzs.y;
if((max.x-min.x)>(max.y-min.y))
{
kuan=max.x-min.x;
distan=((max.x-min.x)-(max.y-min.y))/2;
min.y=min.y-distan;
max.y=max.y+distan;
}
else
{
kuan=max.y-min.y;
distan=((max.y-min.y)-(max.x-min.x))/2;
min.x=min.x-distan;
max.x=max.x+distan;
} //求出外接矩形
for(i=0;i<allnum;i++)
{
ratio=(float)((float)173/(float)kuan);
alldata[i]=alldata[i]-(min-zero);
alldata[i].x=(int)((alldata[i].x-40) * ratio)+40;
alldata[i].y=(int)((alldata[i].y -39)* ratio)+39;
CBrush* pOldBrush = pDC->SelectObject (&brushBlue);
pDC->Ellipse(alldata[i].x-4,alldata[i].y-4,alldata[i].x+4,alldata[i].y+4);
} //字体放大
int rgb[64],can[24][24];
int k;
int wm[24][24];
int zm[24][24];
for (i=0;i<24;i++) for (j=0;j<24;j++)
{
can[i][j]=0;
for (k=0;k<64;k++)
{
rgb[k]=GetRValue(pDC->GetPixel(Startx+i*8+k/8,Starty+j*8+k%8)); //获取每个点块(8*8)的64个点的红分量
if (rgb[k]>200) can[i][j]++;
}//在指定的设备场景中取得一个像素的RGB值
if (can[i][j]>32) wm[i][j]=0; else wm[i][j]=1;
}//用户绘图转换为点位型字模
CString str;
int qh,wh,offset;
BYTE bytes[72];
for(dim=0;dim<m;dim++)
{
str=zi[dim];
char a[3];
strcpy(a,str.GetBuffer(str.GetLength()));
qh=a[0]+0x60;
wh=a[1]+0x60;
offset=(94*(qh-16)+(wh-1))*72L; //计算字库偏移
cf.Seek( offset, CFile::begin );
cf.Read(bytes,72); //读取该汉字字模,一次读72字节,刚好是一个24*24汉字字模点阵的大小
int zmc=0;
for (k=0;k<72;k++)
{
i=k/3;
j=(k%3)*8;
if (bytes[k]&128) zm[i][j+0]=1;else zm[i][j+0]=0;
if (bytes[k]&64) zm[i][j+1]=1;else zm[i][j+1]=0;
if (bytes[k]&32) zm[i][j+2]=1;else zm[i][j+2]=0;
if (bytes[k]&16) zm[i][j+3]=1;else zm[i][j+3]=0;
if (bytes[k]&8) zm[i][j+4]=1;else zm[i][j+4]=0;
if (bytes[k]&4) zm[i][j+5]=1;else zm[i][j+5]=0;
if (bytes[k]&2) zm[i][j+6]=1;else zm[i][j+6]=0;
if (bytes[k]&1) zm[i][j+7]=1;else zm[i][j+7]=0; //字节型字模转换为点位型字模
}
int wzmc=0;
int bwzmc=0;
for (i=0;i<24;i++)
for (j=0;j<24;j++)
{
if (zm[i][j]==1) zmc++;
if ((wm[i][j]==1) && (zm[i][j]==1)) wzmc++;
if ((wm[i][j]==1) && (zm[i][j]==0)) bwzmc++;
}
CString msg;
float xsl=float(wzmc)/(float)zmc;
if (((xsl>0.05) || (bwzmc==0)) && (wzmc!=0))//如果相似概率达到一个阕值,则在list中添加该汉字
{
msg.Format("%f:",xsl);
char a[3]=" ";//开辟内存空间
a[0]=qh+0xA0;
a[1]=wh+0xA0;
m_showb.InsertItem(dim,msg+a);
}
}
// }
// else
// {
// for (i=0;i<16 && i<m;i++)
// m_show.InsertItem(i,zi[i]); //显示前面的字符
// }
KillTimer(1);
for(i=0;i<m;i++)
zi[i]="";
m=0;
mouseDown=0;
CDialog::OnTimer(nIDEvent);
}
void CZhDlg::OnClickList4(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
m_hzs.SetWindowText("");
int nLength= m_hzs.SendMessage(WM_GETTEXTLENGTH);
int iItem;
iItem=m_showb.GetNextItem(-1,LVNI_SELECTED);
CString hz = m_showb.GetItemText( iItem, 0);
hz=hz.Right(2);
m_hzs.SetSel(nLength,nLength);
m_hzs.ReplaceSel(hz);
CBrush Brush (RGB (255, 255 , 255) );
CDC *pDC=GetDC();
CBrush* pOldBrush = pDC->SelectObject (&Brush);
pDC->Rectangle(Startx,Starty,Startx+wid-1,Starty+lon-1);
arch=arcs=arcp=arcn=arcz=0;
m_counting.SetPos(0);
for(i=0;i<m;i++)
zi[i]="";
m=0;
fat=0;
for(i=0;i<allnum;i++)
{
alldata[i].x=0;
alldata[i].y=0;
}
mouseDown=0;
*pResult = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -