游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1790|回复: 4

又问如何书写文字

[复制链接]

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2006-1-17 22:02:00 | 显示全部楼层 |阅读模式
假设我规定了一个RectangleF类型的矩型
我设置一个Font类型为字体,向一个Drawing.Graphics里写字,假设我要写的字超过了我规定的范围我应该如何处理呢?
当我用DrawString方法写的时候它的处理方法是截断.
我想做的是假如超过了范围就把字号变小,可是我怎么才能知道到是否超过了呢?


还有就是当我想以一个规定的字体一行字的时候,当我这一行超过了指定的宽度时字体就自动变瘦(只有宽度变而高度不变),其总体宽度应为我指定的宽度,我怎么才能实现这种效果呢?

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2006-1-18 10:44:00 | 显示全部楼层

Re:又问如何书写文字

字体变瘦我没听说过,但是可以设置字符横向的间距

Font类提供了计算字体大小的方法,但是你要注意字体大小计算的规则,就是字体是从左上角什么位置到右下角什么位置,具体可以参考MSDN,我记得这一段应该是中文的,不然你计算的字体可能会有些偏差,同时GDI函数GetTextExtentExPoint可以直接计算字符串显示区域,一样要注意偏差。

同时关于字体输出的格式,你可以参考一下StringFormatFlags枚举

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
 楼主| 发表于 2006-1-18 20:13:00 | 显示全部楼层

Re:又问如何书写文字

谢谢您的提示,我去研究一下.

还有就是我说的字体变瘦,只是形容一下效果,什么方法都可以.

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
 楼主| 发表于 2006-1-18 22:27:00 | 显示全部楼层

Re:又问如何书写文字

GetTextExtentExPoint这个函数太复杂了,我在MSDN里查了都是一些C++的东西,
我查了一下在VB.net里好像需要声明:
Declare Function GetTextExtentExPoint Lib "gdi32" Alias "GetTextExtentExPointA" (ByVal hDC As Integer, ByVal lpszStr As String, ByVal cchString As Integer, ByVal nMaxExtent As Integer, ByRef lpnFit As Integer, ByRef alpDx As Integer, ByRef lpSize As Size) As Integer

我这样试过:
Dim oo As Size
GetTextExtentExPoint(MCardG.GetHdc.ToInt32, CardText, Len(CardText), 10, Nothing, Nothing, oo)
cardtext就是我要写的文字MCardG 是 Drawing.Graphics这个类型的.
可是用了之后oo确实有返回数值,可是之后所有用MCardG的时候都会报错说 "该对象当前正在其他地方使用"
而且这个函数好像没有提到我用什么字体和字号书写?

我还是用不好这个函数,能不能再详细的讲解一下呢?

37

主题

171

帖子

177

积分

注册会员

Rank: 2

积分
177
 楼主| 发表于 2006-1-18 22:31:00 | 显示全部楼层

Re:又问如何书写文字

那个报错,我解决了,可是我还不明白如何传入我要用的字体字号呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 06:52

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表