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

📄 button.cpp

📁 C语言大赛的平台。分为环境模块和策略模块。
💻 CPP
字号:
#include "GKL.h"

using namespace GKL;

Button::Button(Window *pWnd, int x, int y, int width, int height, const wchar_t *title, void (*onClick)(Button*)):
	Control(pWnd, false, true),
	COLOR_OUT(0xCF), COLOR_OVER(0xEF), COLOR_BORDER(0xAF),
	mX(x), mY(y), mWidth(width), mHeight(height),
	mOnClick(onClick),
	mColor(COLOR_OUT), mDestColor(COLOR_OUT)
{
	if(mWidth < 2)
		mWidth = 2;
	if(mHeight < 2)
		mHeight = 2;

	wcsncpy(mTitle, title, MAX_TITLE_LEN);
	mTitle[MAX_TITLE_LEN - 1] = 0;
}

Button::~Button(void)
{
}

int Button::onDrawDetect(int &flagDraw)
{
	if(mColor != mDestColor)
	{
		if(mDestColor > mColor)
			mColor += 2;
		else
			mColor -= 2;

		if(flagDraw == DRAW_NONE)
			flagDraw = DRAW_NORMAL;
	}

	return 0;
}

void Button::reDraw(void)
{
	RECT rect = {mX + 1, mY + 1, mX + mWidth - 1, mY + mHeight - 1};
	HBRUSH hBr = CreateSolidBrush(RGB(mColor, mColor, mColor));
	FillRect(mpPnl->gethMemDC(), &rect, hBr);
	DeleteObject(hBr);

	HPEN hPen, hPenOld;
	hPen = CreatePen(PS_SOLID, 1, RGB(COLOR_BORDER, COLOR_BORDER, COLOR_BORDER));
	hPenOld = (HPEN)SelectObject(mpPnl->gethMemDC(), hPen);
	MoveToEx(mpPnl->gethMemDC(), mX + 1, mY, NULL);
	LineTo(mpPnl->gethMemDC(), mX + mWidth - 1, mY);
	MoveToEx(mpPnl->gethMemDC(), mX + mWidth - 1, mY + 1, NULL);
	LineTo(mpPnl->gethMemDC(), mX + mWidth - 1, mY + mHeight - 1);
	MoveToEx(mpPnl->gethMemDC(), mX + mWidth - 2, mY + mHeight - 1, NULL);
	LineTo(mpPnl->gethMemDC(), mX, mY + mHeight - 1);
	MoveToEx(mpPnl->gethMemDC(), mX, mY + mHeight - 2, NULL);
	LineTo(mpPnl->gethMemDC(), mX, mY);
	SelectObject(mpPnl->gethMemDC(), hPenOld);
	DeleteObject(hPen);

	HFONT hFontOld;
	hFontOld = (HFONT)SelectObject(mpPnl->gethMemDC(), leader.getStdFont());
	SetBkMode(mpPnl->gethMemDC(), TRANSPARENT);
	DrawTextW(mpPnl->gethMemDC(), mTitle, wcslen(mTitle), &rect,
			DT_CENTER|DT_VCENTER|DT_SINGLELINE|DT_WORD_ELLIPSIS);
	SelectObject(mpPnl->gethMemDC(), hFontOld);
}

int Button::onKBEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
{
	return 0;
}

int Button::onMouseEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT &lResult)
{
	int x = LOWORD(lParam);
	int y = HIWORD(lParam);
	if(mpPnl != NULL)
		mpPnl->WindowToPanel(x, y);
	bool inArea = (x > mX) && (x < mX + mWidth - 1) && (y > mY) && (y < mY + mHeight - 1);

	switch(uMsg)
	{
		case WM_LBUTTONDOWN:
			if(inArea)
				mOnClick(this);
			break;
		case WM_MOUSEMOVE:
			if(inArea)
				mDestColor = COLOR_OVER;
			else
				mDestColor = COLOR_OUT;
			break;
	}

	if(inArea && (uMsg == WM_LBUTTONDOWN))
		return -1;
	else
		return 0;
}

⌨️ 快捷键说明

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