条件是:比如说一个对话框中有100个CEdit框。我要在一个统一的地方PreTranslateMessage截获任何一个edit框有改变文本的消息?然后如何来判断有改变的edit框的id.谢谢。

解决方案 »

  1.   

    容易阿。你将这些edit的ID做成连续的就行了。在PreTranslateMessage中,只要ID号在这个之间就是其中一个edit了,用GetDlgItem(ID号)就得到这个edit控件指针了。
      

  2.   

    那就在PreTranslateMessage中先判断Msg的消息类型阿,只处理文本改变消息就行阿
      

  3.   

    做了如下代码的测试:
    BOOL CTTTDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->hwnd == GetDlgItem(IDC_EDIT1)->m_hWnd)
    {
    int i=0;
    // if(pMsg->message >= EN_CHANGE)
    {
    TRACE("%x\r\n",pMsg->message);
    }
    }
    return CDialog::PreTranslateMessage(pMsg);
    }
    发现,当在文本框中输入文本时,对话框截获的是0x0101和0x0102消息,即WM_CHAR和WM_KEYDOWN。也就是说,文本框的消息EN_CHANGE对话框截获不到,它只能截获到有字符或者虚拟键输入。
    通过pMsg->hwnd,你就可以得到当前编辑的文本框的句柄,从而可以得到该文本框的对象指针,进而得到你想要的文本框ID号。
    由此看来,你只能通过WM_CHAR和WM_KEYDOWN消息来判断文本框中有字符变化,来做相应的处理了。