📄 slidebutton.cpp
字号:
// SlideButton.cpp : implementation file
//
#include "stdafx.h"
#include "MyPlayer.h"
#include "SlideButton.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define ID_TIP 1
/////////////////////////////////////////////////////////////////////////////
// CSlideButton
CSlideButton::CSlideButton()
{
}
CSlideButton::~CSlideButton()
{
}
BEGIN_MESSAGE_MAP(CSlideButton, CButton)
//{{AFX_MSG_MAP(CSlideButton)
ON_WM_SETCURSOR()
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSlideButton message handlers
void CSlideButton::SetBitmap(UINT nBkgnd, UINT nSlide)
{
m_nBkgnd=nBkgnd;
nSlide=m_nSlide;
Invalidate();
}
void CSlideButton::SetDefaultCursor()
{
m_hCursor=LoadCursor(NULL,MAKEINTRESOURCE(32649));
}
void CSlideButton::SetRange(UINT nMin, UINT nMax)
{
m_nMin=nMin;
m_nMax=nMax;
AdjustPosition();
Invalidate();
}
void CSlideButton::SetSlidePos(UINT nPos)
{
m_nCurrentPos=nPos;
Invalidate();
}
void CSlideButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your code to draw the specified item
CDC*pDC;
pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
DrawBackground(pDC);
DrawSlide(pDC);
}
void CSlideButton::PreSubclassWindow()
{
// TODO: Add your specialized code here and/or call the base class
SetDefaultCursor();
CRect rect;
GetClientRect(&rect);
m_ToolTip.Create(this);
m_ToolTip.SetDelayTime(100);
m_ToolTip.SetMaxTipWidth(200);
m_ToolTip.AddTool(this,"",rect,ID_TIP);
CButton::PreSubclassWindow();
}
BOOL CSlideButton::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
m_ToolTip.RelayEvent(pMsg);
return CButton::PreTranslateMessage(pMsg);
}
BOOL CSlideButton::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if(m_hCursor!=NULL){
::SetCursor(m_hCursor);
return TRUE;
}
return FALSE;
}
void CSlideButton::SetButtonCursor(HCURSOR hCursor)
{
m_hCursor=hCursor;
}
void CSlideButton::DrawBackground(CDC*pDC)
{
CDC MemDC;
CBitmap bitmap;
BITMAP m_bitmap;
bitmap.LoadBitmap(m_nBkgnd);
bitmap.GetBitmap(&m_bitmap);
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(&bitmap);
pDC->BitBlt(0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,&MemDC,
0,0,SRCCOPY);
bitmap.DeleteObject();
MemDC.DeleteDC();
}
void CSlideButton::DrawSlide(CDC *pDC)
{
CRect rect;
GetClientRect(&rect);
int nWidth=rect.Width();
CBitmap bitmap;
BITMAP m_bitmap;
CDC MemDC;
bitmap.LoadBitmap(m_nSlide);
bitmap.GetBitmap(&m_bitmap);
nWidth-=m_bitmap.bmWidth;
int x=(int)(((float)nWidth/(float)(m_nMax-m_nMin))*(m_nCurrentPos-m_nMin));
if(x<0)
x=0;
MemDC.CreateCompatibleDC(pDC);
MemDC.SelectObject(&bitmap);
pDC->BitBlt(x,0,m_bitmap.bmWidth,m_bitmap.bmHeight,
&MemDC,0,0,SRCCOPY);
bitmap.DeleteObject();
MemDC.DeleteDC();
m_nWidth=nWidth;
}
void CSlideButton::SetToolTipText(CString strText)
{
m_ToolTip.UpdateTipText(strText,this,ID_TIP);
}
void CSlideButton::Init(UINT nBkgndID, UINT nSlideID, UINT nMax, UINT nMin, CString strTipText)
{
m_nBkgnd=nBkgndID;
m_nSlide=nSlideID;
m_nMax=nMax;
m_nMin=nMin;
m_ToolTip.UpdateTipText(strTipText,this,ID_TIP);
m_nCurrentPos=m_nMin;
pWndParent=GetParent();
AdjustPosition();
}
void CSlideButton::Init(UINT nBkgndID, UINT nSlideID, CString strTipText)
{
m_nBkgnd=nBkgndID;
m_nSlide=nSlideID;
m_nMax=100;
m_nMin=1;
m_ToolTip.UpdateTipText(strTipText,this,ID_TIP);
m_nCurrentPos=m_nMin;
pWndParent=GetParent();
AdjustPosition();
}
UINT CSlideButton::GetSlidePos()
{
return m_nCurrentPos;
}
void CSlideButton::AdjustPosition()
{
CRect rect;
CBitmap bitmap;
BITMAP m_bitmap;
bitmap.LoadBitmap(m_nBkgnd);
bitmap.GetBitmap(&m_bitmap);
GetWindowRect(&rect);
pWndParent->ScreenToClient(&rect);
rect.right=rect.left+m_bitmap.bmWidth;
rect.bottom=rect.top+m_bitmap.bmHeight;
MoveWindow(&rect,TRUE);
bitmap.DeleteObject();
}
void CSlideButton::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect;
GetClientRect(&rect);
if(rect.PtInRect(point)){
m_nCurrentPos=(UINT)((float)point.x/(float)m_nWidth*(m_nMax-m_nMin))+m_nMin;
}
CButton::OnLButtonDown(nFlags, point);
}
void CSlideButton::GetRange(UINT &nMax, UINT &nMin)
{
nMax=m_nMax;
nMin=m_nMin;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -