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

📄 hoverbutton.cpp

📁 QQ自动登陆器, 同时支持TM, 利用QQ可以从命令行接收参数登陆的特点制做, 源码中有QQ密码加密的完整算法, 开发环境, VC++6.0
💻 CPP
字号:

/*
	Copyright 2006 - 2007, All Rights Reserved.
							
	图片按钮类

	作者	- 张鲁夺(zhangluduo)
	MSN		- zhangluduo@msn.com
	QQ群	- 34064264

	为所有爱我的人和我爱的人努力!
*/

#include "stdafx.h"
#include "HoverButton.h"
#include "HoverButton.h"

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

/////////////////////////////////////////////////////////////////////////////
// HoverButton

HoverButton::HoverButton()
{
	m_hBitmap		= NULL;
	m_bIsMouseMove	= false;
}

HoverButton::~HoverButton()
{
}


BEGIN_MESSAGE_MAP(HoverButton, CButton)
	//{{AFX_MSG_MAP(HoverButton)
	ON_WM_MOUSEMOVE()
	ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// HoverButton message handlers

bool HoverButton::LoadBitmap(HMODULE hModule, UINT nBitmapID)
{
	if(m_hBitmap != NULL)
		DeleteObject(m_hBitmap);

	m_hBitmap = ::LoadBitmap(hModule, MAKEINTRESOURCE(nBitmapID));
	if(m_hBitmap == NULL)
		return false;

	int nWidth		= 0;
	int nHeight		= 0;
	if(!GetBitmapSize(m_hBitmap, &nWidth, &nHeight))
		return false;

	SetWindowPos(NULL, 0, 0, (nWidth + 1) / 4, nHeight, SWP_NOMOVE   |SWP_NOOWNERZORDER);

	return true;
}

bool HoverButton::GetBitmapSize(HBITMAP hBmp, int* nWidth, int* nHeight)
{
	*nWidth = *nHeight = -1;

	BITMAP bm;
	int ret = GetObject((HGDIOBJ)hBmp, sizeof(BITMAP), (LPSTR)&bm);
	if(ret == 0)
		return false;

	*nWidth		= bm.bmWidth;
	*nHeight	= bm.bmHeight;

	return true;
}

void HoverButton::DrawBitmap(HBITMAP hBmp, STATUS Status)
{
	RECT rcWnd;
	::GetClientRect(m_hWnd, &rcWnd);

	HDC hDC = ::GetDC(m_hWnd);
	HDC hImgDC = ::CreateCompatibleDC(hDC);
	HBITMAP hOldBmp = (HBITMAP)SelectObject(hImgDC, hBmp);

	switch(Status)
	{
	case NORMAL:
		BitBlt(hDC, 0, 0, rcWnd.right, rcWnd.bottom, hImgDC, 0, 0, SRCCOPY);
		break;
	case MOUSEMOVE:
		BitBlt(hDC, 0, 0, rcWnd.right, rcWnd.bottom, hImgDC, rcWnd.right, 0, SRCCOPY);
		break;
	case LBUTTONDOWN:
		BitBlt(hDC, 0, 0, rcWnd.right, rcWnd.bottom, hImgDC, rcWnd.right * 2, 0, SRCCOPY);
		break;
	case DISABLED:
		BitBlt(hDC, 0, 0, rcWnd.right, rcWnd.bottom, hImgDC, rcWnd.right * 3, 0, SRCCOPY);
		break;
	default:
		BitBlt(hDC, 0, 0, rcWnd.right, rcWnd.bottom, hImgDC, 0, 0, SRCCOPY);
	}
	
	SelectObject(hImgDC, hOldBmp);
	DeleteObject(hImgDC);
	::ReleaseDC(m_hWnd, hDC);
}

void HoverButton::PreSubclassWindow() 
{
	SetButtonStyle(GetButtonStyle() | BS_OWNERDRAW);
	CButton::PreSubclassWindow();
}

void HoverButton::OnMouseMove(UINT nFlags, CPoint point) 
{
	if(m_bIsMouseMove == false)
	{
		m_bIsMouseMove = true;
		Invalidate();
		
		TRACKMOUSEEVENT		tme;
		tme.cbSize			= sizeof(tme);
		tme.hwndTrack		= m_hWnd;
		tme.dwFlags			= TME_LEAVE | TME_HOVER;
		tme.dwHoverTime		= HOVER_DEFAULT;
		_TrackMouseEvent(&tme);
	}

	CButton::OnMouseMove(nFlags, point);
}

LRESULT HoverButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
	m_bIsMouseMove = false;
	Invalidate();
	return 0;
}

void HoverButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	if(::IsWindowEnabled(m_hWnd) == 0)
	{
		DrawBitmap(m_hBitmap, DISABLED);
		return ;
	}
	else if(lpDrawItemStruct->itemState & ODS_SELECTED)
	{
		m_bIsMouseMove = false;
		DrawBitmap(m_hBitmap, LBUTTONDOWN);
	}
	else 
	{
		DrawBitmap(m_hBitmap, NORMAL);
	}
	if(m_bIsMouseMove)
	{
		DrawBitmap(m_hBitmap, MOUSEMOVE);
	}
}

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

	if(pMsg->message == WM_KEYDOWN)
	{
		if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_SPACE)
			return TRUE;
	}
	
	return CButton::PreTranslateMessage(pMsg);
}

⌨️ 快捷键说明

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