📄 panels.h
字号:
/**
* Panels often used
*/
#pragma once
class SolidPanel: public virtual Panel
{
public:
SolidPanel(Window *pWnd, int x, int y, int width, int height, COLORREF bkColor = 0xDDDDDD):
Panel(pWnd, x, y, width, height),
mBkColor(bkColor)
{
}
virtual ~SolidPanel(void)
{
}
protected:
virtual void drawBkg(void)
{
RECT rect = {
0, 0, mWidth, mHeight};
HBRUSH hBr = CreateSolidBrush(mBkColor);
FillRect(mhMemDC, &rect, hBr);
DeleteObject(hBr);
}
protected:
COLORREF mBkColor;
};
class AlphaSolidPanel: public virtual Panel
{
public:
AlphaSolidPanel(Window *pWnd, int x, int y, int width, int height,
COLORREF bkColor = 0, unsigned char alpha = 127):
Panel(pWnd, x, y, width, height, DIRTY_STATE_ALL),
mBkColor(bkColor), mAlpha(alpha)
{
}
virtual ~AlphaSolidPanel(void)
{
}
protected:
virtual void drawBkg(void)
{
RECT rect = {
0, 0, mWidth, mHeight};
HBRUSH hBr = CreateSolidBrush(mBkColor);
FillRect(mhMemDC, &rect, hBr);
DeleteObject(hBr);
}
virtual void BitBlt(void)
{
alert(mpWnd->gethMemDC() == NULL);
BLENDFUNCTION bf;
bf.BlendOp = AC_SRC_OVER;
bf.BlendFlags = 0;
bf.SourceConstantAlpha = mAlpha;
bf.AlphaFormat = 0;
AlphaBlend(mpWnd->gethMemDC(), mX, mY, mWidth, mHeight, mhMemDC, 0, 0, mWidth, mHeight, bf);
}
protected:
COLORREF mBkColor;
unsigned char mAlpha;
};
class TransparentPanel: public virtual Panel
{
public:
TransparentPanel(Window *pWnd, int x, int y, int width, int height):
Panel(pWnd, x, y, width, height, DIRTY_STATE_ALL)
{
alert(mpWnd == NULL);
alert(mpWnd->gethWnd() == NULL);
}
virtual ~TransparentPanel(void)
{
}
protected:
virtual void drawBkg(void)
{
RECT rect = {
0, 0, mWidth, mHeight};
HBRUSH hBr = CreateSolidBrush(0);
FillRect(mhMemDC, &rect, hBr);
DeleteObject(hBr);
}
virtual void BitBlt(void)
{
alert(mpWnd->gethMemDC() == NULL);
TransparentBlt(mpWnd->gethMemDC(), mX, mY, mWidth, mHeight,
mhMemDC, 0, 0, mWidth, mHeight, 0x000000);
}
};
class ImagePanel: public virtual Panel
{
public:
ImagePanel(Window *pWnd, int x, int y, int width, int height, wchar_t *filename):
Panel(pWnd, x, y, width, height),
mhImageBmp(NULL),
mhImageDC(NULL)
{
alert(mpWnd == NULL);
alert(mpWnd->gethWnd() == NULL);
mhImageDC = CreateCompatibleDC(GetDC(mpWnd->gethWnd()));
alert(mhImageDC == NULL);
mhImageBmp = (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
alert(mhImageBmp == NULL);
mhBmpOld = (HBITMAP)SelectObject(mhImageDC, mhImageBmp);
}
virtual ~ImagePanel(void)
{
HBITMAP hBmpOld = (HBITMAP)SelectObject(mhImageDC, mhBmpOld);
alert(mhImageBmp != hBmpOld);
DeleteObject(mhImageBmp);
DeleteDC(mhImageDC);
}
protected:
virtual void drawBkg(void)
{
::BitBlt(mhMemDC, 0, 0, mWidth, mHeight, mhImageDC, 0, 0, SRCCOPY);
}
protected:
HBITMAP mhImageBmp, mhBmpOld;
HDC mhImageDC;
};
class TransparentImagePanel: public virtual Panel
{
public:
TransparentImagePanel(Window *pWnd, int x, int y, int width, int height, wchar_t *filename):
Panel(pWnd, x, y, width, height, DIRTY_STATE_ALL),
mhImageBmp(NULL),
mhImageDC(NULL)
{
alert(mpWnd == NULL);
alert(mpWnd->gethWnd() == NULL);
mhImageDC = CreateCompatibleDC(GetDC(mpWnd->gethWnd()));
alert(mhImageDC == NULL);
mhImageBmp = (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
alert(mhImageBmp == NULL);
mhBmpOld = (HBITMAP)SelectObject(mhImageDC, mhImageBmp);
}
virtual ~TransparentImagePanel(void)
{
HBITMAP hBmpOld = (HBITMAP)SelectObject(mhImageDC, mhBmpOld);
alert(mhImageBmp != hBmpOld);
DeleteObject(mhImageBmp);
DeleteDC(mhImageDC);
}
protected:
virtual void drawBkg(void)
{
RECT rect = {
0, 0, mWidth, mHeight};
HBRUSH hBr = CreateSolidBrush(0);
FillRect(mhMemDC, &rect, hBr);
DeleteObject(hBr);
::BitBlt(mhMemDC, 0, 0, mWidth, mHeight, mhImageDC, 0, 0, SRCCOPY);
}
virtual void BitBlt(void)
{
alert(mpWnd->gethMemDC() == NULL);
TransparentBlt(mpWnd->gethMemDC(), mX, mY, mWidth, mHeight, mhMemDC, 0, 0, mWidth, mHeight, 0);
}
protected:
HBITMAP mhImageBmp, mhBmpOld;
HDC mhImageDC;
};
class SnapshotPanel: public virtual Panel
{
public:
SnapshotPanel(Window *pWnd, int x, int y, int width, int height):
Panel(pWnd, x, y, width, height)
{
}
virtual ~SnapshotPanel(void)
{
}
void snapshot(void)
{
::BitBlt(mhMemDC, 0, 0, mWidth, mHeight, mpWnd->gethMemDC(), mX, mY, SRCCOPY);
}
protected:
virtual void drawBkg(void)
{
}
};
const int MAX_MESSAGE_LEN = 1024;
class MessagePanel: public virtual Panel
{
public:
MessagePanel(Window *pWnd, int x, int y, int width, int height,
COLORREF bkColor = 0xDDDDDD, COLORREF borderColor = 0xAAAAAA):
Panel(pWnd, x, y, width, height),
mBkColor(bkColor), mBorderColor(borderColor)
{
wcsncpy(mMessage, L"", MAX_MESSAGE_LEN);
}
virtual ~MessagePanel(void)
{
}
void setMessage(wchar_t *message)
{
wcsncpy(mMessage, message, MAX_MESSAGE_LEN);
mMessage[MAX_MESSAGE_LEN - 1] = 0;
draw(false);
}
protected:
virtual void drawBkg(void)
{
if((mWidth < 2) || (mHeight < 2))
return;
RECT rect = {
1, 1, mWidth - 1, mHeight - 1};
HBRUSH hBr = CreateSolidBrush(mBkColor);
FillRect(mhMemDC, &rect, hBr);
DeleteObject(hBr);
HPEN hPen, hPenOld;
hPen = CreatePen(PS_SOLID, 1, mBorderColor);
hPenOld = (HPEN)SelectObject(mhMemDC, hPen);
MoveToEx(mhMemDC, 0, 0, NULL);
LineTo(mhMemDC, mWidth - 1, 0);
LineTo(mhMemDC, mWidth - 1, mHeight);
MoveToEx(mhMemDC, 0, 0, NULL);
LineTo(mhMemDC, 0, mHeight - 1);
LineTo(mhMemDC, mWidth, mHeight - 1);
SelectObject(mhMemDC, hPenOld);
DeleteObject(hPen);
HFONT hFontOld;
hFontOld = (HFONT)SelectObject(mhMemDC, leader.getStdFont());
SetBkMode(mhMemDC, TRANSPARENT);
DrawTextW(mhMemDC, mMessage, wcslen(mMessage), &rect, 0);
SelectObject(mhMemDC, hFontOld);
}
protected:
COLORREF mBkColor, mBorderColor;
wchar_t mMessage[MAX_MESSAGE_LEN];
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -