📄 nbutton.cpp
字号:
// NButton.cpp : 实现文件
//
#include "stdafx.h"
#include "NButton.h"
#include ".\nbutton.h"
// CNButton
IMPLEMENT_DYNAMIC(CNButton, CButton)
CNButton::CNButton(UINT nID)
{
if (nID != 0)
{
m_bit.LoadBitmap(nID);
}
m_CurID = 0;
m_cx = 0,
m_cy = 0;
m_state = 0;
m_oldstate = 0;
m_tip.Create(this);
}
CNButton::~CNButton()
{
}
void CNButton::SetTip(LPCTSTR lpszText)
{
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
UINT nID = GetDlgCtrlID();
m_tip.AddTool(this, lpszText, rect, nID);
}
void CNButton::UpdateTipText(LPCTSTR lpszText)
{
CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
UINT nID = GetDlgCtrlID();
m_tip.UpdateTipText(lpszText, this, nID);
}
void CNButton::SetBitMap(UINT nID)
{
if (nID != 0)
{
BITMAP bit;
m_bit.DeleteObject();
m_bit.LoadBitmap(nID);
m_bit.GetBitmap(&bit);
m_cx = bit.bmWidth/3;
m_cy = bit.bmHeight;
CDC memdc;
CDC *dcP = GetWindowDC();
memdc.CreateCompatibleDC(dcP);
memdc.SelectObject(&m_bit);
dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
}
}
void CNButton::SetCursorID(UINT nID)
{
m_CurID = nID;
}
BEGIN_MESSAGE_MAP(CNButton, CButton)
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
// CNButton 消息处理程序
void CNButton::DrawItem(LPDRAWITEMSTRUCT lpdis/*lpDrawItemStruct*/)
{
int i = lpdis->itemState;
CDC memdc;
CDC dcP;
dcP.Attach(lpdis->hDC);
memdc.CreateCompatibleDC(&dcP);
memdc.SelectObject(&m_bit);
dcP.BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
ReleaseDC(&dcP);
// TODO: 添加您的代码以绘制指定项
}
void CNButton::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetWindowRect(&rect);
CPoint pt = point;
ClientToScreen(&pt);
if (rect.PtInRect(pt) && m_state != 2)
{
m_state = 1;
if (m_CurID != 0)
{
HINSTANCE hIns = (HINSTANCE)::GetWindowLong(this->GetParent()->GetSafeHwnd(), GWL_HINSTANCE);
HCURSOR hcur= ::LoadCursor(hIns, (LPCTSTR)m_CurID);
::SetCursor(hcur);
}
SetCapture();
CDC memdc;
CDC *dcP = GetWindowDC();
memdc.CreateCompatibleDC(dcP);
memdc.SelectObject(&m_bit);
dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
ReleaseDC(dcP);
dcP = NULL;
}
else if (!rect.PtInRect(pt))
{
m_state = 0;
CDC memdc;
CDC *dcP = GetWindowDC();
memdc.CreateCompatibleDC(dcP);
memdc.SelectObject(&m_bit);
dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
ReleaseDC(dcP);
dcP = NULL;
ReleaseCapture();
}
CButton::OnMouseMove(nFlags, point);
}
void CNButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetWindowRect(&rect);
CPoint pt = point;
ClientToScreen(&pt);
if (rect.PtInRect(pt))
{
SetCapture();
m_oldstate = m_state == 2 ? m_oldstate : m_state;
m_state = 2;
CDC memdc;
CDC *dcP = GetWindowDC();
memdc.CreateCompatibleDC(dcP);
memdc.SelectObject(&m_bit);
dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
ReleaseDC(dcP);
dcP = NULL;
}
CButton::OnLButtonDown(nFlags, point);
}
void CNButton::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (m_state == 2)
{
CRect rect;
GetWindowRect(&rect);
CPoint pt = point;
ClientToScreen(&pt);
if (rect.PtInRect(pt))
{
::SendMessage(GetParent()->GetSafeHwnd(),
WM_COMMAND,
(WPARAM)GetDlgCtrlID(),
(LPARAM)GetSafeHwnd());
}
m_state = 0;
CDC memdc;
CDC *dcP = GetWindowDC();
memdc.CreateCompatibleDC(dcP);
memdc.SelectObject(&m_bit);
dcP->BitBlt(0, 0, m_cx , m_cy, &memdc, m_cx * m_state, 0, SRCCOPY);
ReleaseDC(dcP);
dcP = NULL;
ReleaseCapture();
}
CButton::OnLButtonUp(nFlags, point);
}
BOOL CNButton::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (m_tip)
{
m_tip.RelayEvent(pMsg);
}
return CButton::PreTranslateMessage(pMsg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -