mfc的View上显示提示信息的做法

    网上找到一个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);
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值