0

我有一个从 CWnd 对象派生的控件,该对象具有其自定义实现的工具提示系统。工具提示是使用 CDialog 实现的并且工作正常,但我有一个问题要知道何时必须隐藏它。

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

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

提前致谢!

哈维尔

4

1 回答 1

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

您仍然需要在小范围内修改主机对话框代码以使用该控件,但您的控件是可重用的。

于 2009-02-04T16:30:07.850 回答