none
关于SetCaretPos()和TextOut()的顺序问题 RRS feed

  • 问题

  • 我用vc++建了个mfc要进行文本操作,但我发现先TextOut()在SetCaretPos()的话,文本操作会有些怪异,因为输出的文本在在最后一个字符与倒数第二个字符间会有个|

    谁知道为什么的啊?部分代码如下:

     dc.TextOut(ptOrigin.x,ptOrigin.y,strOrigin);//ptOrigin为CPoint类变量用于记录之前点

    sz=dc.GetTextExtent(strOrigin);//sz为CPoint类变量
     ptNow.x=ptOrigin.x+sz.cx;//ptNow为CPoint类变量用于记录当前点
     ptNow.y=ptOrigin.y;
     SetCaretPos(ptNow);

    2010年7月31日 4:56

答案

  • 你好,

    这是由于在TextOut打印字符时,光标还是在这一坐标不断地重绘(闪烁效果)。在光标移动前,他可能和已打印字符重叠。在光标移动后,根据光标闪烁情况,可能会保留在刚才打印字符区域。所以你有时候发现有光标重叠有时候没有光标重叠。

    如果先移动光标,虽然之前的DC区域也有可能保留光标,但是在打印字符的时候把这一区域重绘了,所以看上去就只有字符存在。

    谢谢

    Yi

     


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 T Cheng Z 2010年8月5日 3:47
    2010年8月4日 9:41
    版主

全部回复

  • 你好,

    这是由于在TextOut打印字符时,光标还是在这一坐标不断地重绘(闪烁效果)。在光标移动前,他可能和已打印字符重叠。在光标移动后,根据光标闪烁情况,可能会保留在刚才打印字符区域。所以你有时候发现有光标重叠有时候没有光标重叠。

    如果先移动光标,虽然之前的DC区域也有可能保留光标,但是在打印字符的时候把这一区域重绘了,所以看上去就只有字符存在。

    谢谢

    Yi

     


    Please remember to mark the replies as answers if they help and unmark them if they provide no help.
    Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
    • 已标记为答案 T Cheng Z 2010年8月5日 3:47
    2010年8月4日 9:41
    版主
  • 虽然看得有些迷糊,但还是很感谢你,不过“在光标移动后,根据光标闪烁情况,可能会保留在刚才打印字符区域”,这话有些不明白,既然重置光标,为什么还会保留在原先位置?
    2010年8月5日 3:49