📄 switchbutton.cpp
字号:
// ColorButton.cpp : implementation file
//
#include "stdafx.h"
//#include "Test.h"
#include "SwitchButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSwitchButton
CSwitchButton::CSwitchButton()
{
m_nSwitch = 0;
m_bLeftClick = TRUE;
m_nNumOfSwitch = 2;
}
CSwitchButton::~CSwitchButton()
{
}
BEGIN_MESSAGE_MAP(CSwitchButton, CButton)
//{{AFX_MSG_MAP(CSwitchButton)
ON_WM_LBUTTONUP()
ON_WM_RBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSwitchButton message handlers
void CSwitchButton::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
ModifyStyle(0, BS_OWNERDRAW);
CRect rect;
GetClientRect(rect);
rect.bottom = rect.right = min(rect.bottom, rect.right);
CRgn rgn;
rgn.DeleteObject();
rgn.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
SetWindowRgn(rgn, TRUE);
ClientToScreen(rect);
CWnd* pParent = GetParent();
if (pParent) pParent->ScreenToClient(rect);
// Resize the window
MoveWindow(rect.left, rect.top, rect.Width(), rect.Height(), TRUE);
CButton::PreSubclassWindow();
}
void CSwitchButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rect = lpDrawItemStruct->rcItem;
CBitmap bmp, *pOldBmp;
BITMAP BMP;
CDC memDC;
memDC.CreateCompatibleDC(pDC);
bmp.LoadBitmap(m_nBmpResource + m_nSwitch);
bmp.GetBitmap(&BMP);
pOldBmp = memDC.SelectObject(&bmp);
if(BMP.bmWidth == rect.Width() && BMP.bmHeight == rect.Height())
pDC->BitBlt(0,0,rect.Width(), rect.Height(),
&memDC, 0,0,SRCCOPY);
else
pDC->StretchBlt(0,0,rect.Width(), rect.Height(),
&memDC, 0,0,BMP.bmWidth, BMP.bmHeight, SRCCOPY);
memDC.SelectObject(pOldBmp);
}
void CSwitchButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_bLeftClick)
{
m_nSwitch --;
if(m_nSwitch<0)
m_nSwitch = 0;
else
Invalidate();
}
m_bLeftClick = TRUE;
CButton::OnLButtonUp(nFlags, point);
}
void CSwitchButton::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_nSwitch ++;
if(m_nSwitch > m_nNumOfSwitch)
m_nSwitch = m_nNumOfSwitch;
else
Invalidate();
m_bLeftClick = FALSE;
::SendNotifyMessage(m_hWnd, WM_LBUTTONDOWN,MK_LBUTTON,NULL);
::SendNotifyMessage(m_hWnd, WM_LBUTTONUP, NULL,NULL);
::SendNotifyMessage(m_hWnd, BN_CLICKED, MK_LBUTTON,NULL);
CButton::OnRButtonUp(nFlags, point);
}
int CSwitchButton::GetCurSel()
{
TRACE("%d \n", m_nSwitch);
return m_nSwitch;
}
void CSwitchButton::InitButton(UINT firstBmp, UINT lastBmp, int nSwitch)
{
m_nNumOfSwitch = lastBmp - firstBmp;
m_nBmpResource = firstBmp;
m_nSwitch = nSwitch;
}
void CSwitchButton::SetCurSel(int n)
{
m_nSwitch = n;
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -