网上找到一个CToolTip2类,研究了一下,把使用方法总结一下 .
MyView.h中定义 CToolTip2 m_ToolTip;
在MyView.cpp中,可以在OnCreate(LPCREATESTRUCT lpCreateStruct) 中写上这么一句,m_ToolTip.Create(this);
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CScrollView::OnCreate(lpCreateStruct) == -1)
return -1;
m_ToolTip.Create(this);
return 0;
}
然后在你想要出现提示的时候写下
m_ToolTip.SetText(" 写上你的提示字符串");
m_ToolTip.Show(point); //point是将出现提示的位置
当你不想提示的时候
m_ToolTip.Close();
///
以下是CToolTip2 源程序
/**
ToolTip2 .h
*/
//File: CToolTip2.h
//Header file for class CToolTip2
//Copyright (C) 2000 Dhandapani Ammasai( dammasai@hotmail.com )
//Mail your comments, criticism, bugs to the above e-mail address.
#ifndef _TOOL_TIP_2_H_
#define _TOOL_TIP_2_H_
#include "stdafx.h"
class CToolTip2 : public CWnd
{
DECLARE_DYNAMIC( CToolTip2 );
private: //data members
//Tooltip Text
CString m_szText;
//Parent Window
CWnd* m_pParentWnd;
//Show Status
BOOL m_bShowStatus;
//Current point where tooltip is displayed
CPoint m_ptCurrent;
//Font
CFont m_font;
private: //Methods
//Display Tooltip Window
void DisplayToolTip(const CPoint& rCurrentPoint);
//Copy constructor
CToolTip2(const CToolTip2&);
//Assignment operator
CToolTip2& operator=(const CToolTip2&);
public: //Methods
//Default Constructor
CToolTip2();
//Destructor
~CToolTip2();
//Create tootip
BOOL Create(CWnd* pParentWnd);
//Set tooltip text
void SetText(const CString&);
//Show the tooltip
BOOL Show(const CPoint&);
//Close the tooltip
void Close();
protected:
// Generated message map functions
//{{AFX_MSG(CToolTip2)
afx_msg void OnPaint();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
#endif
/**
ToolTip2 .cpp
*/
//File: ToolTip2.cpp
//Implementation file for class CToolTip2
//Copyright (C) 2000 Dhandapani Ammasai( dammasai@hotmail.com )
//Mail your comments, criticism, bugs to the above e-mail address.
#include "stdafx.h"
#include "tooltip2.h"
IMPLEMENT_DYNAMIC( CToolTip2, CWnd );
BEGIN_MESSAGE_MAP(CToolTip2, CWnd)
//{{AFX_MSG_MAP(CToolTip2)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//Default Constructor
CToolTip2::CToolTip2()
{
m_szText = "";
m_pParentWnd = NULL;
m_bShowStatus = FALSE;
}
//Destructor
CToolTip2::~CToolTip2()
{
}
//Create Tool Tip
BOOL CToolTip2::Create(CWnd* pParentWnd)
{
ASSERT(this != NULL );
ASSERT(pParentWnd != NULL);
m_pParentWnd = pParentWnd;
//Create font
m_font.CreateFont(15, 0, 0, 0, FW_REGULAR, 0, 0, 0, 0, 0, 0, 0, 0, "MS Sans Serif");
CRect rectInitialSize(0,0,0,0);//Initial Window size. Will be dynamically changed later.
return CreateEx(NULL, NULL, NULL,WS_POPUP | WS_CHILD | WS_CLIPSIBLINGS,
rectInitialSize,pParentWnd, NULL, NULL);
}
//Set tooltip text
void CToolTip2::SetText(const CString& rsText)
{
ASSERT(this != NULL );
m_szText = rsText;
m_szText.TrimRight();
}
//Show tooltip
//rCurrentPoint specifies current mouse position and it is in client
//coordinates of parent window(Not in screen coordinates).
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;
}
//Close the tooltip
void CToolTip2::Close()
{
ASSERT(this != NULL );
ASSERT(m_hWnd != NULL );
ShowWindow(SW_HIDE); //Hide tooltip
m_bShowStatus = FALSE;
}
void CToolTip2::OnPaint()
{
CPaintDC dc(this);
DisplayToolTip(m_ptCurrent);
}
//Display tooltip
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 coordinates
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);
}