描述:
我用MFC做一个控件,然后在这个控件中用CEDIT Create的方法创建一个CEDIT框,创建成功也显示出来,但是EDIT有些功能则没有实现 ,消息也捕捉不到,比如右键弹出菜单功能,CEDIT根本捕捉不到WM_RBUTTONDOWN等消息,但又可以输入。而且我在控件中重载PreTranslateMessage函数,发现控件的一些消息这个函数也捕捉不到,比如控件有WM_MOUSEMOVE消息,可以触发WM_MOUSEMOVE消息,但我在PreTranslateMessage设断点却没有捕捉到。
现在想请教高手:
1.为什么控件的PreTranslateMessage函数没法捕捉到WM_MOUSEMOVE等消息(有些消息又可以,我在迷个函数设了断点)?
2.怎样让CEDIT能够像一个正常的CEDIT一样?
谢谢!!
解决后另开贴送100分!
解决方案1:
这么说吧,我有做过一个控件,也是要自己画一个editbox,同样响应不到onclick,只能在控件中响应onclick然后调用editbox的onclick函数,我就只会这样而已
解决方案2: 重载 COleControl::IsSubClassControl 函数 返回True
You must override this function and return TRUE if your OLE control subclasses a Windows control
控件的消息一般由父窗口处理,试试消息反射,让控件自己处理
解决方案4: 继承CEdit,重载OnRButtonDown
void CMyEdit::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
this->GetParent()->SendMessage(WM_RBUTTONDOWN, nFlags, point.y*65536+point.x);
CEdit::OnRButtonDown(nFlags, point);
}
需要高手吗?
你是在容器里创建一个EDIT的吧?
那当然收不到消息,因为消息都被你的容器收去了
EDIT自己没有消息循环难道就不能输入东西了吗?
让你的EDIT子类化就可以了,所有消息就都流进来了。
试一下自己从CEdit派生类。