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

📄 nbutton.cpp

📁 你用过<<中华诗词6000>>吗?那个是VF编写的,而我是用VC++编烈写的!搜索速度明显比作者原版更快了,还包含了重要的诗词数据库,代码注释详尽.
💻 CPP
字号:
// NButton.cpp : 实现文件
//

#include "stdafx.h"
#include "NButton.h"
#include ".\nbutton.h"


// CNButton

IMPLEMENT_DYNAMIC(CNButton, CButton)


CNButton::CNButton(UINT nID)
{
	if (nID != 0)
	{
		m_bit.LoadBitmap(nID);
	}
	m_CurID = 0;
	m_cx = 0, 
	m_cy = 0;
	m_state = 0;
	m_oldstate = 0;
	m_tip.Create(this);
}

CNButton::~CNButton()
{
}

void CNButton::SetTip(LPCTSTR  lpszText)
{
	CRect rect;
	GetWindowRect(&rect);
	ScreenToClient(&rect);
	UINT nID = GetDlgCtrlID();

	m_tip.AddTool(this, lpszText, rect, nID);
}

void CNButton::UpdateTipText(LPCTSTR  lpszText)
{
	CRect rect;
	GetWindowRect(&rect);
	ScreenToClient(&rect);
	UINT nID = GetDlgCtrlID();

	m_tip.UpdateTipText(lpszText, this, nID);
}

void CNButton::SetBitMap(UINT nID)
{
	if (nID != 0)
	{
		BITMAP bit;
		m_bit.DeleteObject();
		m_bit.LoadBitmap(nID);
		m_bit.GetBitmap(&bit);
		m_cx = bit.bmWidth/3;
		m_cy = bit.bmHeight; 

		CDC memdc;
		CDC *dcP = GetWindowDC();
		memdc.CreateCompatibleDC(dcP);
		memdc.SelectObject(&m_bit);
		dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
	}
}

void CNButton::SetCursorID(UINT nID)
{
	m_CurID = nID;
}

BEGIN_MESSAGE_MAP(CNButton, CButton)
	ON_WM_MOUSEMOVE()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
END_MESSAGE_MAP()



// CNButton 消息处理程序


void CNButton::DrawItem(LPDRAWITEMSTRUCT lpdis/*lpDrawItemStruct*/)
{
	int i = lpdis->itemState;

	CDC memdc;
	CDC dcP;
	dcP.Attach(lpdis->hDC);
	memdc.CreateCompatibleDC(&dcP);
	memdc.SelectObject(&m_bit);
	dcP.BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
	
	ReleaseDC(&dcP);
	// TODO:  添加您的代码以绘制指定项
}

void CNButton::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CRect rect;
	GetWindowRect(&rect);
	CPoint pt = point;
	ClientToScreen(&pt);

	if (rect.PtInRect(pt) && m_state != 2)
	{
		m_state = 1;

		if (m_CurID != 0)
		{
			HINSTANCE hIns = (HINSTANCE)::GetWindowLong(this->GetParent()->GetSafeHwnd(), GWL_HINSTANCE);
			HCURSOR hcur= ::LoadCursor(hIns, (LPCTSTR)m_CurID);
			::SetCursor(hcur);
		}

		SetCapture();
		CDC memdc;
		CDC *dcP = GetWindowDC();
		memdc.CreateCompatibleDC(dcP);
		memdc.SelectObject(&m_bit);
		dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
		
		ReleaseDC(dcP);
		dcP = NULL;
	}
	else if (!rect.PtInRect(pt))
	{
		m_state = 0;
		CDC memdc;
		CDC *dcP = GetWindowDC();
		memdc.CreateCompatibleDC(dcP);
		memdc.SelectObject(&m_bit);
		dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
		
		ReleaseDC(dcP);
		dcP = NULL;
		ReleaseCapture();
	}
	CButton::OnMouseMove(nFlags, point);
}


void CNButton::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值

	CRect rect;
	GetWindowRect(&rect);
	CPoint pt = point;
	ClientToScreen(&pt);

	if (rect.PtInRect(pt))
	{
		SetCapture();
		m_oldstate = m_state == 2 ? m_oldstate : m_state;
		m_state = 2;
		CDC memdc;
		CDC *dcP = GetWindowDC();
		memdc.CreateCompatibleDC(dcP);
		memdc.SelectObject(&m_bit);
		dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
		
		ReleaseDC(dcP);
		dcP = NULL;
	}
	CButton::OnLButtonDown(nFlags, point);
}

void CNButton::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if (m_state == 2)
	{
		CRect rect;
		GetWindowRect(&rect);
		CPoint pt = point;
		ClientToScreen(&pt);
			
		if (rect.PtInRect(pt))
		{
			::SendMessage(GetParent()->GetSafeHwnd(),
							WM_COMMAND, 
							(WPARAM)GetDlgCtrlID(),
							(LPARAM)GetSafeHwnd());
		}

		m_state = 0;
		CDC memdc;
		CDC *dcP = GetWindowDC();
		memdc.CreateCompatibleDC(dcP);
		memdc.SelectObject(&m_bit);
		dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
		
		ReleaseDC(dcP);
		dcP = NULL;

		ReleaseCapture();
	}

	CButton::OnLButtonUp(nFlags, point);
}

BOOL CNButton::PreTranslateMessage(MSG* pMsg)
{
	// TODO: 在此添加专用代码和/或调用基类
	if (m_tip)
	{
		m_tip.RelayEvent(pMsg);
	}
	return CButton::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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