📄 form1.cs
字号:
node.Attributes.GetNamedItem("cellSizeW").Value=Convert.ToString(x2-x1+1);
node.Attributes.GetNamedItem("cellSizeH").Value=Convert.ToString(y2-y1+1);
node.FirstChild.Attributes.GetNamedItem("len").Value=Convert.ToString((y2-y1)*(((int)((x2-x1)/16))+1));;
node.FirstChild.InnerText=strValue;
return(node);
}
private void btnAdd_Click(object sender, System.EventArgs e)
{
foreach(char ch in txtFonts.Text.ToCharArray())
{
if(listFont.FindString(String.Format("{0} 0x{1}", ch,Convert.ToInt32(ch).ToString("X4")))<0)
listFont.Items.Add(String.Format("{0} 0x{1}", ch,Convert.ToInt32(ch).ToString("X4")));
}
}
private void UpdateFontListView(XmlDocument doc,int d)
{
int maxX,maxY;
int index=0;
this.fontImgList.Images.Clear();
this.listFontView.Items.Clear();
this.GetMaxSize(doc,out maxX,out maxY);
foreach(XmlNode node in doc.DocumentElement.ChildNodes )UpdateFontListView(node,index++,d,maxX,maxY);
}
private void UpdateFontListView(XmlNode node,int index,int d,int maxX,int maxY)
{
if(index>= listFontView.Items.Count )
{
fontImgList.Images.Add(CreateFontImag(node,d,maxX,maxY));
listFontView.Items.Add(node.Attributes.GetNamedItem("unicode").Value,fontImgList.Images.Count-1);
}
else
{
fontImgList.Images[index]=CreateFontImag(node,d,maxX,maxY);
}
}
private void btnDelete_Click(object sender, System.EventArgs e)
{
for(int i=listFont.SelectedItems.Count-1;i>=0 ;i--)
{
listFont.Items.Remove(listFont.SelectedItems[i]);
}
for(int i=listFontView.SelectedItems.Count-1;i>=0 ;i--)
{
XmlNode node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[i].Text.Trim() +"']");
xmlDoc.DocumentElement.RemoveChild(node);
//fontImgList.Images.RemoveAt(listFontView.SelectedItems[i].ImageIndex);
listFontView.Items.Remove(listFontView.SelectedItems[i]);
}
}
private void btnFont_Click(object sender, System.EventArgs e)
{
if( listFont.SelectedItems.Count>0)
{
bool bUpdate=true;
for(int i=0;i<listFont.SelectedItems.Count;i++)
{
if(xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFont.GetItemText(listFont.SelectedItems[i]).Substring(2,6) +"']")==null)
{
xmlDoc.DocumentElement.InnerXml+=CreateFontPixel(listFont.GetItemText(listFont.SelectedItems[i]).Substring(0,1).ToCharArray()[0],
cmbFont.Text ,(float)(Convert.ToDouble(cmbFSize.Text )),Convert.ToInt16(cmbImgSizeW.Text ) ,Convert.ToInt16(cmbImgSizeH.Text )).OuterXml ;
bUpdate=false;
}
else
{
for(int j=0;j<listFontView.Items.Count ;j++)
{
if(listFont.GetItemText(listFont.SelectedItems[i]).Substring(2,6)==listFontView.Items[j].Text)
listFontView.Items[j].Selected=true;
}
}
}
if(!bUpdate)this.UpdateFontListView(xmlDoc,Convert.ToInt32(cmbImgLarge.Text ));
listFontView.Invalidate();
listFont.ClearSelected();
}
else if (listFontView.SelectedItems.Count>0)
{
bool bUpdate=bFontName || bFontSize || bImgSizeW || bImgSizeH;
int maxX,maxY;
XmlNode node;
for(int i=0;i<listFontView.SelectedItems.Count && bUpdate;i++)
{
node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[i].Text.Trim() +"']");
if(bFontName || bFontSize)
{
xmlDoc.DocumentElement.RemoveChild(node);
xmlDoc.DocumentElement.InnerXml+=CreateFontPixel(Convert.ToChar(Convert.ToUInt16(listFontView.SelectedItems[i].Text.Trim().Substring(2,4),16)),
cmbFont.Text ,(float)(Convert.ToDouble(cmbFSize.Text )),Convert.ToInt16(cmbImgSizeW.Text ) ,Convert.ToInt16(cmbImgSizeH.Text )).OuterXml ;
node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[i].Text.Trim() +"']");
}
else
{
this.SetFontImageSize(ref node,Convert.ToInt16(cmbImgSizeW.Text ) ,Convert.ToInt16(cmbImgSizeH.Text ));
}
this.GetMaxSize(xmlDoc,out maxX,out maxY);
this.UpdateFontListView(node,listFontView.SelectedItems[i].Index,Convert.ToInt32(cmbImgLarge.Text ),maxX,maxY);
}
listFontView.Invalidate();
}
bFontName=bFontSize=bImgSizeW=bImgSizeH=false;
}
private void cmbFont_SelectedIndexChanged(object sender, System.EventArgs e)
{
bFontName=true;
}
private void cmbFSize_SelectedIndexChanged(object sender, System.EventArgs e)
{
bFontSize=true;
}
private void cmbImgSizeW_SelectedIndexChanged(object sender, System.EventArgs e)
{
bImgSizeW=true;
}
private void cmbImgSizeH_SelectedIndexChanged(object sender, System.EventArgs e)
{
bImgSizeH=true;
}
private void cmbImgLarge_SelectedIndexChanged(object sender, System.EventArgs e)
{
int maxX,maxY;
XmlNode node;
this.GetMaxSize(xmlDoc,out maxX,out maxY);
for(int i=0;i<listFontView.Items.Count ;i++)
{
node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.Items[i].Text.Trim() +"']");
this.UpdateFontListView(node,i,Convert.ToInt32(cmbImgLarge.Text ),maxX,maxY);
}
listFontView.Invalidate();
}
private void btnAdjust_Click(object sender, System.EventArgs e)
{
if(! bAdjust && listFontView.SelectedItems.Count>0)
{
int maxX,maxY;
this.GetMaxSize(xmlDoc,out maxX,out maxY);
hScrollBar.Maximum=maxX*10;
hScrollBar.Minimum =(-10)*maxX;
hScrollBar.Value=0;
hScrollBar.SmallChange=10;
hScrollBar.Visible=true;
vScrollBar.Maximum=maxY*10;
vScrollBar.Minimum=(-10)*maxY;
vScrollBar.Value=0;
vScrollBar.SmallChange=10;
vScrollBar.Visible=true;
this.btnAdjust.Text="取消调整";
this.btnAdjustSure.Visible=true;
}
else
{
this.btnAdjust.Text="调整";
hScrollBar.Visible=vScrollBar.Visible=btnAdjustSure.Visible=false;
this.UpdateFontListView(xmlDoc,Convert.ToInt32(cmbImgLarge.Text));
listFontView.Invalidate();
}
bAdjust=!bAdjust;
}
private void btnAdjustSure_Click(object sender, System.EventArgs e)
{
XmlNode node;
for(int i=0;i<listFontView.SelectedItems.Count;i++)
{
node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[i].Text.Trim() +"']");
this.MoveFontImage(ref node,hScrollBar.Value/10,vScrollBar.Value/10);
}
bAdjust=false;
this.btnAdjust.Text="调整";
hScrollBar.Visible=vScrollBar.Visible=btnAdjustSure.Visible=false;
this.UpdateFontListView(xmlDoc,Convert.ToInt32(cmbImgLarge.Text));
listFontView.Invalidate();
}
private void vScrollBar_ValueChanged(object sender, System.EventArgs e)
{
int maxX,maxY;
this.GetMaxSize(xmlDoc,out maxX,out maxY);
XmlDocument doc=new XmlDocument();
XmlNode node;
for(int i=0;i<listFontView.SelectedItems.Count;i++)
{
doc.LoadXml(xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[i].Text.Trim() +"']").OuterXml);
node=doc.FirstChild;
this.MoveFontImage(ref node,hScrollBar.Value/10,vScrollBar.Value/10);
this.UpdateFontListView(node,listFontView.SelectedItems[i].Index,Convert.ToInt32(cmbImgLarge.Text ),maxX,maxY);
}
listFontView.Invalidate();
}
private void hScrollBar_ValueChanged(object sender, System.EventArgs e)
{
int maxX,maxY;
this.GetMaxSize(xmlDoc,out maxX,out maxY);
XmlDocument doc=new XmlDocument();
XmlNode node;
for(int i=0;i<listFontView.SelectedItems.Count;i++)
{
doc.LoadXml(xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[i].Text.Trim() +"']").OuterXml);
node=doc.FirstChild;
this.MoveFontImage(ref node,hScrollBar.Value/10,vScrollBar.Value/10);
this.UpdateFontListView(node,listFontView.SelectedItems[i].Index,Convert.ToInt32(cmbImgLarge.Text ),maxX,maxY);
}
listFontView.Invalidate();
}
private void listFontView_SelectedIndexChanged(object sender, System.EventArgs e)
{
if(listFontView.SelectedItems.Count>0)
{
XmlNode node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.SelectedItems[listFontView.SelectedItems.Count-1].Text.Trim() +"']");
cmbFont.SelectedIndex=cmbFont.FindString(node.Attributes.GetNamedItem("fontName").Value);
cmbFSize.Text =node.Attributes.GetNamedItem("fontSize").Value;
cmbImgSizeW.Text =node.Attributes.GetNamedItem("imgSizeW").Value;
cmbImgSizeH.Text=node.Attributes.GetNamedItem("imgSizeH").Value;
}
}
private void listFontView_DoubleClick(object sender, System.EventArgs e)
{
btnAdjust_Click(null,new EventArgs());
}
private void cmbSampleLarge_SelectedIndexChanged(object sender, System.EventArgs e)
{
Graphics.FromHwnd(this.panelSample.Handle).FillRectangle(new SolidBrush(Color.White),0,0,this.panelSample.Width,panelSample.Height);
this.DrawDotString(txtSample.Text,0,0,this.panelSample.Width,
Convert.ToInt32(cmbSampleLarge.Text ),xmlDoc,Graphics.FromHwnd(this.panelSample.Handle));
}
private void txtSample_Leave(object sender, System.EventArgs e)
{
if(bTxtSample)
{
Graphics g=Graphics.FromHwnd(this.panelSample.Handle);
g.FillRectangle(new SolidBrush(Color.White),0,0,this.panelSample.Width,panelSample.Height);
this.DrawDotString(txtSample.Text,0,0,this.panelSample.Width,
Convert.ToInt32(cmbSampleLarge.Text ),xmlDoc,g);
bTxtSample=false;
}
}
private void txtSample_TextChanged(object sender, System.EventArgs e)
{
bTxtSample=true;
}
private void btnCreate_Click(object sender, System.EventArgs e)
{
for(int i=0;i<listFontView.Items.Count;i++)
{
XmlNode node=xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+listFontView.Items[i].Text.Trim() +"']");
xmlDoc.DocumentElement.AppendChild(node);
}
SaveFileDialog dlg=new SaveFileDialog();
dlg.Filter = "xml files (*.xml)|*.xml" ;
dlg.Title="保存xml文件";
dlg.RestoreDirectory=true;
if(( dlg.ShowDialog() == DialogResult.OK))xmlDoc.Save(dlg.FileName);
}
private void btnInportXML_Click(object sender, System.EventArgs e)
{
OpenFileDialog dlg=new OpenFileDialog();
dlg.Filter="xml files(*.xml)|*.xml";
dlg.Title="导入xml文件";
dlg.RestoreDirectory=true;
if(dlg.ShowDialog()==DialogResult.OK)
{
System.IO.Stream sDoc=dlg.OpenFile();
if(sDoc!=null)
{
XmlDocument doc=new XmlDocument();
doc.Load(sDoc);
foreach(XmlNode node in doc.DocumentElement.ChildNodes)
{
if(node.Attributes["unicode"]!=null && xmlDoc.DocumentElement.SelectSingleNode("Font[@unicode='"+node.Attributes["unicode"].Value +"']")==null)
{
xmlDoc.DocumentElement.InnerXml+=node.OuterXml ;
if(listFont.FindString(String.Format("{0} {1}",Convert.ToChar(Convert.ToUInt16(node.Attributes["unicode"].Value.Substring(2,4),16)),node.Attributes["unicode"].Value ))==ListBox.NoMatches )
listFont.Items.Add(String.Format("{0} {1}",Convert.ToChar(Convert.ToUInt16(node.Attributes["unicode"].Value.Substring(2,4),16)),node.Attributes["unicode"].Value ));
}
}
sDoc.Close();
this.UpdateFontListView(xmlDoc,Convert.ToInt32(cmbImgLarge.Text));
listFontView.Invalidate();
}
}
}
private void btnCreateLattice_Click(object sender, System.EventArgs e)
{
if(!System.IO.File.Exists(this.strXslFileName))
{
System.Windows.Forms.MessageBox.Show("xsl 文件不存在,请重新导入");
return;
}
SaveFileDialog dlg=new SaveFileDialog();
dlg.Filter = "Lattice files (*.lat)|*.lat" ;
dlg.RestoreDirectory=true;
dlg.Title="保存字库文件";
if(( dlg.ShowDialog() == DialogResult.OK))
{
XslTransform xslt=new XslTransform();
xslt.Load(this.strXslFileName);
XmlTextWriter writer = new XmlTextWriter(dlg.FileName , null);
xslt.Transform(xmlDoc.DocumentElement.CreateNavigator(), null, writer, null);
writer.Flush();
writer.Close();
}
}
private void btnInportXSL_Click(object sender, System.EventArgs e)
{
OpenFileDialog dlg=new OpenFileDialog();
dlg.Filter="xml files(*.xsl)|*.xsl";
dlg.Title="导入xsl文件";
dlg.RestoreDirectory=true;
if(dlg.ShowDialog()==DialogResult.OK)
{
System.IO.Stream sDoc=dlg.OpenFile();
if(sDoc!=null)
{
this.strXslFileName=dlg.FileName;
sDoc.Close();
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -