⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 字库生成工具源代码
💻 CS
📖 第 1 页 / 共 3 页
字号:
			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 + -