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

📄 buttonst.cpp

📁 是本人编写的串行通信的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// ButtonST.cpp : implementation file
//

#include "stdafx.h"
//#include "cnoseeyestation.h"
#include "ButtonST.h"

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

/////////////////////////////////////////////////////////////////////////////
// CButtonST

CButtonST::CButtonST()
{
	m_MouseOnButton=FALSE;
	m_hIconIn=NULL;
	m_hIconOut=NULL;
	m_cxIcon=0;
	m_cyIcon=0;
	m_bIsFlat=TRUE;
	m_bDrawBorder=TRUE;
	m_nAlign=4/*ST_ALIGN_VERT*/;
	m_bShowText=TRUE;
	m_bDrawFlatFocus=FALSE;
	m_IsDefault=FALSE;
//	bIsDisabled=FALSE;//注意其用法

    m_ToolTip.m_hWnd=NULL;
	m_bDrawTransparent=FALSE;
//	m_pbmpOldBk=NULL;
	m_bIsDefault=FALSE;

}

CButtonST::~CButtonST()
{
//	if(m_dcBK.m_hDC!=NULL && m_pbmpOldBk!=NULL)
//		m_dcBK.SelectObject(m_pbmpOldBk);
	if(m_hIconIn!=NULL) ::DeleteObject(m_hIconIn);
	if(m_hIconOut!=NULL) ::DeleteObject(m_hIconOut);

}


BEGIN_MESSAGE_MAP(CButtonST, CButton)
	//{{AFX_MSG_MAP(CButtonST)
	ON_WM_CAPTURECHANGED()
	ON_WM_KILLFOCUS()
	ON_WM_MOUSEMOVE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CButtonST message handlers
