📄 button.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 + -