我有一个源自CWnd对象的控件,该对象具有自定义实现的工具提示系统。工具提示是使用CDialog实现的,工作正常,但我有一个问题要知道什么时候我必须隐藏它。
当鼠标悬停在控件(WM_MOUSEHOVER)上时,工具提示会显示,当鼠标离开控件(WM_MOUSELEAVE)时,它会隐藏。到现在为止还挺好。问题是设置控件的对话框可以从菜单中隐藏(不会被破坏,可以从菜单中再次显示)。发生这种情况时,WM_MOUSELEAVE事件不会发送到控件,并且不会删除工具提示...它会显示在新对话框上。
我的问题是:有没有办法知道控件被隐藏了?我知道我可以为设置控件的对话框捕获WM_SHOWWINDOW消息,但我想从控件本身执行它,这样我就可以在其他地方使用控件,而无需添加额外的代码。
提前致谢!
哈维尔
答案 0 :(得分:2)
通常,如果您有一个需要将对话框消息转发给它的自定义控件,则使用子类。类似于以下内容
BOOL CMyDialog::OnInitDialog()
{
m_MyCtrl.SubclassDlgItem(IDC_MY_CTRL_ID,this);
CMyDialog::OnInitDialog();
return TRUE;
}
然后您可以处理来自您控件的对话框消息,例如
BEGIN_MESSAGE_MAP(CMyCtrl, CWnd)
//{{AFX_MSG_MAP(CMyCtrl)
ON_WM_SHOWWINDOW()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CMyCtrl::OnShowWindow(BOOL bShow,UINT nStatus )
{
.
.
}
您仍然需要在很小程度上修改主机对话框代码才能使用该控件,但您的控件可以重复使用。