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

📄 buttonst.cpp

📁 本程序是一个最近邻分类算法的演示程序
💻 CPP
字号:
// ButtonST.cpp : implementation file
//

#include "stdafx.h"
#include "最近邻法分类器.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_hCursor = NULL;
  m_bShowText = TRUE; 
  m_strToolTip.Empty();
  m_bTracking=FALSE;
   bIsFocused=FALSE;
   flagb=true;
   down=false;
   MOUSEFLAG=false;
   flagv=false;flagT=false;
}

CButtonST::~CButtonST()
{
    
	if (m_hCursor != NULL) ::DestroyCursor(m_hCursor);
}


BEGIN_MESSAGE_MAP(CButtonST, CButton)
	//{{AFX_MSG_MAP(CButtonST)
	ON_WM_MOUSEMOVE()
    ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
	ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CButtonST message handlers


void CButtonST::PreSubclassWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
  CRect rect;
  GetClientRect ( &rect );
  SetButtonStyle(GetButtonStyle() | BS_OWNERDRAW);
  
  
  CButton::PreSubclassWindow();
}

void CButtonST::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	// TODO: Add your code to draw the specified item
  

    CDC  *pdrawDC = CDC::FromHandle(lpDrawItemStruct->hDC);
  CMemDC memDC(pdrawDC);
  CDC  *pDC = &memDC;
  CPen *pOldPen;
  CBrush *pOldBrush;
  BOOL bIsPressed  = (lpDrawItemStruct->itemState & ODS_SELECTED);
  BOOL Focused=(lpDrawItemStruct->itemState & ODS_FOCUS);
  int nSaveDC=pDC->SaveDC();
  if(bIsPressed)
  {bIsFocused=bIsPressed;}
 if(!Focused)
  {bIsFocused=FALSE;}
  //BOOL bIsFocused  = (lpDrawItemStruct->itemState & ODS_FOCUS);
  BOOL bIsDisabled = (lpDrawItemStruct->itemState & ODS_DISABLED);
  CRect itemRect = lpDrawItemStruct->rcItem;
  //COLORREF bgColor(RGB(88,122,187));

    if(down||(!down&&bIsPressed))
	{  
	    down=true;
		CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // Bianco
        CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW));   // Grigio scuro
        CRect rects(itemRect);
		///////////////////////////////////////////////////
       CRect rectst1,rectst2,rectst3,rectst4;
        rectst1.left=rects.left;
        rectst1.top=rects.top;
        rectst1.bottom =rects.bottom;
		rectst1.right=rectst1.left+rects.Width()/4;
        pDC->FillSolidRect(&rectst1, RGB(255, 242, 200));
        rectst2.left=	rectst1.right;
        rectst2.top=rects.top;
        rectst2.bottom =rects.bottom;
		rectst2.right=rectst2.left+rects.Width()/4;
        pDC->FillSolidRect(&rectst2, RGB(255, 238, 196));
        rectst3.left=	rectst2.right;
        rectst3.top=rects.top;
        rectst3.bottom =rects.bottom;
		rectst3.right=rectst3.left+rects.Width()/4;
        pDC->FillSolidRect(&rectst3, RGB(255, 234, 192));
        rectst4.left=	rectst3.right;
        rectst4.top=rects.top;
        rectst4.bottom =rects.bottom;
		rectst4.right=rects.right;
        pDC->FillSolidRect(&rectst4, RGB(255, 230, 189));
     /////////////////////////////////////////////////////////   
		pOldPen = 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);
       
	}
	else
	{
 if(m_MouseOnButton==TRUE)
	{
	
     CRect rects(itemRect);
        CRect rectst1,rectst2,rectst3,rectst4;
        rectst1.left=rects.left;
        rectst1.top=rects.top;
        rectst1.bottom =rects.bottom;
		rectst1.right=rectst1.left+rects.Width()/4;
        pDC->FillSolidRect(&rectst1, RGB(255, 242, 200));
        rectst2.left=	rectst1.right;
        rectst2.top=rects.top;
        rectst2.bottom =rects.bottom;
		rectst2.right=rectst2.left+rects.Width()/4;
        pDC->FillSolidRect(&rectst2, RGB(255, 238, 196));
        rectst3.left=	rectst2.right;
        rectst3.top=rects.top;
        rectst3.bottom =rects.bottom;
		rectst3.right=rectst3.left+rects.Width()/4;
        pDC->FillSolidRect(&rectst3, RGB(255, 234, 192));
        rectst4.left=	rectst3.right;
        rectst4.top=rects.top;
        rectst4.bottom =rects.bottom;
		rectst4.right=rects.right;
        pDC->FillSolidRect(&rectst4, RGB(255, 230, 189));
	 CPen penBtnHiLight(PS_SOLID, 0, GetSysColor(COLOR_BTNHILIGHT)); // White
     CPen pen3DLight(PS_SOLID, 0, GetSysColor(COLOR_3DLIGHT));       // Light gray
     CPen penBtnShadow(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW));   // Dark gray
     CPen pen3DDKShadow(PS_SOLID, 0, GetSysColor(COLOR_3DDKSHADOW)); // Black
	  pOldPen = pDC->SelectObject(&penBtnHiLight);
        pDC->MoveTo(itemRect.left, itemRect.bottom-1);
        pDC->LineTo(itemRect.left, itemRect.top);
        pDC->LineTo(itemRect.right, itemRect.top);
        // Disegno i bordi a destra e in basso
        // Dark gray line
        pDC->SelectObject(penBtnShadow);
        pDC->MoveTo(itemRect.left, itemRect.bottom-1);
        pDC->LineTo(itemRect.right-1, itemRect.bottom-1);
        pDC->LineTo(itemRect.right-1, itemRect.top-1);
        //
        pDC->SelectObject(pOldPen);
	}
	else
	{
	CRect rects(itemRect);
        for(int i=0;i<18;i++)
		{
          rects.top=itemRect.top+i*2;
		  rects.bottom=rects.top+2;
          pDC->FillSolidRect(rects,RGB(189+i,213+i,249));
		}
	}
	}

 	
	TCHAR strText[MAX_PATH + 1];
	::GetWindowText(m_hWnd, strText, MAX_PATH);
	//显示按钮的文本
	if(flagv)
		return;
	if(flagT)
	{
if (strText1!=NULL)
	{
		CFont* hFont = GetFont();
		CFont* hOldFont = pDC->SelectObject(hFont);
		CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
		CPoint pt( itemRect.CenterPoint().x - szExtent.cx / 2, itemRect.CenterPoint().y - szExtent.cy / 2);
		if (bIsPressed&&!down ) 
			pt.Offset(1, 1);
		int nMode = pDC->SetBkMode(TRANSPARENT);
		
		pDC->DrawState(pt, szExtent, strText1, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
		pDC->SelectObject(hOldFont);
		pDC->SetBkMode(nMode);
	}
	}
	else
	{
	if (strText!=NULL)
	{
		CFont* hFont = GetFont();
		CFont* hOldFont = pDC->SelectObject(hFont);
		CSize szExtent = pDC->GetTextExtent(strText, lstrlen(strText));
		CPoint pt( itemRect.CenterPoint().x - szExtent.cx / 2, itemRect.CenterPoint().y - szExtent.cy / 2);
		if (bIsPressed&&!down ) 
			pt.Offset(1, 1);
		int nMode = pDC->SetBkMode(TRANSPARENT);
		
		pDC->DrawState(pt, szExtent, strText, DSS_NORMAL, TRUE, 0, (HBRUSH)NULL);
		pDC->SelectObject(hOldFont);
		pDC->SetBkMode(nMode);
	}
	
	}	
	
 
}

LRESULT CButtonST::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
	m_MouseOnButton = FALSE;
	m_bTracking = FALSE;
	
	MOUSEFLAG=false;
	
    GetParent()->SendMessage(WM_MOUSEMOVE);
	InvalidateRect(NULL, FALSE);
	return 0;
}

LRESULT CButtonST::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
	m_MouseOnButton = TRUE;
	InvalidateRect(NULL);
	return 0;
}

void CButtonST::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if (!m_bTracking)
 	{
		TRACKMOUSEEVENT tme;
 		tme.cbSize = sizeof(tme);
 		tme.hwndTrack = m_hWnd;
 		tme.dwFlags = TME_LEAVE | TME_HOVER;
 		tme.dwHoverTime = 1;
 	    m_bTracking = _TrackMouseEvent(&tme);
        
 	}
	
	
	CButton::OnMouseMove(nFlags, point);
}



BOOL CButtonST::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	
	    return CButton::PreTranslateMessage(pMsg);

}


⌨️ 快捷键说明

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