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

📄 guicheckbox.cpp

📁 这是一个串口监视程序
💻 CPP
字号:
//-----------------------------------------------------------------------//
// This is a part of the GuiLib MFC Extention.							 //	
// Autor  :  Francisco Campos											 //
// (C) 2002 Francisco Campos <www.beyondata.com> All rights reserved     //
// This code is provided "as is", with absolutely no warranty expressed  //
// or implied. Any use is at your own risk.								 //		
// You must obtain the author's consent before you can include this code //
// in a software library.												 //
// If the source code in  this file is used in any application			 //
// then acknowledgement must be made to the author of this program		 //	
// fco_campos@tutopia.com													 //
//-----------------------------------------------------------------------//

#include "stdafx.h"
#include "..\header\GuiCheckBox.h"

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

/////////////////////////////////////////////////////////////////////////////
// CGuiCheckBox

CGuiCheckBox::CGuiCheckBox()
{
	m_bCheckBtn=FALSE;
	m_bPressBtn=FALSE;
	m_bOldTemp=FALSE;
	m_clrHigh=::GetSysColor(COLOR_HIGHLIGHT);
	m_clrCheck=RGB(0,170,170);
	m_bSelected=FALSE;
}

CGuiCheckBox::~CGuiCheckBox()
{
}


BEGIN_MESSAGE_MAP(CGuiCheckBox, CButton)
	//{{AFX_MSG_MAP(CGuiCheckBox)
	ON_WM_ERASEBKGND()
	ON_WM_CREATE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_TIMER()
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGuiCheckBox message handlers



void CGuiCheckBox::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
	CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
	CRect m_rcClient=lpDrawItemStruct->rcItem;
	UINT m_State=lpDrawItemStruct->itemState;
	CBrush cb;
	CRect m_rcTemp=m_rcClient;
	CPoint pt;
	CSize  m_Csize;
	CString m_szCaption;
	COLORREF m_Over=RGB(255,193,111);
	CPen cpOver(PS_SOLID,1,RGB(255,193,111));
	int iMode=pDC->SetBkMode(TRANSPARENT);
	int iExtile=GetButtonStyle(); //obtenemos orientaci髇 del texto
	CRect m_rcText=m_rcClient;
	GetWindowText(m_szCaption);
	if(m_szCaption.GetLength() > 1)
		m_Csize= pDC->GetTextExtent(m_szCaption);
	//de acuerdo a la alineaci髇 del texto prepare la ubicaci髇
	//del texto para Drawtex y DrawState
	if (m_rcClient.Height() > 13)
	{
		int Dif=m_rcClient.Height()-13;
		Dif/=2;
		m_rcTemp.top=Dif;
		m_rcTemp.bottom=m_rcTemp.top+13;
	}
	if (iExtile & BS_LEFTTEXT)
	{
		m_rcTemp.left=	m_rcTemp.right-13;
		pt=CPoint(m_rcTemp.left,m_rcTemp.top+1);
	}
	else
	{
		m_rcTemp.right=	m_rcTemp.left+13;
		pt=CPoint(m_rcTemp.right+2,m_rcTemp.top+1);
		m_rcText.left=m_rcTemp.right+1;
	}

	//draw frame of checkbox
	pDC->Draw3dRect(m_rcTemp,m_clrHigh,m_clrHigh);
	m_rcTemp.DeflateRect(1,1);
	DrawOrange(pDC,m_rcTemp);
	m_rcTemp.DeflateRect(1,1);
	if (lpDrawItemStruct->itemState & ODS_DISABLED)
	   pDC->DrawState(pt, m_Csize, m_szCaption, DSS_DISABLED, TRUE, 0, (HBRUSH)NULL);
	else 
	{
		pDC->DrawText(m_szCaption,m_rcText,DT_SINGLELINE|DT_LEFT|DT_VCENTER);			   		
		if(lpDrawItemStruct->itemState & ODS_SELECTED)
			{
				   if (m_bOldTemp == TRUE)
						DrawCheck(pDC,m_rcTemp);
			}
		else
		{
			  if (m_bCheckBtn==TRUE && m_bPressBtn==FALSE)
				      DrawCheck(pDC,m_rcTemp);
			  else
			  {
				 if (m_bOldTemp == TRUE && m_bPressBtn==TRUE)
						DrawCheck(pDC,m_rcTemp);
			  }
			
		}

		
		
	}
	
}


void CGuiCheckBox::DrawCheck(CDC* pDC,CRect m_rcTemp)
{
	int iMediaAltura=(m_rcTemp.Height()/2)-2;
	int iMedioBox= m_rcTemp.Width()/2;
	CPen cp(PS_SOLID,1,m_clrCheck);
	CPen *pOld=pDC->SelectObject(&cp);
	pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+3);
	pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-2);
	pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-2);
	pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top+2);
				
	pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+2);
	pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-3);
	pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-3);
	pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top+1);

	pDC->MoveTo(m_rcTemp.left+1,m_rcTemp.top+iMediaAltura+1);
	pDC->LineTo(m_rcTemp.left+3,m_rcTemp.bottom-4);
	pDC->MoveTo(m_rcTemp.left+3,m_rcTemp.bottom-4);
	pDC->LineTo(m_rcTemp.right-1,m_rcTemp.top);
	pDC->SelectObject(pOld);
}

