[C#]雅黑字体没有安装的问题

wbpmrck 2010-09-07 05:00:19
做了客户端软件,默认字体用的是雅黑,而且程序里,是通过Graphic.DrawString来绘制文字的,遇到了以下几个问题:
1:当客户机上没有安装微软雅黑字体的时候,Graphic.DrawString方法会按照宋体来绘制,但是字体的大小会比雅黑大,导致显示不全
2:即使在正常的机器上,所有字符集都有,对于雅黑和宋体2种字体,Graphic.DrawString方法画出来的字都大小不一样。


我想要达到的效果,有点类似于360软件,它的字体无论在什么机器上,都是一样大的,没有雅黑的机器上我也试过了,会显示同样大小的宋体,请教是怎么做到的。
...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wbpmrck 2010-09-08
  • 打赏
  • 举报
回复
具体如何很好的处理这种问题呢
yoyo_fan_503 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wbpmrck 的回复:]
不知道大家试过没有,代码如下:
你试试在没有安装雅黑的机器上,2个大小差狠多
[/Quote]
额 字变宽了 而且间距也大了
wbpmrck 2010-09-07
  • 打赏
  • 举报
回复


不知道大家试过没有,代码如下:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
drawstring();
}

public void drawstring()
{
Image img = this.BackgroundImage;
Graphics g = Graphics.FromImage(img);

Font yh = new Font("微软雅黑", 12);
Font st = new Font("宋体", 12);

Font f1 = new Font(yh, FontStyle.Underline);
Font f2 = new Font(st, FontStyle.Underline);
g.DrawString("设置宝宝头像", f1, new SolidBrush(ForeColor), new PointF(120, 340));
g.DrawString("设置宝宝头像", f2, new SolidBrush(ForeColor), new PointF(120, 370));

}
}
}



你试试在没有安装雅黑的机器上,2个大小差狠多
Baesky 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wbpmrck 的回复:]

引用 3 楼 baesky 的回复:
我们一般都是用宋体黑体这种系统自带的,用特殊字库有的客户是没有安装的,不要假设客户的OS环境给你相同,应该让你的程序有最大的适应性.


360不知道你用过没有,人家就可以做到这种效果,期待高手
[/Quote]
你调原生字体对方没有你肯定调不出来,一个是你自己的软件分发时候包含雅黑这个字体然后程序启动时候加载,一个是你做成图给贴上去.
你要说对方明明没有你硬是成成功调用,我相信bill.gates也做不到.
glest 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dobzhansky 的回复:]

有个 Graphics.MeasureString 调用, 提前测量好再决定留多少空间(好似不是你要的)

系统已安装字体, 可以
System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection();
int count = ifc……
[/Quote]
学习了
Dobzhansky 2010-09-07
  • 打赏
  • 举报
回复
有个 Graphics.MeasureString 调用, 提前测量好再决定留多少空间(好似不是你要的)

系统已安装字体, 可以
System.Drawing.Text.InstalledFontCollection ifc = new System.Drawing.Text.InstalledFontCollection();
int count = ifc.Families.Length;

获得.
yoyo_fan_503 2010-09-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100902/18/8974f610-ed64-4386-ad86-6ad2c0f24336.html
这个我做一个项目时遇到的问题。可以参考看看。
不过和你的可能有些不一样
一般来说,还是用每个系统都可能有的字体比较好,不容易出问题。。。
wbpmrck 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 baesky 的回复:]
我们一般都是用宋体黑体这种系统自带的,用特殊字库有的客户是没有安装的,不要假设客户的OS环境给你相同,应该让你的程序有最大的适应性.
[/Quote]

360不知道你用过没有,人家就可以做到这种效果,期待高手
Baesky 2010-09-07
  • 打赏
  • 举报
回复
我们一般都是用宋体黑体这种系统自带的,用特殊字库有的客户是没有安装的,不要假设客户的OS环境给你相同,应该让你的程序有最大的适应性.
wbpmrck 2010-09-07
  • 打赏
  • 举报
回复
没人?顶顶!~~~
wbpmrck 2010-09-07
  • 打赏
  • 举报
回复
顶顶,顺便问一下C#里能否检查机器上某个字体是否存在
PS:抓异常不可取,我试过了

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