现在的位置: 首页 > 综合 > 正文

CToolTipCtrl 应用实例

2013年10月14日 ⁄ 综合 ⁄ 共 1502字 ⁄ 字号 评论关闭

1.要注意两点:(1)用AddTool()添加一个窗体后,当鼠标在这个窗体内移动时,UpdateTipText()才会起作用。用途:把某个窗体添加到这个提示控件后,这个窗体中的代码可以用UpdateTipText()来动态改变提示信息。

                           (2)EnableToolTips(TRUE)后,ON_NOTIFY_EX( TTN_NEEDTEXT, 0, &MyDlg::SetTipText )才会起作用。用途:这个用于当鼠标移动到某个控件上时动态设置此时的提示信息。

2.实例

MyDlg.h:

class MyDlg : public CDialog
{

CToolTipCtrl m_pContentTip;

afx_msg BOOL SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult );

}

ON_NOTIFY_EX( TTN_NEEDTEXT, 0, &MyDlg::SetTipText )//当鼠标移动到一个控件上的时候,就会产生一个这样的消息

BOOL MyDlg::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
{
    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;
    UINT nID =pTTTStruct->idFrom; //得到相应窗口ID,有可能是HWND
    if (pTTT->uFlags & TTF_IDISHWND) //表明nID是否为HWND
    {
        nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断
        switch(nID)
        {
        case(IDB_FULL):
            //strcpy(pTTT->lpszText,your_string1);//设置
            pTTT->lpszText=_T("全屏");
            return TRUE;
            break;
        }

    }
    return(FALSE);
}

BOOL MyDlg::OnInitDialog()

{

//添加下面的代码

EnableToolTips(TRUE);//使消息起作用
m_pContentTip.Create(this,TTS_ALWAYSTIP);//创建这个提示控件
m_pContentTip.AddTool(this,_T(""));//把这个对话框窗体添加到这个提示控件 m_pContentTip.UpdateTipText(_T("ff"),this);
m_pContentTip.Activate(true);

}

BOOL MyDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: 在此添加专用代码和/或调用基类
    m_pContentTip.RelayEvent(pMsg);//还有这里 别忘了
    return CDialog::PreTranslateMessage(pMsg);
}

//下面是验证代码 鼠标在对话框内移动时 动态修改提示信息

void MyDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
m_pContentTip.UpdateTipText(_T("ff"),this);

    CDialog::OnMouseMove(nFlags, point);
}

抱歉!评论已关闭.