BOOL CGuiCheckBox::PreTranslateMessage(MSG* pMsg)
{
	return CButton::PreTranslateMessage(pMsg);
}

void CGuiCheckBox::PreSubclassWindow()
{
	ModifyStyle(0,BS_OWNERDRAW);
	CButton::PreSubclassWindow();
}
	


BOOL CGuiCheckBox::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
		return FALSE;
	
}

int CGuiCheckBox::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CButton::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	
	return 0;
}

void CGuiCheckBox::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CButton::OnLButtonDown(nFlags, point);
	m_bPressBtn=TRUE;
	m_bOldTemp=m_bCheckBtn;
	Invalidate();
	UpdateWindow();
	KillTimer(1);
	SetTimer(1,10,NULL);
	

}

void CGuiCheckBox::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CButton::OnLButtonUp(nFlags, point);
	CRect m_rect;
	GetClientRect(&m_rect);
	if (m_rect.PtInRect(point))
	{
		if (m_bCheckBtn==TRUE)
		 m_bCheckBtn=FALSE;
		else 
		 m_bCheckBtn=TRUE;
		m_bOldTemp=m_bCheckBtn;
		m_bPressBtn=FALSE;
		m_bSelected =FALSE;	
		KillTimer(1);
			SetTimer(1,100,NULL);
		Invalidate();
		UpdateWindow();
	}
	
	
}


void CGuiCheckBox::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CRect m_rect;
	GetClientRect(&m_rect);
	CPoint pt(GetMessagePos());
	ScreenToClient(&pt);
	if (!m_rect.PtInRect(pt))
	{
		m_bPressBtn=TRUE;
		m_bSelected =FALSE;
		Invalidate();
		UpdateWindow();
		KillTimer(1);
	}	
	CButton::OnTimer(nIDEvent);
}

void CGuiCheckBox::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CRect m_rect;
	GetClientRect(&m_rect);
	if (m_bSelected == TRUE) return;
	if (m_rect.PtInRect(point))
	{
		m_bSelected =TRUE;
		Invalidate();
		UpdateWindow();
		SetTimer(1,100,NULL);
		}
	CButton::OnMouseMove(nFlags, point);
}


void CGuiCheckBox::DrawOrange(CDC* pDC,CRect m_rcTemp)
{
	if (m_bSelected== TRUE)
	{
		for(int i=0;i<2; i++)
			{
				COLORREF m_Over=RGB(255,193+(i+10),111+(i+10));
				pDC->Draw3dRect(m_rcTemp,m_Over,m_Over);
				m_rcTemp.DeflateRect(1,1);
			}
			m_rcTemp.InflateRect(2,2);
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top+2,::GetSysColor(COLOR_3DHIGHLIGHT));
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top+3,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top+4,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top+5,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top+6,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+2,m_rcTemp.top,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+3,m_rcTemp.top,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+4,m_rcTemp.top,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left+5,m_rcTemp.top,RGB(255,220,185));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top,RGB(254,225,158));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+1,RGB(255,255,255));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+2,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+3,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+4,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+5,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+6,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+7,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+8,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+9,RGB(255,243,217));
			
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top,RGB(254,255,255));
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left+2,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left+3,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left+4,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left+5,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left+6,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left+7,m_rcTemp.top,RGB(255,243,217));
			pDC->SetPixel(m_rcTemp.left,m_rcTemp.top+1,RGB(254,255,255));
			pDC->SetPixel(m_rcTemp.left+1,m_rcTemp.top+1,RGB(254,220,139));
			pDC->SetPixel(m_rcTemp.left+2,m_rcTemp.top+1,RGB(254,220,139));
			pDC->SetPixel(m_rcTemp.left+3,m_rcTemp.top+1,RGB(254,220,139));
			pDC->SetPixel(m_rcTemp.left+4,m_rcTemp.top+1,RGB(254,220,139));
			pDC->SetPixel(m_rcTemp.left+5,m_rcTemp.top+1,RGB(254,220,139));
			pDC->SetPixel(m_rcTemp.left+6,m_rcTemp.top+1,RGB(254,220,139));
			pDC->SetPixel(m_rcTemp.left+7,m_rcTemp.top+1,RGB(254,220,139));
			
	}else
	{ 
			  CBrush cbSelec;
			  cbSelec.CreateSysColorBrush(COLOR_3DHILIGHT);
			  pDC->FillRect(m_rcTemp,&cbSelec);

	}

}

⌨️ 快捷键说明

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