1.创建m_tipWindow;
CXTPTipWindow m_tipWindow;
2.在OnInitDialog中初始化
m_tipWindow.Create(this); m_tipWindow.ShowWindow(SW_HIDE);
3.在PreTranslateMessage中添加代码
if(pMsg->message == WM_MOUSEMOVE && pMsg->wParam == 0) { int id = ::GetDlgCtrlID(pMsg->hwnd); CPoint point; point.x = LOWORD(pMsg->lParam); point.y = HIWORD(pMsg->lParam); if(id == IDC_LISTCTRL) MouseOverListCtrl(point); }
4.MouseOverListCtrl的声明
void MouseOverListCtrl(CPoint point)
{
//point = client coordinates inside the listctrl
int nItem, nCol;
if ((nItem = m_listCtrl.HitTestEx(point, &nCol)) != -1)
{
#if _MSC_VER >= 1200 // MFC 5.0
int nOriginalCol = m_listCtrl.GetHeaderCtrl()->OrderToIndex(nCol);
CString sItemText = m_listCtrl.GetItemText(nItem, nOriginalCol);
int iTextWidth = m_listCtrl.GetStringWidth(sItemText) + 5; //5 pixed extra size
CRect rect;
m_listCtrl.GetSubItemRect(nItem, nOriginalCol, LVIR_LABEL, rect);
rect.top--;
m_tipWindow.SetMargins(CSize(1,1));
m_tipWindow.SetLineSpace(0);
//在No.10列显示版本的信息
sItemText = GetVersionInfo(m_listCtrl.GetItemText(nItem, 10));
sItemText.Replace(_T("\r\n"), _T("\n")); //Avoid ugly outputted rectangle character in the tip window
m_tipWindow.SetTipText(_T(""), sItemText);
//Calculate the client coordinates of the dialog window
m_listCtrl.ClientToScreen(&rect);
m_listCtrl.ClientToScreen(&point);
ScreenToClient(&rect);
ScreenToClient(&point);
//Show the tip window
UpdateData();
m_tipWindow.ShowTipWindow(rect, point, 2, 0, 5000, false, TRUE);
// }
#endif
}
}