如何弹出鼠标提示? 如何弹出鼠标提示?我要在鼠标移到view客户区的时候弹出鼠标提示,请问要怎么做??,用什么来弹出鼠标提示? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString str="mystring";CDC* pDC=new CDC;pDC=GetDC();pDC->TextOut(x,y,str,str.GetLength()); 是不是tooltips啊创建一个ctooltips对象啊 ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolTipText) ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolTipText)处理上面的消息 1.在CView中加入类变量CToolTipCtrl m_toolTip;2.加入消息处理函数 //{{AFX_MSG(CEMapView) //}}AFX_MSG afx_msg BOOL OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult); DECLARE_MESSAGE_MAP()3.加入消息映射BEGIN_MESSAGE_MAP(CEMapView, CView) //{{AFX_MSG_MAP(CEMapView) //}}AFX_MSG_MAP ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolTipText) ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolTipText)END_MESSAGE_MAP()4.创建提示int CEMapView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; EnableToolTips(TRUE); CRect rcTool(0, 0, 1000, 1000); if (m_toolTip.Create(this, TTS_ALWAYSTIP) && m_toolTip.AddTool(this, LPSTR_TEXTCALLBACK, &rcTool, TOOLTIP_ID) ) { m_toolTip.SendMessage(TTM_SETMAXTIPWIDTH, 0, SHRT_MAX); m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, SHRT_MAX); m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, 200); m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, 200); } return 0;}5.传递消息给提示控件BOOL CEMapView::PreTranslateMessage(MSG* pMsg) { if (::IsWindow(m_toolTip.m_hWnd) && pMsg->hwnd == m_hWnd) { switch(pMsg->message) { case WM_LBUTTONDOWN: case WM_MOUSEMOVE: case WM_LBUTTONUP: case WM_RBUTTONDOWN: case WM_MBUTTONDOWN: case WM_RBUTTONUP: case WM_MBUTTONUP: m_toolTip.RelayEvent(pMsg); break; } } return CView::PreTranslateMessage(pMsg);}6.激活设置提示m_toolTip.SetToolRect(this, TOOLTIP_ID, &rcTool);//TOOLTIP_ID自己定义的IDm_toolTip.Activate(TRUE);7.提示消息函数BOOL CEMapView::OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult){ CPoint ptCursorPos; VERIFY(::GetCursorPos(&ptCursorPos)); ScreenToClient(&ptCursorPos); CRect rcClient; GetClientRect(&rcClient); TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR; pTTT->szText[0] = '\0'; if (!rcClient.PtInRect(ptCursorPos)) return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; LPCTSTR lpszInfoText = _T("Tool tips");//设置提示内容 int nStrLen = _tcslen(lpszInfoText);#ifndef _UNICODE if (pNMHDR->code == TTN_NEEDTEXTA) lstrcpyn(pTTTA->szText, lpszInfoText, nStrLen); else _mbstowcsz(pTTTW->szText, lpszInfoText, nStrLen);#else if (pNMHDR->code == TTN_NEEDTEXTA) _wcstombsz(pTTTA->szText, lpszInfoText, nStrLen); else lstrcpyn(pTTTW->szText, lpszInfoText, nStrLen);#endif *pResult = 0; return TRUE;}//具体的函数可以查看MSDN to wuxfBrave(升星了,休息休息)用的ToolTips消息处理结果,是不是就是实现VC编程中的那种黄色的提示便签?(当鼠标在一个函数上面停留一会儿,就会出现一个便签。)上次我在论坛看了,他们都讨论用一个对话框,实现这个便签功能,你如果用这个方法就实现了这个功能,那真的很厉害。 是啊就用上面的方法就可以阿,实现类似vc的功能,要结合处理WM_MOUSEMOVE的消息,判断当前鼠标下的东西是什么东西,如果是需要提示的东西,就激活tooltips,设置提示的显示rect,并且记下需要提示的内容然后在OnToolTipText中填入即可m_toolTip.SetToolRect(this, TOOLTIP_ID, &rcTool);//TOOLTIP_ID自己定义的IDm_toolTip.Activate(TRUE);不需要就m_toolTip.Activate(FALSE); 怎样为对话框和控件添加图片?? CEdit控件,回车后,如何选择全部内容? 大家有没有线程死锁检测的工具? 怎样获取文件类型 考完试了,爽~~! 各位网络安全工程师、软件工程师到这里看过来: 如何以16进制显示一个数据 请问为何有关Toolbar上的图片显示问题?? 逻辑坐标,设备坐标,物理坐标到底是怎么一回事 将角度转换位字串,如何返回一个字符串? 在中国游戏中心,斗地主如何知道已经出了那些牌,以及对手出了那些牌 为何我就这么郁闷!!!(因为郁闷散分)
ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolTipText)
处理上面的消息
2.加入消息处理函数
//{{AFX_MSG(CEMapView)
//}}AFX_MSG
afx_msg BOOL OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult);
DECLARE_MESSAGE_MAP()
3.加入消息映射
BEGIN_MESSAGE_MAP(CEMapView, CView)
//{{AFX_MSG_MAP(CEMapView)
//}}AFX_MSG_MAP
ON_NOTIFY_EX(TTN_NEEDTEXTW, 0, OnToolTipText)
ON_NOTIFY_EX(TTN_NEEDTEXTA, 0, OnToolTipText)
END_MESSAGE_MAP()
4.创建提示
int CEMapView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
EnableToolTips(TRUE);
CRect rcTool(0, 0, 1000, 1000); if (m_toolTip.Create(this, TTS_ALWAYSTIP)
&& m_toolTip.AddTool(this, LPSTR_TEXTCALLBACK, &rcTool, TOOLTIP_ID) )
{
m_toolTip.SendMessage(TTM_SETMAXTIPWIDTH, 0, SHRT_MAX);
m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_AUTOPOP, SHRT_MAX);
m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_INITIAL, 200);
m_toolTip.SendMessage(TTM_SETDELAYTIME, TTDT_RESHOW, 200);
} return 0;
}
5.传递消息给提示控件
BOOL CEMapView::PreTranslateMessage(MSG* pMsg)
{
if (::IsWindow(m_toolTip.m_hWnd) && pMsg->hwnd == m_hWnd)
{
switch(pMsg->message)
{
case WM_LBUTTONDOWN:
case WM_MOUSEMOVE:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONUP:
case WM_MBUTTONUP:
m_toolTip.RelayEvent(pMsg);
break;
}
}
return CView::PreTranslateMessage(pMsg);
}
6.激活设置提示
m_toolTip.SetToolRect(this, TOOLTIP_ID, &rcTool);//TOOLTIP_ID自己定义的ID
m_toolTip.Activate(TRUE);
7.提示消息函数
BOOL CEMapView::OnToolTipText(UINT id, NMHDR * pNMHDR, LRESULT * pResult)
{
CPoint ptCursorPos;
VERIFY(::GetCursorPos(&ptCursorPos));
ScreenToClient(&ptCursorPos); CRect rcClient;
GetClientRect(&rcClient); TOOLTIPTEXT* pTTT = (TOOLTIPTEXT*)pNMHDR;
pTTT->szText[0] = '\0'; if (!rcClient.PtInRect(ptCursorPos))
return FALSE; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
LPCTSTR lpszInfoText = _T("Tool tips");//设置提示内容
int nStrLen = _tcslen(lpszInfoText);
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, lpszInfoText, nStrLen);
else
_mbstowcsz(pTTTW->szText, lpszInfoText, nStrLen);
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText, lpszInfoText, nStrLen);
else
lstrcpyn(pTTTW->szText, lpszInfoText, nStrLen);
#endif
*pResult = 0; return TRUE;
}
//具体的函数可以查看MSDN
用的ToolTips消息处理结果,是不是就是实现VC编程中的那种黄色的提示便签?
(当鼠标在一个函数上面停留一会儿,就会出现一个便签。)
上次我在论坛看了,他们都讨论用一个对话框,实现这个便签功能,你如果用这个方法就实现了这个功能,那真的很厉害。
实现类似vc的功能,要结合处理WM_MOUSEMOVE的消息,判断当前鼠标下的东西是什么东西,如果是需要提示的东西,就激活tooltips,设置提示的显示rect,并且记下需要提示的内容
然后在OnToolTipText中填入即可
m_toolTip.SetToolRect(this, TOOLTIP_ID, &rcTool);//TOOLTIP_ID自己定义的ID
m_toolTip.Activate(TRUE);
不需要就m_toolTip.Activate(FALSE);