📄 picbutton.cpp
字号:
// PicButton.cpp : 实现文件
//
#include "stdafx.h"
#include "PicButton.h"
// PicButton
IMPLEMENT_DYNAMIC(PicButton, CButton)
PicButton::PicButton()
{
m_bOver = m_bSelected = m_bTracking = FALSE;
}
PicButton::~PicButton()
{
}
BEGIN_MESSAGE_MAP(PicButton, CButton)
ON_WM_MOUSEMOVE()
ON_WM_ERASEBKGND()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_MESSAGE(WM_MOUSELEAVE, OnMouseLeave)
ON_MESSAGE(WM_MOUSEHOVER, OnMouseHover)
ON_WM_LBUTTONDBLCLK()
END_MESSAGE_MAP()
// PicButton 消息处理程序
void PicButton::LoadImages(UINT nIDnormal, UINT nIDover, UINT nIDseleted)
{
m_imgNormal.LoadBitmap(nIDnormal);
m_imgOver.LoadBitmap(nIDover);
m_imgSelected.LoadBitmap(nIDseleted);
}
void PicButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
//从lpDrawItemStruct获取控件的相关信息
CRect rect = lpDrawItemStruct->rcItem;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
int nSaveDC = pDC->SaveDC();
UINT state = lpDrawItemStruct->itemState;
//获取按钮的状态
if ( state & ODS_SELECTED )
m_bSelected = TRUE;
else
m_bSelected = FALSE;
CBitmap* pOldBitmap;
CDC MemDC;
// 建立与显示设备兼容的内存设备场境
MemDC.CreateCompatibleDC(pDC);
if ( m_bOver )
{
if ( m_bSelected )
{
pOldBitmap = MemDC.SelectObject(&m_imgSelected);
}
else
pOldBitmap = MemDC.SelectObject(&m_imgOver);
}
else
{
pOldBitmap = MemDC.SelectObject(&m_imgNormal);
}
// 显示它
pDC->BitBlt(rect.top, rect.left, rect.Width(), rect.Height(), &MemDC, 0, 0, SRCCOPY);
MemDC.SelectObject(pOldBitmap);
pDC->RestoreDC(nSaveDC);
}
void PicButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (!m_bTracking)
{
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE | TME_HOVER;
tme.dwHoverTime = 1;
m_bTracking = _TrackMouseEvent(&tme);
}
CButton::OnMouseMove(nFlags, point);
}
BOOL PicButton::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void PicButton::PreSubclassWindow()
{
// 设置为自绘
ModifyStyle(0, BS_OWNERDRAW);
CButton::PreSubclassWindow();
}
void PicButton::OnLButtonDown(UINT nFlags, CPoint point)
{
CButton::OnLButtonDown(nFlags, point);
}
void PicButton::OnLButtonUp(UINT nFlags, CPoint point)
{
CButton::OnLButtonUp(nFlags, point);
}
LRESULT PicButton::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
m_bOver = FALSE;
m_bTracking = FALSE;
m_bSelected = FALSE;
InvalidateRect(NULL, FALSE);
return 0;
}
LRESULT PicButton::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
m_bOver = TRUE;
InvalidateRect(NULL);
return 0;
}
void PicButton::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
// CButton::OnLButtonDown(nFlags, point);
CButton::OnLButtonDblClk(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -