能改变slider里面的那个滑块的形状么?我想让它成为竖线(一条直线)。而不是控件本身里面SYTLE属性的设置,那只能变变箭头方向而已

解决方案 »

  1.   

    只能采用自绘制了
    DocWizard C++ 程序文档生成工具 http://www.betajin.com/alphasun/index.htm
      

  2.   

    看看吧:
    http://www.codeguru.com/controls/CIconProgress.html
      

  3.   

    以前gameboy999发给我的,我改了改,thanks for gameboy999#if !defined(AFX_MYSLIDERCTRL_H__E644AAD1_5156_4773_A426_324DDC0D4CBB__INCLUDED_) 
    #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_) 
      

  4.   

    // MySliderCtrl.cpp : implementation file 
    // #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);