文本是怎样选定的?

forestwind 2005-11-15 09:51:23
遇到这样一个问题:用DrawString画出了一串文本(含不同的字体),现在想实现用鼠标选定这些文本,请问怎样可以实现光标浮动、鼠标拖动、一行字变黑这些东西呢?有没有什么开源的软件里面有这种实现?
顺便问一句,有没有可能不用API实现?
...全文
166 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
风之浪漫 2005-11-15
  • 打赏
  • 举报
回复
>>JasonHeung(拥有一切也不过就这样笑着哭)

LZ的要求是要求可以光标浮动、鼠标拖动、一行字变黑(我理解为选中)。。如果这样的一串动作都去先生成位图,再去替换指定位置的图片是不是太慢了呀~~~

>> forestwind(森林之风)
用GDI+画的东东处理起来都会有一点闪烁。。因为你的要求其实是对Paint的String不断的进行刷新,不断的更换。不过你可以指定刷新的部分的大小。尽量保证只对需要更改的部分进行刷新。
如果每做一个操作都对整个FROM哪怕是整个载体进行刷新闪烁都会比较严重的哦。
xujiaoxiang 2005-11-15
  • 打赏
  • 举报
回复
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
设置在绘制窗体的构造函数中。
参见Control.SetStyle 方法。

还有绘制时最好不要重绘文字部分。
使用API 的SetROP2 ,GetROP2设置绘制方式,可以按异或方式绘制。
JasonHeung 2005-11-15
  • 打赏
  • 举报
回复
先画到位图,再将位图画到屏幕。
forestwind 2005-11-15
  • 打赏
  • 举报
回复
谢谢。发现闪动厉害,有没有方法可以每次只刷新一小块地方呢?
xujiaoxiang 2005-11-15
  • 打赏
  • 举报
回复
判断鼠标位置,绘制光标。绑定鼠标移动事件,计算选取范围。绘制选中文字。
调用API实现容易些。
CreateCaret, DestroyCaret, GetCaretPos, SetCaretPos, ShowCaret,HideCaret 控制光标。
SetROP2 ,GetROP2设置绘制方式。绘制。
forestwind 2005-11-15
  • 打赏
  • 举报
回复
多谢多谢,up一下,GDI+中能不能只对文字的部分刷新呢?
s5689412 2005-11-15
  • 打赏
  • 举报
回复
要做这些,建议可以好好看看Charles Petzold的《Windows 程序设计》中的“文字和字体”一章,虽然讲的是GDI,但是GDI+同样可以受益。
另外,不调用API几乎是不可能的,除非你可以写出自己的GDI32.dll。
forestwind 2005-11-15
  • 打赏
  • 举报
回复
多谢各位!可我怎么才能只对文字的部分刷新呢?

110,567

社区成员

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

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

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