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

📄 buttonxp.cpp

📁 运用神经网络证据理论数据融合等算法实现设备的故障诊断
💻 CPP
字号:
// ButtonXp.cpp : implementation file
//

#include "stdafx.h"
#include "PreAlarm.h"
#include "ButtonXp.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CButtonXp

CButtonXp::CButtonXp()
{
}

CButtonXp::~CButtonXp()
{
}


BEGIN_MESSAGE_MAP(CButtonXp, CButton)
	//{{AFX_MSG_MAP(CButtonXp)
	ON_WM_MOUSEMOVE()
	ON_MESSAGE(WM_MOUSELEAVE,OnMouseOut)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CButtonXp message handlers

void CButtonXp::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
{
	// TODO: Add your code to draw the specified item
	CDC	*pDC =CDC::FromHandle(lpDIS->hDC);

	CRect	rtControl(lpDIS->rcItem);

	CPen	pen,*old_pen;
	CBrush	brush,*old_brush;
	CString  strText;
	
	HFONT hOldFont = (HFONT)pDC->SelectObject ((HFONT)::GetStockObject (DEFAULT_GUI_FONT));

	UINT	state =lpDIS->itemState;

	if(state & ODS_FOCUS)
	{
		rtControl.DeflateRect(1,1);	//拥有焦点矩形变小
	}

	if((state & ODS_DISABLED) ||
		(!MouseOver() &&!(state & ODS_SELECTED)))
	{
		//普通状态、禁用、拥有焦点三种情况下
		pen.CreatePen (PS_SOLID, 1, ::GetSysColor(COLOR_3DSHADOW));
		brush.CreateSolidBrush(HLS_TRANSFORM(::GetSysColor(COLOR_3DFACE),-10,0));
	}
	else
	{
		COLORREF	crBorder =::GetSysColor(COLOR_HIGHLIGHT);

		pen.CreatePen(PS_SOLID, 1, crBorder);

		if( state & ODS_SELECTED)
		{
			//按钮按下时
			brush.CreateSolidBrush(HLS_TRANSFORM(crBorder,+50,-50));
			
			pDC->SetTextColor(RGB(240,240,240));
		}
		else
		{
			//鼠标在区域内	
			brush.CreateSolidBrush(HLS_TRANSFORM(crBorder,+80,-66));
			pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));
		}
	}

	if(state &ODS_DISABLED)
		pDC->SetTextColor(::GetSysColor(COLOR_GRAYTEXT));//灰色字:禁用状态
	else if(state & ODS_SELECTED)
		pDC->SetTextColor(RGB(240,240,240));	//白色字:PUSH状态
	else if(MouseOver())	
		pDC->SetTextColor(0);	//黑色字:热感应状态
	else
		pDC->SetTextColor(::GetSysColor(COLOR_BTNTEXT));	//黑色字:普通状态	

	old_brush=pDC->SelectObject(&brush);
	old_pen  =pDC->SelectObject(&pen);

	pDC->Rectangle(rtControl);
	pDC->SetBkMode(TRANSPARENT);
	GetWindowText(strText);
	pDC->DrawText(strText,rtControl,DT_SINGLELINE|DT_CENTER|DT_VCENTER);


	if(state & ODS_FOCUS)
	{
		rtControl.DeflateRect(3,3);
		pDC->DrawFocusRect(rtControl);
	}

	pDC->SelectObject(old_pen);
	pDC->SelectObject(old_brush);
	pDC->SelectObject(hOldFont);
}

void CButtonXp::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bOver ==FALSE)
	{
		//鼠标在按钮之上
		m_bOver =TRUE;

		//按钮重绘
		InvalidateRect(NULL,FALSE);

		//跟踪鼠标
		//当鼠标离开按钮区域会收到WM_MOUSELEAVE,该消息直接调用OnMouseOut()
		TRACKMOUSEEVENT	tme;
		tme.cbSize =sizeof(TRACKMOUSEEVENT);
		tme.dwFlags =TME_LEAVE;
		tme.dwHoverTime=0;
		tme.hwndTrack =m_hWnd;
		::TrackMouseEvent(&tme);
	}
	CButton::OnMouseMove(nFlags, point);
}

void CButtonXp::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
	ModifyStyle(0,BS_OWNERDRAW);

	CButton::PreSubclassWindow();
}
/////////////////////////////////////////////////////
//返回鼠标是否在按钮区域内
BOOL CButtonXp::MouseOver()
{
	return m_bOver;
}
void CButtonXp::OnMouseOut ()
{
	//鼠标已离开按钮区域
    m_bOver =FALSE;

	//重绘按钮
	InvalidateRect(NULL,FALSE);
	
}

⌨️ 快捷键说明

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