void CButtonST::ActivateTooltip(BOOL bEnable)
{
  if(m_ToolTip.GetToolCount()==0)
	  return;
  m_ToolTip.Activate(bEnable);
}
void CButtonST::SetIcon(UINT nIconInId,UINT nIconOutId )
{
 //HINSTANCE hInstResourse=AfxFindResourceHandle(MAKEINTRESOURCE(nIconInId),RT_GROUP_ICON);
 //m_hIconIn=(HICON)::LoadImage(hInstResourse,MAKEINTRESOURCE(nIconInId),IMAGE_ICON,0,0,0);
 //m_hIconOut=(nIconOutId==NULL)?m_hIconIn:(HICON)::LoadImage(hInstResourse,MAKEINTRESOURCE(nIconOutId),IMAGE_ICON,0,0,0);
		m_hIconIn=(HICON)::LoadImage(
		AfxGetResourceHandle(),
		MAKEINTRESOURCE(nIconInId),
		IMAGE_ICON,
		0,0,
		LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
        if(nIconOutId==NULL)
			m_hIconOut=m_hIconIn;
		else
					m_hIconOut=(HICON)::LoadImage(
		AfxGetResourceHandle(),
		MAKEINTRESOURCE(nIconOutId),
		IMAGE_ICON,
		0,0,
		LR_CREATEDIBSECTION|LR_LOADMAP3DCOLORS);
 ICONINFO ii;
 ZeroMemory(&ii,sizeof(ICONINFO));
 ::GetIconInfo(m_hIconOut,&ii);
 m_cxIcon=(BYTE)(ii.xHotspot*2);
 m_cyIcon=(BYTE)(ii.yHotspot*2);

}
void CButtonST::SetFlat( BOOL bState)
{
  m_bIsFlat=bState;
  Invalidate();
}
BOOL CButtonST::GetFlat()
{
  return m_bIsFlat;
}
void CButtonST::SetAlign(int nAlign)
{
 /* switch(nAlign)
  {
  case ST_ALIGN_HORIZ:
	   m_nAlign=ST_ALIGN_HORIZ;
  case ST_ALIGN_VERT:
	   m_nAlign=ST_ALIGN_VERT;
	   break;
  }*/
	m_nAlign=nAlign;
  Invalidate();
}
int CButtonST::GetAlign()
{
  return m_nAlign;
}
void CButtonST::DrawBorder(BOOL bEnable)
{
 m_bDrawBorder=bEnable;
}
void CButtonST::SetShowText(BOOL bShow)
{
 m_bShowText=bShow;
 Invalidate();
}
BOOL CButtonST::GetShowText()
{
 return m_bShowText;
}
BOOL CButtonST::GetDefault()
{
 return m_bIsDefault;
}
void CButtonST::SetInactiveBgColor(COLORREF crNew,BOOL bRepaint)
{
  m_crInactiveBg=crNew;
  if(bRepaint)
	  Invalidate();
}

void CButtonST::SetDefaultInactiveBgColor(BOOL bRepaint)
{
	m_crInactiveBg=::GetSysColor(COLOR_BTNFACE);
	if(bRepaint==TRUE) Invalidate();
}
const COLORREF CButtonST::GetInactiveBgColor()
{  
  return m_crInactiveBg;
}
void CButtonST::SetDefaultActiveBgColor(BOOL bRepaint)
{
	m_crActiveBg=::GetSysColor(COLOR_BTNFACE);
	if(bRepaint) Invalidate();
}
void CButtonST::SetActiveBgColor(COLORREF crNew,BOOL bRepaint)
{
 m_crActiveBg=crNew;
 if(bRepaint==TRUE)
	 Invalidate();
}
const COLORREF CButtonST::GetActiveBgColor()
{
 return m_crActiveBg;
}
void CButtonST::DrawTheIcon(CDC *pDC,CString *title,RECT *rcItem,CRect *captionRect,BOOL IsPressed,BOOL IsDisabled)
{
  CRect * iconRect=(CRect *)rcItem,textRect;
  textRect=(CRect)captionRect;
  switch(m_nAlign)
  {
  case ST_ALIGN_HORIZ:
	  if(title->IsEmpty())
	  {
	   iconRect->left+=((iconRect->Width()-m_cxIcon)/2);

	  }
	  else
	  {
	   iconRect->left+=3;
	   captionRect->left+=m_cxIcon+3;
	   //iconRect
	  }
	  iconRect->top+=((iconRect->Height()-m_cyIcon)/2);
	  break;
  case ST_ALIGN_VERT:
	  iconRect->left+=((iconRect->Width()-m_cxIcon)/2);
	  textRect.left+=iconRect->left;
	  if(title->IsEmpty())
		 iconRect->top+=((iconRect->Height()-m_cyIcon)/2);
	  else
	  {
		  textRect.top+=m_cyIcon;
		  captionRect->top+=m_cyIcon;
	  }
	  break;
	 // ResizeRect((CRect)iconRect);
	  CString str;
      GetWindowText(str);
	  if(IsPressed) iconRect->OffsetRect(1,1);
  ::DrawIconEx(HDC(*pDC),iconRect->left,iconRect->top,m_hIconIn,m_cxIcon,m_cyIcon,0,0,DI_NORMAL);
  pDC->DrawText(str,&textRect,DT_SINGLELINE|DT_CALCRECT);
  pDC->DrawState(iconRect->TopLeft(),iconRect->Size(),(m_MouseOnButton==TRUE || IsPressed) ? m_hIconIn:m_hIconOut,
	  (IsDisabled ? DSS_DISABLED: DSS_NORMAL),(CBrush *)NULL); 

  }
}

void CButtonST::SetDefaultActiveFgColor(BOOL bRepaint)
{
	m_crActiveFg=::GetSysColor(COLOR_BTNTEXT);
	if(bRepaint==TRUE)  Invalidate();

}
void CButtonST::SetActiveFgColor(COLORREF crNEW,BOOL bRepaint)
{
  m_crActiveFg=crNEW;
  if(bRepaint==TRUE)
	  Invalidate();
}
const COLORREF CButtonST::GetActiveFgColor()
{
  return m_crActiveFg;
}

void CButtonST::SetDefaultInactiveFgColor(BOOL bRepaint)
{
	m_crInactiveFg=::GetSysColor(COLOR_BTNTEXT);
	if(bRepaint==TRUE) Invalidate();
}
void CButtonST::SetInactiveFgColor(COLORREF crNew,BOOL bRepaint)
{
 m_crInactiveFg=crNew;
 if(bRepaint==TRUE) Invalidate();
}
const COLORREF CButtonST::GetInactiveFgColor()
{
 return m_crInactiveFg;
}
void CButtonST::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
	CDC *pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
	CPen *pOldPen=NULL/*(PS_SOLID,0,GetSysColor(COLOR_BTNHILIGHT))*/;
	//pOldPen->CreateStockObject(
	BOOL bIsPressed=(lpDrawItemStruct->itemState & ODS_SELECTED);
	BOOL bIsFocused=(lpDrawItemStruct->itemState & ODS_FOCUS);
	BOOL bIsDisabled=(lpDrawItemStruct->itemState & ODS_DISABLED);
	CRect itemRect=lpDrawItemStruct->rcItem;
	if(m_bIsFlat==FALSE)
	{
	 if(bIsFocused || (GetDefault()==TRUE))
	 {
	   CBrush br(RGB(0,0,0));
	   pDC->FrameRect(&itemRect,&br);
	   itemRect.DeflateRect(1,1);

	 }
	}
	COLORREF bgColor;
	if((m_MouseOnButton==TRUE)||(bIsPressed))
	{
	  bgColor=GetActiveBgColor();

	}
	else
		bgColor=GetInactiveBgColor();
	CBrush br(bgColor);
	pDC->FillRect(&itemRect,&br);
	if(bIsPressed)
	{
	 if(m_bIsFlat)
	 {
	  if(m_bDrawBorder)
	  {//深灰色线,画按钮的左上部分
	   CPen penBtnHiLight(PS_SOLID,0,GetSysColor(COLOR_BTNHILIGHT));
	   CPen penBtnShadow(PS_SOLID,0,GetSysColor(COLOR_BTNSHADOW));
	   pDC->SelectObject(&penBtnShadow);
	   pDC->MoveTo(itemRect.left,itemRect.bottom-1);
	   pDC->LineTo(itemRect.left,itemRect.top);
	   pDC->LineTo(itemRect.right,itemRect.top);
        //白色线,画按钮的右下部分
	   pDC->SelectObject(&penBtnHiLight);
	   pDC->MoveTo(itemRect.left,itemRect.bottom-1);
	   pDC->LineTo(itemRect.right-1,itemRect.bottom-1);
	   pDC->LineTo(itemRect.right-1,itemRect.top-1);
	   pOldPen=pDC->SelectObject(&penBtnHiLight);
	   pDC->SelectObject(pOldPen);
	  }
	 }
	else
	{
	 CBrush brBtnShadow(GetSysColor(COLOR_BTNSHADOW));
	 pDC->FrameRect(&itemRect,&brBtnShadow);
	}
	}

	else //绘制未按下的按钮
	{
	  CPen penBtnHiLight(PS_SOLID,0,GetSysColor(COLOR_BTNHILIGHT));//白色
      CPen pen3DLight(PS_SOLID,0,GetSysColor(COLOR_3DLIGHT));//浅灰色
	  CPen penBtnShadow(PS_SOLID,0,GetSysColor(COLOR_BTNSHADOW));//深灰色
	  CPen pen3DDKShadow(PS_SOLID,0,GetSysColor(RGB(0,0,0)));//黑色
	  if(m_bIsFlat==TRUE)
	  {
	   if(m_MouseOnButton==TRUE && m_bDrawBorder==TRUE)
	   {
	    //白线,画按钮的左上部
		   pOldPen=pDC->SelectObject(&penBtnHiLight);

⌨️ 快捷键说明

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