我在一个从CStatic继承而来的控件中,要在控件改变显示字符之前,做一些预处理。
直接重载CStatic::SetWindowText不行,因为可能从基类的CWnd::SetWindowText访问。我看MSDN上说SetWindowText会发给窗口一个WM_SETTEXT消息,
但是我在PreTranslateMessage中用
switch(pMsg->message) 
{
case WM_SETTEXT: AfxMessageBox(_T("WM_SETTEXT")); break;
}
没有反映,应该是没有截获此消息。请问各位,在控件的显示字符要改变的时候,它到底会收到什么消息?
用什么方法可以截获此消息?谢谢了。

解决方案 »

  1.   

    PreTranslateMessage只能处理消息队列中的消息,也就是由PostMessage发出的消息/鼠标键盘消息等。
    SendMessage发送的消息并不放在消息队列,而是直接调用消息处理函数进行处理。所以这种消息用PreTranslateMessage是抓不到的,WM_SETTEXT就属于这种。
    想要捕捉WM_SETTEXT的话,用SetWindowLong,用自己的消息函数把默认消息函数替换掉才行
      

  2.   

    恩,我刚刚发现这个问题。
    我用:afx_msg LRESULT OnSetText(WPARAM wParam,LPARAM lParam);
    和:ON_MESSAGE(WM_SETTEXT,OnSetText)
    就可以处理了。但是问题是我处理完之后,应该怎么把消息传递下去?
    PostMessage(WM_SETTEXT, wParam, lParam);
    和:CStatic::SetWindowText(lParam);都不行。