一个画图的MFC程序,文档视图结构的。工具栏中自定义了按钮“画文本”,进行文本绘制。另外还可以绘制圆,直线等图形。然后显示整个图像(包括文本和图形)。现在想将整个图像分割成n块,然后在每一块里任取一个文本,然后把它放大显示。图像分块已经知道思路了,那如何获取到文本呢。请大家指教

解决方案 »

  1.   

    我知道肯定能取到,然后文本那边也已经封装到一个类里了,假如叫MyText。定义个GetText()就能取到文本喽。将画图板上的绘制且已显示的图像分割成9个小格,每个小格里的文本数目不定,但肯定有。这样的情况下,如何才可以操作到文本呢?我现在就能获取到这9个小格各自的区域rect,那怎么由rect操作这个区域里的文本呢?本人初涉MFC,C++等等,望高人指教,最好能给出应该用到的核心函数。
      

  2.   

    也许没理解需求,我觉得是很简单的问题。
    图上的每个元素都是一个对象,比较叫DrawObject. 
    实际的元素从这个对象继承,比如点,叫PointDrawObject, 线叫LineDrawObject,
    那么文本叫做TextDrawObject.
    每个DrawObject都实现Draw方法,用来在图上绘制自己。
    TextDrawObject包含一个Text属性,String型,用来保存文本内容。
    它的Draw方法,读自己的Text属性,画文本到图上。每个对象还保存了坐标,
    比如点、文本是(X,Y),Line是点集。
    绘制目标是一个画布对象,里面保存了一个DrawObject的集合,就是每画一个对象,都加入这个集合。
    那么获取的时候只要遍历这个集合,判断TextDrawObject的坐标是否在目标区域,然后获取Text属性的值就可以了。
      

  3.   

    看来楼主的思维是很清晰的
    那么我现在这样描述你看看是否合适。
    对于文本对象,一定是有字体大小的
    那么,文本对象就是有CRect r1的
    而你分成的小格也是有范围的CRect r2
    r1,和r2的交几集要么是空要么也是CRect r3;
    r3如果不为空,那么他包含了那些字符很简单就计算出来了
    唯一的麻烦点的就是,有的可能只圈到半截字
    就看你定义取还是不取,或者做少比例以上取。
    多行和单行是一样的道理,无非多几个串的变量,取好以后再连接而已,
      

  4.   

    也就是说:
    在你的MyText类里
    应该有一个r,每个实例都有自己的值
    在设置字符和字体的时候都自动计算好并有一个实现GetText(CRect *xr)
    然后自己计算自己在xr里的字串返回给调用者就好了
      

  5.   

    比方说
    我的字串是
        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就是起始行的百分比