DECLARE_MESSAGE_MAP() }; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MYSLIDERCTRL_H__E644AAD1_5156_4773_A426_324DDC0D4CBB__INCLUDED_)
DocWizard C++ 程序文档生成工具 http://www.betajin.com/alphasun/index.htm
http://www.codeguru.com/controls/CIconProgress.html
#define AFX_MYSLIDERCTRL_H__E644AAD1_5156_4773_A426_324DDC0D4CBB__INCLUDED_ #if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// Slider2.h : header file
// /////////////////////////////////////////////////////////////////////////////
// CMySliderCtrl window class CMySliderCtrl : public CSliderCtrl
{
// Construction
public:
CMySliderCtrl();
virtual ~CMySliderCtrl();
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CMySliderCtrl)
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
//}}AFX_VIRTUAL
// Implementation
private:
BOOL m_bMouseDown;
int m_bIn; //
CBrush m_brBk; // background brush
// Generated message map functions
protected:
//{{AFX_MSG(CMySliderCtrl)
// afx_msg void OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct);
// afx_msg void OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult);
// afx_msg void OnTimer(UINT nIDEvent);
// afx_msg void ParentNotify(UINT message, LPARAM lParam);
// afx_msg void OnReleasedcapture(NMHDR* pNMHDR, LRESULT* pResult);
afx_msg void OnPaint();
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
}; ///////////////////////////////////////////////////////////////////////////// //{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_MYSLIDERCTRL_H__E644AAD1_5156_4773_A426_324DDC0D4CBB__INCLUDED_)
// #include "stdafx.h"
#include "slider2.h" #ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif /////////////////////////////////////////////////////////////////////////////
// CMySliderCtrl CMySliderCtrl::CMySliderCtrl()
{
m_bMouseDown = FALSE; // Create the background brush.
m_brBk.CreateSolidBrush(g_clrXPBack);
} CMySliderCtrl::~CMySliderCtrl()
{
m_brBk.DeleteObject();
}
BEGIN_MESSAGE_MAP(CMySliderCtrl, CSliderCtrl)
//{{AFX_MSG_MAP(CMySliderCtrl)
ON_WM_SETCURSOR()
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
ON_WM_PAINT()
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////
// CMySliderCtrl message handlers BOOL CMySliderCtrl::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_MOUSELEAVE)
m_bIn = FALSE;
return CSliderCtrl::PreTranslateMessage(pMsg);
} void CMySliderCtrl::OnPaint()
{
CPaintDC dc(this);
CDC memdc;
CBitmap bitmap; CRect rect;
this->GetClientRect(&rect);
// Create a memory copy to draw to.
memdc.CreateCompatibleDC(&dc);
bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
memdc.SelectObject(&bitmap);
// Fill the background with bitmap brush
memdc.FillRect(&rect, &CBrush(::GetSysColor(COLOR_BTNFACE)));
CPen pen(PS_SOLID, 1, g_clrXPBorder);
CBrush brush(g_clrXPBack);
memdc.SelectObject(&pen);
memdc.SelectObject(&brush);
memdc.MoveTo(10, rect.Height()/3);
memdc.LineTo(rect.Width() - 3, rect.Height()/3);
memdc.MoveTo(10, rect.Height()*2/3);
memdc.LineTo(rect.Width() - 3, rect.Height()*2/3); CRect rectThumb;
this->GetThumbRect(rectThumb);//这就是你要的滑块位置
int page = GetPos();
int width = 0; // Init rect width
// Fit rect to page string width
if(page == 0)
width = 8;
while(page > 0)
{
width += 8; // 7 pixels per char
page /= 10;
}
int middle = (rectThumb.left + rectThumb.right)/2;
rectThumb.left = middle - width/2;
rectThumb.right = middle + width/2;
memdc.RoundRect(rectThumb, CPoint(5, 5));
char ch[100];
sprintf(ch,"%d", GetPos());
memdc.SetTextColor(0x00ff00ff);
memdc.SetBkMode(TRANSPARENT);
memdc.TextOut(rectThumb.left, 3, ch);
// memdc.Rectangle(&rect); dc.BitBlt(rect.left ,rect.top ,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY); // dc.FillSolidRect(&rect,RGB((BYTE)R, (BYTE)G, (BYTE)B)); // Delete the tempory resources.
memdc.DeleteDC();
bitmap.DeleteObject();
}BOOL CMySliderCtrl::OnEraseBkgnd(CDC* pDC)
{
return 1;
} BOOL CMySliderCtrl::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
m_bIn = TRUE;
TRACKMOUSEEVENT event;
event.cbSize = sizeof(event);
event.dwFlags = TME_LEAVE;
event.hwndTrack = GetSafeHwnd();
event.dwHoverTime = HOVER_DEFAULT;
_TrackMouseEvent(&event); return CSliderCtrl::OnSetCursor(pWnd, nHitTest, message);
} void CMySliderCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
if(!m_bMouseDown)
{
m_bMouseDown = TRUE;
SetCapture();
SetFocus();
int range = GetRangeMax() - GetRangeMin();
CRect rcWin;
GetClientRect(&rcWin);
int pos = range*(point.x - rcWin.left)/rcWin.Width();
SetPos(pos);
Invalidate(FALSE);
}
CSliderCtrl::OnLButtonDown(nFlags, point);
} void CMySliderCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
m_bMouseDown = FALSE;
CSliderCtrl::OnLButtonUp(nFlags, point);
} void CMySliderCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_bMouseDown)
Invalidate(FALSE);
CSliderCtrl::OnMouseMove(nFlags, point);
}