类似画图板的MFC程序,如何获取文本 一个画图的MFC程序,文档视图结构的。工具栏中自定义了按钮“画文本”,进行文本绘制。另外还可以绘制圆,直线等图形。然后显示整个图像(包括文本和图形)。现在想将整个图像分割成n块,然后在每一块里任取一个文本,然后把它放大显示。图像分块已经知道思路了,那如何获取到文本呢。请大家指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我知道肯定能取到,然后文本那边也已经封装到一个类里了,假如叫MyText。定义个GetText()就能取到文本喽。将画图板上的绘制且已显示的图像分割成9个小格,每个小格里的文本数目不定,但肯定有。这样的情况下,如何才可以操作到文本呢?我现在就能获取到这9个小格各自的区域rect,那怎么由rect操作这个区域里的文本呢?本人初涉MFC,C++等等,望高人指教,最好能给出应该用到的核心函数。 也许没理解需求,我觉得是很简单的问题。图上的每个元素都是一个对象,比较叫DrawObject. 实际的元素从这个对象继承,比如点,叫PointDrawObject, 线叫LineDrawObject,那么文本叫做TextDrawObject.每个DrawObject都实现Draw方法,用来在图上绘制自己。TextDrawObject包含一个Text属性,String型,用来保存文本内容。它的Draw方法,读自己的Text属性,画文本到图上。每个对象还保存了坐标,比如点、文本是(X,Y),Line是点集。绘制目标是一个画布对象,里面保存了一个DrawObject的集合,就是每画一个对象,都加入这个集合。那么获取的时候只要遍历这个集合,判断TextDrawObject的坐标是否在目标区域,然后获取Text属性的值就可以了。 看来楼主的思维是很清晰的那么我现在这样描述你看看是否合适。对于文本对象,一定是有字体大小的那么,文本对象就是有CRect r1的而你分成的小格也是有范围的CRect r2r1,和r2的交几集要么是空要么也是CRect r3;r3如果不为空,那么他包含了那些字符很简单就计算出来了唯一的麻烦点的就是,有的可能只圈到半截字就看你定义取还是不取,或者做少比例以上取。多行和单行是一样的道理,无非多几个串的变量,取好以后再连接而已, 也就是说:在你的MyText类里应该有一个r,每个实例都有自己的值在设置字符和字体的时候都自动计算好并有一个实现GetText(CRect *xr)然后自己计算自己在xr里的字串返回给调用者就好了 比方说我的字串是 KKK42534534 PPJKKDHKDJHF ##%)(_%)%%(%(我的r是0,0,1000,120我的字体是H:40 W:20查询的r是53,22,200,41那么(假如不要半截字):因为53/20=2;53%20>0 ,所以从第2+1个数以前是不包含的因为200/20=10;200%20=0;200<1000;所以到第10个数是有效果的因为22/40=0;22%40>0;所以到第0+1行以前是无效果的因为41/40=1;41%40>0;所以到第0+1行以后是有效果的结果不就出来了如果需要考虑圈住的比例,那么(53%20)*100/20就是起始位的百分比而(22%40)*100/40就是起始行的百分比 VC单选按钮 List Scroll函数参数意义 掩码问题 工程是UNICODE, 在使用Richedit2.0时,无法设置字体. 关于socket中网络字节顺序的问题 请问学习VC6.0 MSDN.net够用不?缺必须有的东西不? 请问怎样获取托盘窗体的句柄??(给一百分) 怎样触发ActiveX控件的特定事件? 高分求助,这个问题真是要命? 推荐几本windows编程的书 关于glReadPixels(...)函数的用法,哪里出错了,谢谢!!! 关于线程中postmessage与view类句柄的获取
图上的每个元素都是一个对象,比较叫DrawObject.
实际的元素从这个对象继承,比如点,叫PointDrawObject, 线叫LineDrawObject,
那么文本叫做TextDrawObject.
每个DrawObject都实现Draw方法,用来在图上绘制自己。
TextDrawObject包含一个Text属性,String型,用来保存文本内容。
它的Draw方法,读自己的Text属性,画文本到图上。每个对象还保存了坐标,
比如点、文本是(X,Y),Line是点集。
绘制目标是一个画布对象,里面保存了一个DrawObject的集合,就是每画一个对象,都加入这个集合。
那么获取的时候只要遍历这个集合,判断TextDrawObject的坐标是否在目标区域,然后获取Text属性的值就可以了。
那么我现在这样描述你看看是否合适。
对于文本对象,一定是有字体大小的
那么,文本对象就是有CRect r1的
而你分成的小格也是有范围的CRect r2
r1,和r2的交几集要么是空要么也是CRect r3;
r3如果不为空,那么他包含了那些字符很简单就计算出来了
唯一的麻烦点的就是,有的可能只圈到半截字
就看你定义取还是不取,或者做少比例以上取。
多行和单行是一样的道理,无非多几个串的变量,取好以后再连接而已,
在你的MyText类里
应该有一个r,每个实例都有自己的值
在设置字符和字体的时候都自动计算好并有一个实现GetText(CRect *xr)
然后自己计算自己在xr里的字串返回给调用者就好了
我的字串是
KKK42534534
PPJKKDHKDJHF
##%)(_%)%%(%(
我的r是0,0,1000,120
我的字体是H:40 W:20查询的r是53,22,200,41那么(假如不要半截字):
因为53/20=2;53%20>0 ,所以从第2+1个数以前是不包含的
因为200/20=10;200%20=0;200<1000;所以到第10个数是有效果的
因为22/40=0;22%40>0;所以到第0+1行以前是无效果的
因为41/40=1;41%40>0;所以到第0+1行以后是有效果的
结果不就出来了如果需要考虑圈住的比例,那么(53%20)*100/20就是起始位的百分比
而(22%40)*100/40就是起始行的百分比