【发布时间】:2010-02-23 10:45:17
【问题描述】:
我有一个自定义的 CWnd 派生 MFC 控件,其工作方式如下:
- 控件有自己的 OnPaint 和黑色背景
- 单击控件上的任意位置会导致编辑控件出现在该位置,无边框且具有黑色背景,因此它会融入其中
- 用户在此框中键入并按回车键,该框消失并且控件的自定义绘制功能在背景的相同位置呈现相同的文本。
所以我们的控件拥有一个 CCustomEdit,当您点击背景时,控件会被创建或移动,并使其可见:
CCustomEdit::Show(Rect &rc,CCustomControl *pParent)
{
if ( !::IsWindow( m_hWnd ) )
{
Create( ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | ES_NOHIDESEL | ES_CENTER | ES_UPPERCASE, rc, pParent, 999 );
}
else
MoveWindow( &rc );
}
主要部分实际上工作正常(我们坚持使用这种方法)。但是一件事不起作用的是CCustomEdit 为EN_CHANGE 事件自行注册等等。当CCustomEdit 被创建为普通对话框控件时(CEdit 在对话框模板上,DDX 绑定到CCustomEdit 变量)这些工作,但在CCustomControl 它们不是。
CCustomEdit::PreSubclassWindow() 调用 SetEventmask() 并且 正在 被调用。并且CCustomEdit 的ON_CHAR 处理程序也被调用来处理编辑框中的按键,但是像EN_CHANGE 这样的编辑框消息的处理程序却没有。
是否有任何明显的事情,例如更改样式标志?否则,为什么我的自定义控件会阻止这些事件到达包含的编辑控件?
【问题讨论】: