2009-02-04 84 views
0

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

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

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

提前致谢!

哈维尔

回答

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

您仍然必须修改主机对话框代码以在很小程度上利用该控件,但是您的控件可以重复使用。

相关问题