如何截获一个CEdit中的文本改变消息?条件是... 条件是:比如说一个对话框中有100个CEdit框。我要在一个统一的地方PreTranslateMessage截获任何一个edit框有改变文本的消息?然后如何来判断有改变的edit框的id.谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 容易阿。你将这些edit的ID做成连续的就行了。在PreTranslateMessage中,只要ID号在这个之间就是其中一个edit了,用GetDlgItem(ID号)就得到这个edit控件指针了。 那就在PreTranslateMessage中先判断Msg的消息类型阿,只处理文本改变消息就行阿 做了如下代码的测试: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消息来判断文本框中有字符变化,来做相应的处理了。 这种菜单叫做什么菜单啊?? 我找到了个vc时钟,但是没法运行,各位看看怎么改 酒店管理软件 找一个RFC2833发DTMF的例子! VC6.0下使用ADO连接oracle数据库不成功的问题! 问一下做过CWnd的高手,为什么CWnd只能接收部分的WM_KEYDOWN消息 ? 哪位DX能告诉我观看系统中性能的工具或者方式啊? socket发送和接收顺序执行问题,请高手指点 多线程读取数据库问题 怎么设计距离表 如何加快文件列表的显示速度? 《com技术内幕》潘爱民 翻译的和 《COM技术内幕:微软组件对象模型》杨秀章 江英/译 那本书好?
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消息来判断文本框中有字符变化,来做相应的处理了。