如何知道何时隐藏控件

时间:2009-02-04 16:17:23

标签: mfc controls cwnd

我有一个源自CWnd对象的控件,该对象具有自定义实现的工具提示系统。工具提示是使用CDialog实现的,工作正常,但我有一个问题要知道什么时候我必须隐藏它。

当鼠标悬停在控件(WM_MOUSEHOVER)上时,工具提示会显示,当鼠标离开控件(WM_MOUSELEAVE)时,它会隐藏。到现在为止还挺好。问题是设置控件的对话框可以从菜单中隐藏(不会被破坏,可以从菜单中再次显示)。发生这种情况时,WM_MOUSELEAVE事件不会发送到控件,并且不会删除工具提示...它会显示在新对话框上。

我的问题是:有没有办法知道控件被隐藏了?我知道我可以为设置控件的对话框捕获WM_SHOWWINDOW消息,但我想从控件本身执行它,这样我就可以在其他地方使用控件,而无需添加额外的代码。

提前致谢!

哈维尔

1 个答案:

答案 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 ) 
{
.
.
}

您仍然需要在很小程度上修改主机对话框代码才能使用该控件,但您的控件可以重复使用。