⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mystatic.cpp

📁 随着计算机信息技术的飞速发展
💻 CPP
字号:
// MyStatic.cpp : 实现文件
//

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

// CMyStatic
HCURSOR	CMyStatic::m_hCursorLink=0;

IMPLEMENT_DYNAMIC(CMyStatic, CStatic)
CMyStatic::CMyStatic()
{	
}

CMyStatic::CMyStatic(HWND hWnd)
{
	m_bLoadCursor=0;
	m_bHover=0;
	m_hParent=hWnd;
}

CMyStatic::~CMyStatic()
{
}

BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
	ON_CONTROL_REFLECT(STN_CLICKED, OnStnClicked)
	ON_WM_SETCURSOR()
	ON_WM_NCHITTEST()
	ON_WM_CTLCOLOR_REFLECT()
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

// CMyStatic 消息处理程序

int CMyStatic::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CStatic::OnCreate(lpCreateStruct) == -1)
		return -1;

	// TODO:  在此添加您专用的创建代码
	GdiplusStartup(&m_GdiplusToken,&m_GdiplusStart,0);

	return 0;
}

void CMyStatic::OnDestroy()
{
	CStatic::OnDestroy();

	// TODO: 在此添加消息处理程序代码
	GdiplusShutdown(m_GdiplusToken);
}

void CMyStatic::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	// TODO:  添加您的代码以绘制指定项
	RECT rcItem=lpDrawItemStruct->rcItem;
	UINT CtlID=lpDrawItemStruct->CtlID;
	HDC hDC=lpDrawItemStruct->hDC;
	Graphics graph(hDC);
	TCHAR tip[80];
	
	USES_CONVERSION;
	SolidBrush brush(Color(255,0,0,0));
	FontFamily family(L"宋体");
	Font font(&family,16,FontStyleBold,UnitPixel);
	PointF pos(0.0f,0.0f);

	GetWindowText(tip,80);
	brush.SetColor(Color(255,168,182,128));
	if(0x3001<=CtlID&&CtlID<=0x3010)
	{
		pos.X=1.0f*rcItem.left;
		pos.Y=1.0f*rcItem.top;
		graph.DrawString(T2W(tip),-1,&font,pos,&brush);
	}
}

BOOL CMyStatic::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(0==m_hCursorLink)
	{
		if(!m_bLoadCursor)
		{
			//光标定义在winuser.h中
			m_hCursorLink=AfxGetApp()->LoadOEMCursor(32649); //OCR_HAND
			m_bLoadCursor=1;
		}
	}

	if(m_hCursorLink)
	{
		::SetCursor(m_hCursorLink);
		return(1);
	}

	return(0);
//	return CStatic::OnSetCursor(pWnd, nHitTest, message);
}

UINT CMyStatic::OnNcHitTest(CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	return(HTCLIENT);
//	return CStatic::OnNcHitTest(point);
}

HBRUSH CMyStatic::CtlColor(CDC* pDC, UINT nCtlColor)
{
	// TODO:  在此更改 DC 的任何属性

	// TODO:  如果不应调用父级的处理程序,则返回非空画笔
	pDC->SetBkMode(TRANSPARENT);
	return((HBRUSH)GetStockObject(NULL_BRUSH));
//	return NULL;
}

void CMyStatic::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(!m_bHover)
	{
		m_bHover=1;
		InitTrackEvent(m_hWnd,TME_LEAVE);
		DrawText(1);
	}

	CStatic::OnMouseMove(nFlags, point);
}

BOOL CMyStatic::InitTrackEvent(HWND hWnd,DWORD flags)
{
	TRACKMOUSEEVENT tme;
	BOOL br;

	ZeroMemory(&tme,sizeof(TRACKMOUSEEVENT));
	tme.cbSize=sizeof(TRACKMOUSEEVENT);
	tme.dwFlags=flags;
	tme.hwndTrack=hWnd;
	tme.dwHoverTime=HOVER_DEFAULT;
	br=TrackMouseEvent(&tme);

	return(br);
}

void CMyStatic::DrawText(BOOL bHighLight)
{
	USES_CONVERSION;
	HDC hDC=::GetDC(m_hWnd);
	Graphics graph(hDC);

	FontFamily family(L"宋体");
	PointF pos(0.0f,0.0f);
	REAL length,height;
	TCHAR tip[80];
	RECT rcItem;
	
	GetClientRect(&rcItem);
	GetWindowText(tip,80);
	pos.X=1.0f*rcItem.left;
	pos.Y=1.0f*rcItem.top;

	if(!bHighLight)
	{
		Font font(&family,16,FontStyleBold,UnitPixel);
		SolidBrush brush(Color(255,168,182,128));
		Pen pen(Color(255,255,255,255),1);
		length=font.GetSize()*lstrlen(tip);
		height=font.GetHeight(&graph);

		PointF pt0(3.0f,height-3.0f);
		PointF pt1(length-3.0f,height-3.0f);
		graph.DrawLine(&pen,pt0,pt1);
		graph.DrawString(T2W(tip),-1,&font,pos,&brush);
	}
	else //(1==bHighLight)
	{
		Font font(&family,16,FontStyleBold|FontStyleUnderline,UnitPixel);
		SolidBrush brush(Color(255,204,153,255));
		graph.DrawString(T2W(tip),-1,&font,pos,&brush);
	}

	::ReleaseDC(m_hWnd,hDC);
	hDC=0;
}

LRESULT CMyStatic::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	// TODO: 在此添加专用代码和/或调用基类
	if(WM_MOUSELEAVE==message) 
	{
		m_bHover=0;
		DrawText(0);
	}

	return CStatic::WindowProc(message, wParam, lParam);
}

void CMyStatic::OnStnClicked()
{	
	// TODO: 在此添加控件通知处理程序代码
	LONG_PTR CtrlID;
	TCHAR tip[80];

	GetWindowText(tip,80);
	CtrlID=GetWindowLongPtr(m_hWnd,GWL_ID);
	::SendMessage(m_hParent,WM_CLICKTEXT,(WPARAM)tip,(LPARAM)CtrlID);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -