Jcily

 

可旋转的文字输入实现

 

目前完成了百分之50

 

    重复发明轮子是一件劳命伤财的事情,如果不能带来立竿见影的经济价值,特别是在为公司工作时,相信不会有人去重复做一些别人已经做过的事情。但是总有一些人会情愿花费时间或者金钱去自己造一次轮子,只能说,人的欲望很多,这是其中一种欲望的体现。

    很久以前和很长一段的业余时间里,我一直在自己模仿CorelDraw以及AutoCAD的绘图功能,大部分绘图编辑操作的实现都有比较能够猜出其实现思路或者是模拟实现的方法,并实现了一部分。其间我记忆比较深刻的难点就是"所见即所得的文字输入"功能,起初的方案是使用RichEdit,将该控件透明化后贴在编辑视图区域来进行文字输入,这个办法还不错,并且WIN32平台下大多数图形编辑软件都是这么做,比如画图,visio等。

    但是后来我发现CorelDraw确实太COOL了,其WYSWYG的文字输入的过程也是可以旋转的,这里我不想跟你以及我自己争论这个特性的实用性和必要性,因为大家包括我自己都会认为在正常的平行输入后再旋转文字最终显示结果是一样,但我仍然觉得这个特性是一个很重要细节,虽然其最终编辑的结果是一样,但很显然编辑的过程完全是不同的体验(不仅仅是耍酷),这是可重入的真正的WYSWYG,因为用户下次修改文字仍然可以在现有角度WYSWYG的进行。

    啰嗦了,有时候我是很偏执,以至于浪费很多时间,不过这个过程我很享受,就和打游戏类似。

 

    这里说一下实现的思路:重复发明一个轮子,这样你就拥有最易掌控度的改装能力。

posted on 2010-08-10 02:26 Jcily 阅读(3025) 评论(14)  编辑 收藏 引用

评论

# re: 可旋转的文字输入实现 2010-08-10 08:39 路青飞

支持你!
貌似跟我性格相似!
内心比较纠结,不知是好是坏~  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-10 10:16 小发

很想看看执行效果  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-10 12:29 陈梓瀚(vczh)

绘制有api支持,输入的话你要响应IME_*消息来获取平滑的显示。如果不太关心输入的时候的显示质量的话,可以响应WM_CHAR。你唯一要做的就是跟踪光标,然后调整输入法窗口的位置。

不过想模拟一个文本框还是很麻烦的,我曾经自己实现过一个比TextBox高效很多(特别是在加载几百M文本的时候)的文本框,真TM痛苦……drag and drop也要1000多行的COM才能搞定- -b那个API太囧了。  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-10 16:39 疑问

旋转坐标系不就成了么?  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-10 17:50 陈梓瀚(vczh)

@疑问
GDI没有这个功能  回复  更多评论   

# re: 可旋转的文字输入实现 [未登录] 2010-08-10 19:09 by

实现一个拥有抽象绘制接口的TEXTBOX。
实现一个可旋转坐标系的绘制接口。
嗯,成了。
  回复  更多评论   

# re: 可旋转的文字输入实现 [未登录] 2010-08-10 19:50 Jcily

@陈梓瀚(vczh)
说得很透彻,这些古老的细节特性在实现的过程中相当搞人  回复  更多评论   

# re: 可旋转的文字输入实现 [未登录] 2010-08-10 19:52 Jcily

@by
这里我没有尝试旋转坐标系,想来Caret这个系统资源可能在旋转后也不能跟着用户态的绘制DC变化吧。  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-11 11:15 陈梓瀚(vczh)

@Jcily
绘制平直的椭圆跟绘制倾斜的椭圆的算法是完全不同的- -b这就是为什么GDI不提供,GDI+又那么慢……  回复  更多评论   

# re: 可旋转的文字输入实现 [未登录] 2010-08-11 23:59 Jcily

@陈梓瀚(vczh)
这个其实无所谓,对于GDI和GDI+来说他们画圆画弧都是转化成贝塞尔曲线来画的,所以旋转效果图是可以。但是面向的仅仅是“结果图”,而对于编辑的实现讲究的是动态呈现(渲染),然而GDI,GDI+并没有如OpenGL和DirectX的强大高效的坐标空间变换,因此这里没有使用此办法。曾有个CSDN网友说过WPF可以实现实时的三维角度的旋转的文字输入,其原理就是有DX支持。不过WPF貌似离我的应用还比较远。  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-12 09:20 hoodlum1980

Photoshop也有这个功能呀,ps可以让文字沿着一条路径编辑。光标的方向是跟着路径走的。。  回复  更多评论   

# re: 可旋转的文字输入实现 [未登录] 2010-08-12 10:28 Jcily

@hoodlum1980
是的,我也准备同时实现这个  回复  更多评论   

# re: 可旋转的文字输入实现 2010-08-13 00:53 陈梓瀚(vczh)

@Jcily
GDI+有强大的坐标和效果功能,只是GDI没有,不要混为一谈。  回复  更多评论   

# re: 可旋转的文字输入实现 [未登录] 2010-08-13 09:55 Jcily

@陈梓瀚(vczh)
GDI有的,只是相关函数来得不如GDI+温柔,首先你的SetGraphicsMode到高级模式(GM_ADVANCED),接着需要你自己计算一个XFORM结构的二维矩阵丢给它hdc,GDI+变换坐标系就直接有自己Graphics下的Translate,rotate等提供。只是GDI的这个特性很少有基础教程提及,应用的也不多。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿(1)

随笔分类

随笔档案

文章档案

相册

搜索

最新评论

阅读排行榜

评论排行榜