文本是怎样选定的?
遇到这样一个问题:用DrawString画出了一串文本(含不同的字体),现在想实现用鼠标选定这些文本,请问怎样可以实现光标浮动、鼠标拖动、一行字变黑这些东西呢?有没有什么开源的软件里面有这种实现?
顺便问一句,有没有可能不用API实现?
问题点数:200、回复次数:8Top
1 楼xujiaoxiang(翱翔)回复于 2005-11-15 10:40:58 得分 30
判断鼠标位置,绘制光标。绑定鼠标移动事件,计算选取范围。绘制选中文字。
调用API实现容易些。
CreateCaret, DestroyCaret, GetCaretPos, SetCaretPos, ShowCaret,HideCaret 控制光标。
SetROP2 ,GetROP2设置绘制方式。绘制。Top
2 楼forestwind(森林之风)回复于 2005-11-15 11:04:34 得分 0
谢谢。发现闪动厉害,有没有方法可以每次只刷新一小块地方呢?Top
3 楼JasonHeung(拥有一切不过就这样笑着哭)回复于 2005-11-15 11:09:13 得分 30
先画到位图,再将位图画到屏幕。Top
4 楼xujiaoxiang(翱翔)回复于 2005-11-15 11:13:12 得分 50
this.SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
设置在绘制窗体的构造函数中。
参见Control.SetStyle 方法。
还有绘制时最好不要重绘文字部分。
使用API 的SetROP2 ,GetROP2设置绘制方式,可以按异或方式绘制。Top
5 楼jh8848(哦)回复于 2005-11-15 11:18:33 得分 50
>>JasonHeung(拥有一切也不过就这样笑着哭)
LZ的要求是要求可以光标浮动、鼠标拖动、一行字变黑(我理解为选中)。。如果这样的一串动作都去先生成位图,再去替换指定位置的图片是不是太慢了呀~~~
>> forestwind(森林之风)
用GDI+画的东东处理起来都会有一点闪烁。。因为你的要求其实是对Paint的String不断的进行刷新,不断的更换。不过你可以指定刷新的部分的大小。尽量保证只对需要更改的部分进行刷新。
如果每做一个操作都对整个FROM哪怕是整个载体进行刷新闪烁都会比较严重的哦。Top
6 楼forestwind(森林之风)回复于 2005-11-15 14:37:26 得分 0
多谢各位!可我怎么才能只对文字的部分刷新呢?Top
7 楼s5689412(华君)回复于 2005-11-15 14:43:59 得分 40
要做这些,建议可以好好看看Charles Petzold的《Windows 程序设计》中的“文字和字体”一章,虽然讲的是GDI,但是GDI+同样可以受益。
另外,不调用API几乎是不可能的,除非你可以写出自己的GDI32.dll。Top
8 楼forestwind(森林之风)回复于 2005-11-15 15:14:39 得分 0
多谢多谢,up一下,GDI+中能不能只对文字的部分刷新呢?Top




