📄 mystatic.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 + -