如何拉伸字体

6742 2018-09-16 09:51:26
想自己绘制,做一个文本框,用的是DrawText绘制文字,看到WORD中增加字间距,字变扁拉长了。不知道这是如何实现的。

有没有什么API可以让字体改变长宽比值输出。或者说在高度不变时,拉长
...全文
664 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2018-09-20
  • 打赏
  • 举报
回复
引用 21 楼 6742 的回复:
当然现在没完成,是怕要重绘的太多影响速度。

影响速度的不是“重绘太多”,而是你的“代码质量”。
就比如你浏览这个网页,
 当你“滚动”网页内容时,可以说这个窗口内所有的显示都是重绘了的,但你感觉它“卡”了吗?

你总不可能不管显示内容变还是没变,都在“不停的刷新”吧!
如果仅仅是“有变化时”才刷新一次,并且“代码质量”没大的问题,可以说根本不存在“速度问题”。
如果你能比较准确的实现“只重绘发生变化的矩形区”,那是最佳的效果。

不过,在“显示效果都无法实现”的情况下,你去瞎担心什么呢!
这些“担心”有意义吗……

首先:你要能“实现想要的显示效果”;
然后:如果“有卡顿现象”、有“闪烁现象”等问题,
  这个时候,才需要去考虑如何优化、提升用户体验方面的问题。
舉杯邀明月 2018-09-20
  • 打赏
  • 举报
回复
引用 20 楼 6742 的回复:
我想做一个文本框,显示简谱,上下的点要几个字符组合成一个字符,连音线要拉长

显示简谱?
显示简谱用文本框……你也是太有想法了…………

我觉得“现成”的控件,没有一个适合显示简谱,包括RichEdit控件和WebBrower控件。
先别谈有没有这种“简谱专用字体”;就算有,恐怕这个“排版”的代码流程,恐怕都要累死你!

要是你只是“显示”,如楼上所说,直接用PictureBox控件来显示就行了;
但如果你想实现“自由编辑”,那我觉得这个软件肯定算得上是“大工程”。
脆皮大雪糕 2018-09-20
  • 打赏
  • 举报
回复
或者去度娘搜一下简谱控件,有人都做得蛮成熟的了
脆皮大雪糕 2018-09-20
  • 打赏
  • 举报
回复
文本框……
这事情要我来就是用picturebox画。
只不过咱乐盲,音乐细胞被小学语文和数学老师活活掐死了
6742 2018-09-20
  • 打赏
  • 举报
回复
谢谢各位老师!
6742 2018-09-20
  • 打赏
  • 举报
回复
我已经可以实现文本框,包括高音、低音上下的点,以及减时线,这些没有问题。

就是多次重复怕使用CreateFontIndirect(LFont) 、SelectObject(hDC, hFont),建立不同的字体对象会出现“闪烁现象”,于是想是不是有只刷新矩形区域的方法。

前边说到,是不是每个字都要有对应的字体数组,刚刚看了RTF的格式,给我启发。

等“闪烁“了再说吧。提高“代码质量”!!!!结帐
脆皮大雪糕 2018-09-19
  • 打赏
  • 举报
回复
其实你的需求用richedit应该就能解决啊,有啥richedit搞不定的?换webbrowser!
6742 2018-09-19
  • 打赏
  • 举报
回复
当然现在没完成,是怕要重绘的太多影响速度。
6742 2018-09-19
  • 打赏
  • 举报
回复
我想做一个文本框,显示简谱,上下的点要几个字符组合成一个字符,连音线要拉长
舉杯邀明月 2018-09-18
  • 打赏
  • 举报
回复
引用 17 楼 6742 的回复:
想问句,要做个文本框,一个字符的字体变化了,所有的字符都要跟着刷新吗。(与主题不一致了,抱歉,如哪位老师感兴趣,愿意指教,可另开一贴讨论)RIChEDIT的源码看了,不甚明了

你哪来的“RichEdit的源码”?(RichEdit控件的源码???)


如果是“标准控件”中的那个TextBox,肯定是“所有的字符”都要跟着刷新啊。
(至少是“显示出来的字符”要全部刷新,因为它的全部文字都是相同字体,“1个变化”实际会是全部变化。)

如果是RichEdit控件,那么可以分别设置每一段(或“每1个字符”)的字体,
这种情况下,至少“从它开始、到后面所有的显示出来的”字符都会刷新。
因为在其后面的文字,很可能“显示位置”已经变化,需要重绘。
6742 2018-09-18
  • 打赏
  • 举报
回复
END SUB
6742 2018-09-18
  • 打赏
  • 举报
回复
有一行字符都 已经绘制好了,我想将其中的第N个变形一下,就是要

Private AA(字符总数-1) as LOGFONT
sub 绘制()
AA(N-1).lfHeight=HH
AA(N-1).lfWidth=WW
for i=0 to 字符总数
rFont = CreateFontIndirect(AA(i))
CurFont = SelectObject(Me.hdc, rFont)

'然后再加上SetTextColor...
'SetBkColor...
'SetBkMode..
'DRAWTEXT....等等.,进行绘制

'释放对象
foo = SelectObject(Me.hdc, CurFont)
foo = DeleteObject(rFont)
next i
end


是这个样子吗?
6742 2018-09-18
  • 打赏
  • 举报
回复
想问句,要做个文本框,一个字符的字体变化了,所有的字符都要跟着刷新吗。(与主题不一致了,抱歉,如哪位老师感兴趣,愿意指教,可另开一贴讨论)RIChEDIT的源码看了,不甚明了
脆皮大雪糕 2018-09-18
  • 打赏
  • 举报
回复
“不同规格”是指啥?大小?粗细?字体?
6742 2018-09-18
  • 打赏
  • 举报
回复
谢谢,是的,一胖一瘦已解决。我想再问,”创建一堆不同规格的字体",是与每个字或与区域RECT一一对应吗,是要弄个数组出来?
6742 2018-09-18
  • 打赏
  • 举报
回复
做一个文本框控件,字体拉伸是其中一部分,确实与“需求不相符。”下边说的是如何将不同的字体句柄,运用到不同的字符上的。

看到RICHEDIT是运用SendMessage发送消息的,不知这个问题
舉杯邀明月 2018-09-18
  • 打赏
  • 举报
回复
我说的“不同规格的字体”,当然是指字体尺寸、粗细、字体名称各不相同的字体句柄。
当然这“前提”是:你自己要清楚需要用到哪些规格、什么时候要用到哪种规格的……

如果你的程序在运行过程中,这些“字体参数”是动态变化的、不可“预测”的,那就无视我在5楼的回复吧。
这种情况下,只有“要用时创建、用完后马上释放资源”。
舉杯邀明月 2018-09-18
  • 打赏
  • 举报
回复
引用 13 楼 6742 的回复:
END SUB

我感觉你12楼的代码,跟你的“需求”并不相符。
甚至可以说,是“错误的代码”。
脆皮大雪糕 2018-09-17
  • 打赏
  • 举报
回复
我给的第二个例子不是已经很明显了么?一胖一瘦的两种?
6742 2018-09-17
  • 打赏
  • 举报
回复
用RECT一一对应吗?
加载更多回复(7)

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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