支持tooltip的CStatic控件

#pragma once

/*
描述:支持tooltip的CStatic控件
作者:kagula
时间:2014-09-03
测试环境:VS2010SP1
使用方式:
[S1]把原CStatic替换为CMyStatic。在资源管理器中确保CStatic的notify属性为TRUE。
[S2]在初始化的时候(例如OnInitDialog),调用SetToolTipText方法即可。
*/
// CMyStatic

class CMyStatic : public CStatic
{
	DECLARE_DYNAMIC(CMyStatic)

public:
	CMyStatic();
	virtual ~CMyStatic();

protected:
	DECLARE_MESSAGE_MAP()
public:
	CString m_szToolTipText;
	CToolTipCtrl m_toolTip;
	void SetToolTipText(const CString &szTip);
	void UpdateToolTipText();

	virtual BOOL PreTranslateMessage(MSG* pMsg);
	virtual void PreSubclassWindow();
	virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
};
// MyStatic.cpp : implementation file
//

#include "stdafx.h"
#include "testCStatic.h"
#include "MyStatic.h"


// CMyStatic

IMPLEMENT_DYNAMIC(CMyStatic, CStatic)

CMyStatic::CMyStatic()
{

}

CMyStatic::~CMyStatic()
{
}


BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
END_MESSAGE_MAP()



// CMyStatic message handlers




BOOL CMyStatic::PreTranslateMessage(MSG* pMsg)
{
	m_toolTip.RelayEvent(pMsg);

	return CStatic::PreTranslateMessage(pMsg);
}


void CMyStatic::PreSubclassWindow()
{
	// Create the Tool Tip.
	CRect rect;
	GetClientRect(rect);
	m_toolTip.Create(this);
	m_toolTip.AddTool(this, m_szToolTipText, rect, GetDlgCtrlID());
	m_toolTip.Activate(TRUE);
	EnableToolTips(TRUE);

	CStatic::PreSubclassWindow();
}

void CMyStatic::SetToolTipText(const CString &szTip)
{
	m_szToolTipText = szTip;
	UpdateToolTipText();
	return;
}

void CMyStatic::UpdateToolTipText()
{
	if (::IsWindow(GetSafeHwnd()))
	{
		m_toolTip.UpdateTipText(m_szToolTipText, this, GetDlgCtrlID());
	}
	return;
}


INT_PTR CMyStatic::OnToolHitTest(CPoint point, TOOLINFO* pTI) const
{
	pTI->hwnd = m_hWnd;
	pTI->uId = (UINT)m_hWnd;
	pTI->uFlags |= TTF_IDISHWND;
	pTI->lpszText = LPSTR_TEXTCALLBACK;
	return GetDlgCtrlID();

	//return CStatic::OnToolHitTest(point, pTI);
}


你可能感兴趣的:(支持tooltip的CStatic控件)