📄 buttonwnd.cpp
字号:
// ButtonWnd.cpp : implementation file
//
#include "stdafx.h"
#include "SuperViseSystem.h"
#include "ButtonWnd.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CButtonWnd
CButtonWnd::CButtonWnd()
{
m_bTrackLeave = false;
m_iButtonSatae = -1;
}
CButtonWnd::~CButtonWnd()
{
}
BEGIN_MESSAGE_MAP(CButtonWnd, CWnd)
//{{AFX_MSG_MAP(CButtonWnd)
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MOUSELEAVE,OnMouseLeave)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CButtonWnd message handlers
//////////////////////////////////////////////////////////////////////////////
//以下几个函数主要完成了按钮图表的基本绘图
void CButtonWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
POINT pt;
pt.x = pt.y = 0;
m_ilButton.Draw(GetDC(),m_iButtonSatae,pt,ILD_NORMAL);//ILD_MASK,ILD_NORMAL,ILD_TRANSPARENT
}
int CButtonWnd::Create(DWORD dwStyle, CRect &rect, CWnd *pParent, UINT id)
{
int result;
result = CWnd::CreateEx(NULL,//WS_EX_WINDOWEDGE ,
NULL, NULL, dwStyle,
rect.left, rect.top, rect.Width(), rect.Height(),
pParent->GetSafeHwnd(), (HMENU)id) ;
if( !result )
AfxMessageBox("Error creating window");
m_rcBtWnd.top = m_rcBtWnd.left = 0;
m_rcBtWnd.bottom = m_rcBtWnd.top + rect.Height();
m_rcBtWnd.right = m_rcBtWnd.left + rect.Width();
m_id = id;
m_pParent = pParent;
//m_ilButton为CImageList类的一个对象,主要对图片列表做分割工作,
m_ilButton.Create(m_rcBtWnd.Width(), m_rcBtWnd.Height(), TRUE|ILC_COLOR24, 3, 1);
return result;
}
void CButtonWnd::SetButtonImageList(CBitmap *ImgList)
{
m_ilButton.Add(ImgList,RGB(0,0,255));
m_iButtonSatae = 0;
Invalidate();
}
///////////////////////////////////////////////////////////////////////////////
//下面主要完成按钮动态表现的完成
void CButtonWnd::OnLButtonUp(UINT nFlags, CPoint point)
{
m_iButtonSatae = 1;
Invalidate();
GetParent()->PostMessage(WM_MYMESSAGE,m_id);
CWnd::OnLButtonUp(nFlags, point);
}
void CButtonWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
m_iButtonSatae = 2;
Invalidate();
//---要完成相关的屏幕切分工作,先给其父窗口类发CReateMap类发送ID消息!
//---在由其父窗口类(CReateMap)类把ID消息发给其父窗口类DLG类!
CWnd::OnLButtonDown(nFlags, point);
}
void CButtonWnd::OnMouseMove(UINT nFlags, CPoint point)
{
if (!m_bTrackLeave)
{
// 鼠标第一次移入窗口时, 请求一个WM_MOUSELEAVE 消息
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(tme);
tme.hwndTrack = m_hWnd;
tme.dwFlags = TME_LEAVE;
_TrackMouseEvent(&tme);
m_bTrackLeave = true;
// 在这里添加处理鼠标进入的代码 :
m_iButtonSatae = 1;
Invalidate();
}
CWnd::OnMouseMove(nFlags, point);
}
LPARAM CButtonWnd::OnMouseLeave(WPARAM wp, LPARAM lp)
{
m_bTrackLeave = false;
// 在这里添加处理鼠标离开的代码 :
//m_pParent->PostMessage(WM_MYMESSAGE,2,0);
m_iButtonSatae = 0;
Invalidate();
return 0;
}
///////////////////////////////////////////////////////////////////////////////
//按钮的动态显示已经完成!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -