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

📄 mybutton.cpp

📁 VC++ 6.0写ADO数据库操作对初学者有一定帮助
💻 CPP
字号:
// Mybutton.cpp : implementation file
//

#include "stdafx.h"
#include "s.h"
#include "Mybutton.h"

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

/////////////////////////////////////////////////////////////////////////////
// Mybutton

Mybutton::Mybutton()
{
	m_map.LoadBitmap(IDB_BITMAP1);
	m_mapall.LoadBitmap(IDB_BITMAP1);
	m_brush.CreatePatternBrush(&m_map);
	m_map2.LoadBitmap(IDB_BITMAP2);
	m_brush2.CreatePatternBrush(&m_map2);
	m_map3.LoadBitmap(IDB_BITMAP3);

	m_bodown=false;
	m_bomove=false;
	m_color=RGB(0,0,0);
}

Mybutton::~Mybutton()
{
}


BEGIN_MESSAGE_MAP(Mybutton, CButton)
	//{{AFX_MSG_MAP(Mybutton)
	ON_WM_PAINT()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_CREATE()
	ON_WM_MOUSEMOVE()
	ON_WM_ERASEBKGND()
	ON_WM_GETDLGCODE()
	//	ON_WM_QUERYDRAGICON()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Mybutton message handlers

void Mybutton::SetBackColor(COLORREF color)
{
   m_color=color;
   
//m_brush.CreateSolidBrush(m_color);
}

void Mybutton::OnPaint() 
{
	CPaintDC dc(this); // device context for painting 
	CRect rect;
    GetClientRect(&rect);
    CString sCaption;
    GetWindowText(sCaption);
    dc.SetTextColor(m_color);
	dc.SetBkMode(TRANSPARENT);
	dc.SelectStockObject(ANSI_FIXED_FONT);//选入字体
	/*
        ANSI_FIXED_FONT(ANSI标准的等宽字体)ANSI_VAR_FONT(ANSI标准的非等宽字体)
		SYSTEM_FONT(WINDOW默认的非等宽系统字体,用于菜单,对话框控件等界面文体的显示)
		SYSTEM_FIXED_FONT(WINDOW等宽系统字体)
		DEVICE_DEFAULT_FONT(当前设备字体)
		OEM_FIXED_FONT(与OEM相关的等宽字体);
  */
	dc.DrawText(sCaption,&rect,DT_CENTER|DT_VCENTER| DT_SINGLELINE);


}

void Mybutton::OnLButtonDown(UINT nFlags, CPoint point) 
{   
CButton::OnLButtonDown(nFlags, point);

	m_bodown=true;

//	SetFocus();
	if(m_bomove)
	{
		m_bomove = false;
		Invalidate();
		UpdateWindow();
		GetParent()->SendMessage(WM_COMMAND, GetDlgCtrlID(), (LPARAM)m_hWnd );
		Invalidate();
		UpdateWindow();
	}
	else
	{
		m_bomove=true;
		Invalidate();
		UpdateWindow();

	}
	Invalidate();
	UpdateWindow();

}

void Mybutton::OnLButtonUp(UINT nFlags, CPoint point) 
{	   
    m_bodown=false;
//	ReleaseCapture();
	Invalidate();
	UpdateWindow();
	CButton::OnLButtonUp(nFlags, point);
	  
}

int Mybutton::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CButton::OnCreate(lpCreateStruct) == -1)
		return -1;

	
	return 0;
}

void Mybutton::SetTextColor(COLORREF color)
{
	m_color=color;
   m_brush.CreateSolidBrush(m_color);
}

void Mybutton::OnMouseMove(UINT nFlags, CPoint point) 
{
  
	CButton::OnMouseMove(nFlags, point);

	HRGN hRgn = CreateRectRgn(0, 0, 0, 0);
	GetWindowRgn(hRgn);		

	if ( PtInRegion( hRgn, point.x, point.y ))
	{
		if (!m_bomove)
		{
			m_bomove = TRUE;
			m_color=RGB(0,255,0);
			Invalidate();
			UpdateWindow();
			SetCapture();
		
		}
	}
	else
	{
		if (m_bomove)
		{
			m_bomove = FALSE;
			m_color=RGB(0,0,0);
			Invalidate();
			UpdateWindow();
			if(!m_bodown) ReleaseCapture();
	
		}

	}
	DeleteObject(hRgn);

}

