我用SDK中的TOOLTIP controls的API写了一个弹出气泡的TOOLTIP类,要在tooltip窗口点以下鼠标,如何TOOPTIP消失!如果用CToolTipCtrl类只需在Dialog的PreTranslateMessage中调用RelayEvent把鼠标消息传递给TOOLTIP,可在SDK中如何响应鼠标消息???
我使者用TTM_RELAYEVENT消息,却不行,不止如何解决???
 BOOL CDemoTTDlg::PreTranslateMessage(MSG* pMsg) 
  {
   // TODO: Add your specialized code here and/or call the base class
   //m_bttWnd.RelayEvent(pMsg);
   //m_ballonTip.RelayEvent(pMsg);
if(m_ballonTip.m_hWnd != NULL)
{

::SendMessage(m_ballonTip.m_hWnd,TTM_ACTIVATE,1,0);
::SendMessage(m_ballonTip.m_hWnd,TTM_RELAYEVENT,0,(LPARAM)&(m_ballonTip.ti));
            }

   } 

解决方案 »

  1.   

    可以给我发一个Sample测试一下吗?[email protected]
      

  2.   

    试试我的方法:/* CREATE A TOOLTIP WINDOW */
        hwndTT = CreateWindowEx(WS_EX_TOPMOST,
            TOOLTIPS_CLASS,
            NULL,
            WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            CW_USEDEFAULT,
            hwnd,
            NULL,
            ghThisInstance,
            (LPVOID)MyFunc  
            );
    然后在MyFunc中处理鼠标消息。
      

  3.   

    1.sdk方法:如果控件没有定义:则必须定义,如:IDC_STATIC WM_USER + 100//}}AFX_MSG_MAP
    ON_NOTIFY_EX( TTN_NEEDTEXT, 0, NotifyFunction )
    END_MESSAGE_MAP()BOOL CDlg_TTBarDlg::NotifyFunction( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )
    {
    pResult = NULL;// Identifier of the control that sent the notification.
    // Not used.
    // The control id is taken from the NMHDR structure.
    id = 0; 
    TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pTTTStruct;// idFrom 实际上是控件的句柄号
    UINT nID = pTTTStruct->idFrom;
    if (pTTT->uFlags & TTF_IDISHWND)
    {
    nID = ::GetDlgCtrlID((HWND)nID);switch(nID)
    {
    case IDC_EDT_USRNAME:
    pTTT->lpszText = MAKEINTRESOURCE(IDS_EDT_USRNAME);
    pTTT->hinst = AfxGetResourceHandle();
    break;
    }
    return TRUE;}
    else
    return FALSE;oninitdialog(){enabletooltips();}