我准备做一个屏幕取词的程序,进程中DLL函数表的替换工作已经做好了,把系统的TextOutW调用替换成了我的MyTextOutW,我在程序里显式调用TextOutW,确实是会进到MyTextOutW里(我的工程是UNICODE的)。但是我在对话框上放一个CStatic控件,不停对它Invalidate,就是进不到MyTextOut里,是这中间过程有问题,还是CStatic的重绘不使用TextOut?我替换了ExtTextOutW,DrawTextW,DrawTextExW,都不行。

解决方案 »

  1.   

    Invalidate只是放一个WM_PAINT消息在队列里,在WM_PAINT消息响应函数中你要看是没有调用TextOut类函数
      

  2.   

    是不是应该hook SetDlgItemText或者SetWindowText
      

  3.   

    怎么看呢?一个CStatic的OnPaint响应函数会不会调用TextOut呢。按理说只要我用MyTextOutW取代了TextOutW,那这个进程里所有的TextOutW调用都会进入我自定义函数里吧。但是我只发现只有我自己写代码显式调用TextOutW才进到我的函数里。
      

  4.   

    问题是一个CStatic控件的文字已经确定了,我要迫使它重绘然后钩住输出文字的函数转到我自定义的函数里来。TextOut,DrawText,DrawTextEx,ExtTextOut,难道还有其他输出文字的函数?
      

  5.   

    重绘WM_Onpaint,有3个函数和重绘相关.
    OnPaint,OnDraw(对话框好像没这个),OnEraseBackgroundOnPaint 会调用OnDraw. 如果你的Texrout 在 这3个函数内,应该都会断下来