void Mybutton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
   CDC dc;
   CRect rect=lpDrawItemStruct->rcItem;//得到按键区域
   CString sCaption;
   dc.Attach(lpDrawItemStruct->hDC); //得到设备环境CDC
   VERIFY(lpDrawItemStruct->CtlType==ODT_BUTTON);

  if(!(lpDrawItemStruct->itemState & ODS_SELECTED) &&
   (lpDrawItemStruct->itemAction & ODA_SELECT))//释放鼠标或鼠标进入按键区域
  {
	  m_bomove=false;
	  m_color=RGB(0,0,0);

	m_mapall.DeleteObject();
	m_mapall.LoadBitmap(IDB_BITMAP1);
 Invalidate();
   UpdateWindow();

  }

 if ((lpDrawItemStruct->itemState & ODS_SELECTED) &&
  (lpDrawItemStruct->itemAction & ODA_SELECT))
	{
	  m_bomove=false;
	  m_color=RGB(0,0,0);
	m_mapall.DeleteObject();
	m_mapall.LoadBitmap(IDB_BITMAP2);

	Invalidate();
    UpdateWindow();
	
  }

}

BOOL Mybutton::OnEraseBkgnd(CDC* pDC) 
{	
     
    CWindowDC dc(this);
	SetupRegion(&dc);
    CRect	rect;
	GetWindowRect(&rect);
  
	CDC memDC;
	CBitmap			&cBitmap=m_mapall;
	CBitmap*		pOldMemBmp = NULL;
	memDC.CreateCompatibleDC(&dc);
	pOldMemBmp = memDC.SelectObject(&cBitmap);
	dc.BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);

	if (pOldMemBmp) memDC.SelectObject(pOldMemBmp );

    GetClientRect(&rect);
    CString sCaption;
    GetWindowText(sCaption);
    dc.SetTextColor(m_color);
	dc.SetBkMode(TRANSPARENT);
	dc.SelectStockObject(ANSI_FIXED_FONT);
	dc.DrawText(sCaption,&rect,DT_CENTER|DT_VCENTER| DT_SINGLELINE);


	 return true;
	return CButton::OnEraseBkgnd(pDC);
}

UINT Mybutton::OnGetDlgCode() 
{
	return CButton::OnGetDlgCode();
}

void Mybutton::SetupRegion(CDC *pDC)
{

		CDC					memDC;
	CBitmap			&cBitmap=m_mapall;
	CBitmap*		pOldMemBmp = NULL;
	COLORREF		col,colMask;
	CRect				cRect;
	int					x, y;
	CRgn				wndRgn, rgnTemp;

	GetWindowRect(&cRect);
//	GetClientRect(&cRect);
	CPoint ptOrg=cRect.TopLeft();
     
	BITMAP bmInfo;
	//cBitmap.GetObject(sizeof(bmInfo),&bmInfo);
    cBitmap.GetBitmap(&bmInfo);
	CRect rcNewWnd=CRect(ptOrg,CSize(bmInfo.bmWidth,bmInfo.bmHeight));

	memDC.CreateCompatibleDC(pDC);
	pOldMemBmp = memDC.SelectObject(&cBitmap);
	colMask=memDC.GetPixel(0,0);
    
	wndRgn.CreateRectRgn(0, 0, rcNewWnd.Width(), rcNewWnd.Height());
//	wndRgn.CreateEllipticRgn(0, 0, rcNewWnd.Width(), rcNewWnd.Height());
	for(x=0; x<=rcNewWnd.Width(); x++)
	{
		for(y=0; y<=rcNewWnd.Height(); y++)
		{
			col = memDC.GetPixel(x, y);
			if(col == colMask)
			{
		    	rgnTemp.CreateRectRgn(x, y, x+1,y+1);
			   //rgnTemp.CreateEllipticRgn(x, y, x+1,y+1);
				wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_XOR);
					
				rgnTemp.DeleteObject();	
			}
		}
	}
	if (pOldMemBmp) memDC.SelectObject(pOldMemBmp);
	SetWindowRgn((HRGN)wndRgn, TRUE);
}



void Mybutton::LoadBitmap1(UINT downbit, UINT upbit)
{
//	m_mapa.LoadBitmap(upbit);
//	m_mapall.LoadBitmap(downbit);
//	m_brush.CreatePatternBrush(&m_map);
//	m_map2.LoadBitmap(upbit);
//	m_brush2.CreatePatternBrush(&m_map2);
}




BOOL Mybutton::EnableWindow(BOOL m_bo)
{
	CRect rectmove;
    CWindowDC dcc(this);
    CDC pDc;
	 if(m_bo)
	 {
		 
	  m_bomove=false;
	  m_mapall.DeleteObject();
	  m_mapall.LoadBitmap(IDB_BITMAP1);

    ::EnableWindow(this->m_hWnd,m_bo);
  
	   Invalidate();
       UpdateWindow();
	 }
	 else
	 {
	
    m_bomove=true;

	m_mapall.DeleteObject();
	m_mapall.LoadBitmap(IDB_BITMAP3);

	::EnableWindow(this->m_hWnd,m_bo);
	   Invalidate();
       UpdateWindow();
	 
	 }
	  RedrawWindow(NULL, NULL,RDW_ERASE);
	   Invalidate();
       UpdateWindow();
return true;
}



BOOL Mybutton::OnInitDialog()
{
	//CWindowDC dcc(this);
    //SetupRegion(&dcc);
 
return true;
}

⌨️ 快捷键说明

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