📄 mybutton.cpp
字号:
// MyButton.cpp: implementation of the CMyButton class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "front.h"
#include "MyButton.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CMyButton, CWnd)
BEGIN_MESSAGE_MAP(CMyButton, CWnd)
//{{AFX_MSG_MAP(CGfxOutBarCtrl)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CMyButton::CMyButton()
{
crBackground0=GetSysColor(COLOR_BACKGROUND);
crBackground1=RGB(108,149,239); //背景色
}
CMyButton::~CMyButton()
{
if(iFlag==0)delete TitleLabel;
else
{
delete OKButton;
delete CancelButton;
delete UpButton;
delete DownButton;
}
}
int CMyButton::Create(DWORD dwStyle, const RECT &rect, CWnd *pParentWnd, UINT nID,int flag)
{
iFlag=flag;
ButtonRect=rect;
return CWnd::CreateEx(NULL, NULL, NULL, dwStyle|WS_CHILD, rect, pParentWnd, nID);
}
int CMyButton::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer(1,100,NULL);
// TODO: Add your specialized creation code here
if(iFlag==0) //左边
{
TitleLabel=new CMyLabel("Front",3,1,true,false,IDC_TITLELABEL,-1,pParentWnd);
TitleLabel->setPos(5,3,70,20);
TitleLabel->StretchWidth=1;
TitleLabel->OpenBitmap("res/titlebmp.bmp");
}
else //右边
{
CRect ClientRc;
GetClientRect(&ClientRc);
rightRc.SetRect(ClientRc.right-73,ClientRc.top+2,ClientRc.right-51,ClientRc.top+22);
midRc.SetRect(ClientRc.right-49,ClientRc.top+2,ClientRc.right-29,ClientRc.top+22);
leftRc.SetRect(ClientRc.right-27,ClientRc.top+2,ClientRc.right-5,ClientRc.top+22);
OKButton=new CMyLabel(NULL,1,1,true,false,IDC_MYOK,-1,GetOwner());
OKButton->OpenBitmap("res/sure.bmp");
CancelButton=new CMyLabel(NULL,1,1,true,false,IDC_MYCANCEL,-1,GetOwner());
CancelButton->OpenBitmap("res/close.bmp");
UpButton=new CMyLabel(NULL,1,1,true,false,IDC_MYUP,-1,GetOwner());
UpButton->OpenBitmap("res/left.bmp");
DownButton=new CMyLabel(NULL,1,1,true,false,IDC_MYDOWN,-1,GetOwner());
DownButton->OpenBitmap("res/right.bmp");
}
return 1;
}
void CMyButton::OnPaint()
{
CRect clientRc;
GetClientRect(&clientRc);
CPaintDC dc(this);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&dc, clientRc.Width(), clientRc.Height());
CBitmap * obmp = memDC.SelectObject(&bmp);
CDC * pDC = &memDC; //这一步并不是多余,可以简化编程
//所画东西不改变背景色
int obk = pDC->SetBkMode(TRANSPARENT);
//使用系统默认字体
CFont * ofont = pDC->SelectObject(CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT)));
//TODO 这里可以添自己的代码
if(iFlag==0)
{
CBrush *pOldBrush,brush;
brush.CreateSolidBrush(crBackground0);
pOldBrush=pDC->SelectObject(&brush);
pDC->RoundRect(CRect(-1,-1,90,30),CPoint(17,17));
TitleLabel->SetTextCol(RGB(243,243,243));
TitleLabel->DrawLabel(pDC);
pDC->SelectObject(pOldBrush);
}
else
{
OKButton->bEnable=false;
CancelButton->bEnable=false;
UpButton->bEnable=false;
DownButton->bEnable=false;
CBrush brush;
brush.CreateSolidBrush(crBackground1);
pDC->FillRect(clientRc,&brush);
if(iFlag==1) //确定,取消
{
OKButton->bEnable=true;
OKButton->setPos(midRc.left,midRc.top,midRc.right,midRc.bottom);
OKButton->DrawLabel(pDC);
CancelButton->bEnable=true;
CancelButton->setPos(leftRc.left,leftRc.top,leftRc.right,leftRc.bottom);
CancelButton->DrawLabel(pDC);
}
if(iFlag==2) //向下,取消
{
DownButton->bEnable=true;
DownButton->setPos(midRc.left,midRc.top,midRc.right,midRc.bottom);
DownButton->DrawLabel(pDC);
CancelButton->bEnable=true;
CancelButton->setPos(leftRc.left,leftRc.top,leftRc.right,leftRc.bottom);
CancelButton->DrawLabel(pDC);
}
if(iFlag==3) //向上,向下,取消
{
UpButton->bEnable=true;
UpButton->setPos(rightRc.left,rightRc.top,rightRc.right,rightRc.bottom);
UpButton->DrawLabel(pDC);
DownButton->bEnable=true;
DownButton->setPos(midRc.left,midRc.top,midRc.right,midRc.bottom);
DownButton->DrawLabel(pDC);
CancelButton->bEnable=true;
CancelButton->setPos(leftRc.left,leftRc.top,leftRc.right,leftRc.bottom);
CancelButton->DrawLabel(pDC);
}
if(iFlag==4) //向上,确定,取消
{
UpButton->bEnable=true;
UpButton->setPos(rightRc.left,rightRc.top,rightRc.right,rightRc.bottom);
UpButton->DrawLabel(pDC);
OKButton->bEnable=true;
OKButton->setPos(midRc.left,midRc.top,midRc.right,midRc.bottom);
OKButton->DrawLabel(pDC);
CancelButton->bEnable=true;
CancelButton->setPos(leftRc.left,leftRc.top,leftRc.right,leftRc.bottom);
CancelButton->DrawLabel(pDC);
}
if(iFlag==5) //取消
{
CancelButton->bEnable=true;
CancelButton->setPos(leftRc.left,leftRc.top,leftRc.right,leftRc.bottom);
CancelButton->DrawLabel(pDC);
}
}
dc.BitBlt(clientRc.left, clientRc.top, clientRc.Width(), clientRc.Height(), &memDC, 0,0, SRCCOPY);
memDC.SelectObject(obmp);
pDC->SelectObject(ofont);
pDC->SetBkMode(obk);
}
void CMyButton::OnLButtonUp(UINT nFlags, CPoint point)
{
if(iFlag==0)TitleLabel->OnLButtonUp(point);
else
{
OKButton->OnLButtonUp(point);
CancelButton->OnLButtonUp(point);
UpButton->OnLButtonUp(point);
DownButton->OnLButtonUp(point);
}
CWnd::OnLButtonUp(nFlags, point);
Invalidate();
}
void CMyButton::OnLButtonDown(UINT nFlags, CPoint point)
{
if(iFlag==0)TitleLabel->OnLButtonDown(point);
else
{
OKButton->OnLButtonDown(point);
CancelButton->OnLButtonDown(point);
UpButton->OnLButtonDown(point);
DownButton->OnLButtonDown(point);
}
CWnd::OnLButtonDown(nFlags, point);
Invalidate();
}
void CMyButton::OnMouseMove(UINT nFlags, CPoint point)
{
if(iFlag==0)TitleLabel->OnMouseMove(point);
else
{
OKButton->OnMouseMove(point);
CancelButton->OnMouseMove(point);
UpButton->OnMouseMove(point);
DownButton->OnMouseMove(point);
}
CWnd::OnMouseMove(nFlags,point);
Invalidate();
}
void CMyButton::OnTimer(UINT nIDEvent)
{
//当鼠标出离程序框时
CPoint pt(GetMessagePos());
ScreenToClient(&pt);
CRect rc;
GetClientRect(&rc);
if (!(rc.PtInRect(pt)))
{
if(iFlag==0)TitleLabel->OutRect();
else
{
OKButton->OutRect();
CancelButton->OutRect();
UpButton->OutRect();
DownButton->OutRect();
}
}
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -