怎样为任何控件和区域添加提示信息:用自己封装的CTip类
2000-09-26 13:56
1376 查看
MFC中有一个CToolTipCtrl类,想必大家都知道,近来我在一个项目中需要在ActiveX Control上为特定的控件或区域添加提示.开始使用CToolTipCtrl,但发现它根本就不工作.无奈,只好自己写了一个类来实现它.
该类为CTip(包含CTip.c和CTip.h)
你只需在你的工程中加入它,就可以使用.
使用步骤:
1.在初始化时Create(CWnd* pParentWnd).
2.在MoseMove(CPoint point)中调用SetText(const CString& rsText)来设置要显示的文本.
3.在MoseMove(CPoint point)中调用Show(CPoint point)显示该提示.
使用说明:
1.Create中所作的是用CreateEX来创建一个窗口,这个窗口的大小为0,显示标题为空,风格为WS_POPUP¦WS_CHILD¦WS_CLIPSIBLINGS
2.这里有一个技巧,你必须知道当你的鼠标位于哪个范围时,该提示应当出现.因此你可以有两种选择:之一,你直接指定该范围(设置一个CRect)或是添加一个成员变量来动态记录该范围;之二,你可以调用如下:
CRect rect;
CWnd* pwnd = GetDlgItem(ID_xxx);
pwnd->GetWindowRect(&rect);
ScreenToClient(&rect);
这样也可以得到当前的rect.然后你可以调用如下:
if(rect.PtInRect(point))
{
m_tip.SetText(m_varname);
m_tip.Show(point);
}
else
{
m_tip.Close();
}
3.show和close用来显示和隐藏提示,在show中主要是利用CDC来进行绘制提示.
几个主要函数的具体代码:
BOOL CToolTip2::Create(CWnd* pParentWnd)
{
ASSERT(this != NULL );
ASSERT(pParentWnd != NULL);
m_pParentWnd = pParentWnd;
// Create font
CRect rectInitialSize(0,0,0,0);//Initial Window size. Will be dynamically
return CreateEx(NULL, NULL, NULL,WS_POPUP ¦ WS_CHILD ¦ WS_CLIPSIBLINGS,
rectInitialSize,pParentWnd, NULL, NULL);
}
BOOL CToolTip2::Show(const CPoint& rCurrentPoint)
{
ASSERT(this != NULL );
ASSERT(m_hWnd != NULL );
// Is text empty or tool tip already displayed?
if ( m_szText.IsEmpty() ¦¦ m_bShowStatus)
return FALSE;
m_ptCurrent = rCurrentPoint;
m_bShowStatus = TRUE;
// show tool tip
DisplayToolTip(rCurrentPoint);
return TRUE;
}
void CToolTip2::DisplayToolTip(const CPoint& rCurrentPoint)
{
CDC* pDC = GetDC();
CBrush *pOldBrush;
CFont *pOldFont;
pOldFont = pDC->SelectObject(&m_font);
CSize size = pDC->GetTextExtent(m_szText);
pDC->LPtoDP(&size);
// form tooltip rectangle
CRect rectToolTip(rCurrentPoint.x, rCurrentPoint.y,
rCurrentPoint.x+size.cx+7, rCurrentPoint.y+size.cy+2);
// draw Tooltip Rect and Text
pDC->SetBkMode(TRANSPARENT);
CBrush brushToolTip(GetSysColor(COLOR_INFOBK));
pOldBrush = pDC->SelectObject(&brushToolTip);
// Create and select thick black pen
CPen penBlack(PS_SOLID, 0, COLORREF(RGB(0, 0, 0)));
CPen* pOldPen = pDC->SelectObject(&penBlack);
// draw rectangle filled with COLOR_INFOBK
pDC->Rectangle(0,0,rectToolTip.Width(),rectToolTip.Height());
// draw tooltip text
pDC->SetTextColor( GetSysColor(COLOR_INFOTEXT) );//Tool Tip color set in
// control panel settings
pDC->SetTextAlign(TA_LEFT);
pDC->TextOut(3,1, m_szText);
CRect rectWnd = rectToolTip;
m_pParentWnd->ClientToScreen(rectWnd); // Convert from client to screen
CPoint ptToolTipLeft = rectWnd.TopLeft();
// now display tooltip
SetWindowPos(&wndTop,ptToolTipLeft.x+1, ptToolTipLeft.y+1, rectWnd.Width(),
rectWnd.Height(),SWP_SHOWWINDOW¦SWP_NOOWNERZORDER¦SWP_NOACTIVATE);
// put back old objects
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldFont);
ReleaseDC(pDC);
}
该类为CTip(包含CTip.c和CTip.h)
你只需在你的工程中加入它,就可以使用.
使用步骤:
1.在初始化时Create(CWnd* pParentWnd).
2.在MoseMove(CPoint point)中调用SetText(const CString& rsText)来设置要显示的文本.
3.在MoseMove(CPoint point)中调用Show(CPoint point)显示该提示.
使用说明:
1.Create中所作的是用CreateEX来创建一个窗口,这个窗口的大小为0,显示标题为空,风格为WS_POPUP¦WS_CHILD¦WS_CLIPSIBLINGS
2.这里有一个技巧,你必须知道当你的鼠标位于哪个范围时,该提示应当出现.因此你可以有两种选择:之一,你直接指定该范围(设置一个CRect)或是添加一个成员变量来动态记录该范围;之二,你可以调用如下:
CRect rect;
CWnd* pwnd = GetDlgItem(ID_xxx);
pwnd->GetWindowRect(&rect);
ScreenToClient(&rect);
这样也可以得到当前的rect.然后你可以调用如下:
if(rect.PtInRect(point))
{
m_tip.SetText(m_varname);
m_tip.Show(point);
}
else
{
m_tip.Close();
}
3.show和close用来显示和隐藏提示,在show中主要是利用CDC来进行绘制提示.
几个主要函数的具体代码:
BOOL CToolTip2::Create(CWnd* pParentWnd)
{
ASSERT(this != NULL );
ASSERT(pParentWnd != NULL);
m_pParentWnd = pParentWnd;
// Create font
CRect rectInitialSize(0,0,0,0);//Initial Window size. Will be dynamically
return CreateEx(NULL, NULL, NULL,WS_POPUP ¦ WS_CHILD ¦ WS_CLIPSIBLINGS,
rectInitialSize,pParentWnd, NULL, NULL);
}
BOOL CToolTip2::Show(const CPoint& rCurrentPoint)
{
ASSERT(this != NULL );
ASSERT(m_hWnd != NULL );
// Is text empty or tool tip already displayed?
if ( m_szText.IsEmpty() ¦¦ m_bShowStatus)
return FALSE;
m_ptCurrent = rCurrentPoint;
m_bShowStatus = TRUE;
// show tool tip
DisplayToolTip(rCurrentPoint);
return TRUE;
}
void CToolTip2::DisplayToolTip(const CPoint& rCurrentPoint)
{
CDC* pDC = GetDC();
CBrush *pOldBrush;
CFont *pOldFont;
pOldFont = pDC->SelectObject(&m_font);
CSize size = pDC->GetTextExtent(m_szText);
pDC->LPtoDP(&size);
// form tooltip rectangle
CRect rectToolTip(rCurrentPoint.x, rCurrentPoint.y,
rCurrentPoint.x+size.cx+7, rCurrentPoint.y+size.cy+2);
// draw Tooltip Rect and Text
pDC->SetBkMode(TRANSPARENT);
CBrush brushToolTip(GetSysColor(COLOR_INFOBK));
pOldBrush = pDC->SelectObject(&brushToolTip);
// Create and select thick black pen
CPen penBlack(PS_SOLID, 0, COLORREF(RGB(0, 0, 0)));
CPen* pOldPen = pDC->SelectObject(&penBlack);
// draw rectangle filled with COLOR_INFOBK
pDC->Rectangle(0,0,rectToolTip.Width(),rectToolTip.Height());
// draw tooltip text
pDC->SetTextColor( GetSysColor(COLOR_INFOTEXT) );//Tool Tip color set in
// control panel settings
pDC->SetTextAlign(TA_LEFT);
pDC->TextOut(3,1, m_szText);
CRect rectWnd = rectToolTip;
m_pParentWnd->ClientToScreen(rectWnd); // Convert from client to screen
CPoint ptToolTipLeft = rectWnd.TopLeft();
// now display tooltip
SetWindowPos(&wndTop,ptToolTipLeft.x+1, ptToolTipLeft.y+1, rectWnd.Width(),
rectWnd.Height(),SWP_SHOWWINDOW¦SWP_NOOWNERZORDER¦SWP_NOACTIVATE);
// put back old objects
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldFont);
ReleaseDC(pDC);
}
相关文章推荐
- 2011-12-02 08:41 MFC添加鼠标移动到控件上时的提示信息
- 自己封装个dialog,满足一下报错信息的提示
- 今天要为自己的网站添加一个动态检索信息的下拉提示框,这个是在网上找的例子。
- MFC添加鼠标移动到控件上时的提示信息
- MFC树控件CTreeCtrl中为每个item节点动态添加提示信息,并定时更新提示内容
- MFC添加鼠标移动到控件上时的提示信息
- OWA或Messenger样式的信息提示窗口——编写ASP.NET AJAX Extender控件(中):封装成服务器端控件
- 自己封装的jar,提示信息乱码
- OWA或Messenger样式的信息提示窗口——编写ASP.NET AJAX Extender控件(中):封装成服务器端控件
- 封装自己的js提示信息jtip办法
- 添加鼠标悬浮在控件上的提示信息 很齐全各种方法 MFC ToolTipCtl
- MFC-为子窗体/子窗口的静态控件的特定位置/区域 增加提示/tips信息 使用自绘方法
- C#中怎样在Button控件上添加提示语,让鼠标经过按钮时显示提示信息!
- 给某个标签,添加事件(onclick、change等事件),有两种,1在html标签中直接加上事件 2在页面加载完成后,在ready函数中给标签添加事件,特别是对于自己封装的控件如box,一般都是用2
- 为一个text 控件添加一个样式,用于提示输入信息
- 博客园随笔添加自己的版权信息 [转]
- 给删除控件添加确认信息
- 自定义编辑框VC,可加载更改字体,添加背景图片,显示输入提示信息
- 如何在异常中添加自己想要的信息
- 给MFC对话框控件添加工具提示Tips