如何在ActiveX控件中显示Tooltip?
ActiveX中PreTranslateMessage(...)没有调用,我处理WM_MOUSEMOVE 和WM_TIME,
此种方法在Dialog-Based程序中是没有问题的,但到了ActiveX控件中还是显示
不出来
int CCtrlBar::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
EnableToolTips(TRUE);
m_TooltipCtrl.Create(this);
m_TooltipCtrl.Activate(TRUE);
CRect rect(0,0,100,100);
m_btnPlay.Create(_T("Play"),
WS_VISIBLE |WS_CHILD | BS_OWNERDRAW,
CRect(0,0,1,1),
this,
ID_BUTTON_PLAY);
m_btnPlay.LoadBitmap(IDB_PLAY,3);
m_TooltipCtrl.AddTool(&m_btnPlay,LPSTR_TEXTCALLBACK);
。。。。。。。。。
}
void CCtrlBar::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_bTimerSet)
{
SetTimer(1, 1, NULL);
m_bTimerSet = TRUE;
}
ClientToScreen(&point);
MSG msg;
msg.hwnd =m_hWnd;
msg.message= WM_MOUSEMOVE;
msg.pt=point;
msg.lParam=MAKELPARAM(point.x,point.y);
msg.wParam=nFlags;
m_TooltipCtrl.RelayEvent(&msg);
}
void CMediaCtrlBar::OnTimer(UINT nIDEvent)
{
if (nIDEvent == 1)
{
ASSERT(m_bTimerSet);
CPoint point;
GetCursorPos(&point);
CRect rc;
GetWindowRect(&rc);
if(!PtInRect(&rc,point))
{
KillTimer(1);
m_bTimerSet = FALSE;
}
else
{
MSG msg;
msg.hwnd =m_hWnd;
msg.message= WM_MOUSEMOVE;
msg.pt =point;
msg.lParam=MAKELPARAM(point.x,point.y);
m_TooltipCtrl.RelayEvent(&msg);
}
}
CWnd::OnTimer(nIDEvent);
}