MFC自带的滑动条的样子是这样的。

比较难看,所以需要重绘下,重绘后的样子是这样的。

代码如下:

CustomSliderCtr.h

#pragma once

// CCustomSliderCtr

class CCustomSliderCtr : public CSliderCtrl
{
DECLARE_DYNAMIC(CCustomSliderCtr) public:
CCustomSliderCtr();
virtual ~CCustomSliderCtr(); protected:
afx_msg void OnPaint();
  afx_msg void OnLButtonDown(UINT nFlags, CPoint point) ;
void CustDraw(CDC *pDc);
DECLARE_MESSAGE_MAP()
};

CustomSliderCtr.cpp

// CustomSliderCtr.cpp : 实现文件
// #include "stdafx.h"
#include "CustomSliderCtr.h" // CCustomSliderCtr IMPLEMENT_DYNAMIC(CCustomSliderCtr, CSliderCtrl) CCustomSliderCtr::CCustomSliderCtr()
{ } CCustomSliderCtr::~CCustomSliderCtr()
{
} BEGIN_MESSAGE_MAP(CCustomSliderCtr, CSliderCtrl)
ON_WM_PAINT()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP() // CCustomSliderCtr 消息处理程序 void CCustomSliderCtr::OnPaint()
{
CSliderCtrl::OnPaint();
CDC *pDc = GetDoc();
CustDraw(pDc);
} void CCustomSliderCtr::CustDraw(CDC *pDc)
{ COLORREF colorLeft(SLIDER_LEFT_COLOR); COLORREF colorChannel(SlIDER_BK_COLOR);
CPen penChannel(PS_DASHDOTDOT, 2, colorChannel);
CBrush brushChannel;
brushChannel.CreateSolidBrush(colorChannel); COLORREF colorThumb(SLIDER_THUMB_COLOR);
CPen penThumb(PS_DASHDOTDOT, 2, colorThumb);
CBrush brushThumb;
brushThumb.CreateSolidBrush(colorThumb); CRect clientRect;
GetClientRect(clientRect); CRect channelRect;
GetChannelRect(&channelRect); //clientRect.bottom /= 2; pDc->SetBkMode(TRANSPARENT); pDc->FillSolidRect(clientRect, DIALOG_BKCOLOR); clientRect.left = channelRect.left;
clientRect.right = channelRect.right; pDc->FillSolidRect(clientRect, colorChannel); pDc->Draw3dRect(clientRect, colorChannel, colorChannel); CRect thumbRect;
GetThumbRect(thumbRect); thumbRect.bottom *= 2; CRect leftRect;
leftRect.left = clientRect.left;
leftRect.top = clientRect.top;
leftRect.bottom = clientRect.bottom;
leftRect.right = thumbRect.left; pDc->SelectObject(&brushThumb);
pDc->SelectObject(&penThumb); pDc->FillSolidRect(leftRect, colorLeft); pDc->Draw3dRect(leftRect, colorLeft, colorLeft); pDc->Ellipse(thumbRect);
} void CCustomSliderCtr::OnLButtonDown(UINT nFlags, CPoint point)
{
CSliderCtrl::OnLButtonDown(nFlags, point);
CRect rectClient,rectChannel;
GetClientRect(rectClient);
GetChannelRect(rectChannel);
int nMax = 0;
int nMin = 0;
GetRange(nMin,nMax);
int nPos = (nMax - nMin)*(point.x - rectClient.left - rectChannel.left)/(rectChannel.right - rectChannel.left);
SetPos(nPos);
}

 

 其中颜色定义

#define SlIDER_BK_COLOR RGB(192, 192, 192)
#define SLIDER_LEFT_COLOR RGB(148, 40, 255)
#define SLIDER_THUMB_COLOR RGB(240, 240, 240)
#define DIALOG_BKCOLOR RGB(201,227,253)

MFC 滑动条的重绘的更多相关文章

  1. 【VS开发】MFC滑动条 CSliderCtrl

    在MFC中滑动条(CSliderCtrl)是个常用的控件,用法如下: 主要要方法有: 1.设置.取得滑动范围: void SetRange( int nMin, int nMax, BOOL bRed ...

  2. Android自定义Seekbar滑动条,Pop提示跟随滑动按钮一起滑动

    由于项目需要做出此效果,自定义写了一个. 效果图 思路: 原始的seekbar只有滑动条并没有下方的提示文字,所以我们必须要继承Seekbar重写这个控件. 代码: 在values文件夹下新建attr ...

  3. MFC窗口重绘

    Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后 ...

  4. 【转】VC的MFC中重绘函数的使用总结(整理)

    原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数MFC提供了三个函数用于窗口重绘Inva ...

  5. MFC重绘函数:InvalidateRect(), Invalidate()和UpdateWindow()

    1. 重绘消息 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化) WM_NCPAINT系统会自己搞定 WM_PAINT消 ...

  6. 【MFC】MFC中窗口重绘

    MFC中窗口重绘 摘自:http://blog.csdn.net/shuilan0066/article/details/5859057 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重 ...

  7. MFC重绘原理的关键理解

    // ====================Windows重绘消息与函数========================== 得到桌面窗口的句柄,然后再绘图HWND GetDesktopWindow ...

  8. MFC中窗口重绘

    搬家于CSDN 2015-05-14 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗 ...

  9. iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

随机推荐

  1. 用rose画UML图(用例图,活动图)

    用rose画UML图(用例图,活动图) 首先,安装rose2003,电脑从win8升到win10以后,发现win10并不支持rose2003的安装,换了rose2007以后,发现也不可以. 解决途径: ...

  2. Scrum Meeting 20161209

    本周Sprint Master 史少帅 会议概要 工作总结: · 陈双, 王永超: 打分功能合并到主分支并且测试成功 · 鲍航波 录音上传.下载接口封装完成,可供调用 · 侯宇泰, 史少帅: 修复录音 ...

  3. C#操作XML的通用方法总结

    转载至http://www.cnblogs.com/pengze0902/p/5947997.html 1.创建xml 复制代码 /// <summary> /// 创建XML文档 /// ...

  4. maven报brors occurred during the build

    原因分析: 此问题一般发生在eclipse保存文件并自动部署时候.本人在写项目的时候,还没等部署好,关闭了了eclipse,结果出现了这种情况.有一种产生此错误的原因是因为此项目不不是由eclipse ...

  5. asp.net core输出中文乱码的问题

    摘要 在学习asp.net core的时候,尝试在控制台,或者页面上输出中文,会出现乱码的问题. 问题重现 新建控制台和站点 public class Program { public static ...

  6. C#对于文件的读写

    C#文件的读写操作 转载请注明出处 http://www.cnblogs.com/Huerye/ /// <summary> /// 写入txt文件 /// </summary> ...

  7. 百度链接提交-主动推送Python版

    百度目前提供自动提交链接和手动提交链接两种方式,其中自动提交又分为主动推送.自动推送和sitemap三种形式,按百度的说法,主动推送的效果最好,百度站长平台后台也提供了curl.php.ruby的推送 ...

  8. dispatcherServlet 真正处理请求的源码解析

    学习博客: http://wujiu.iteye.com/blog/2214603

  9. apache和tomcat有什么不同,为什么要整合apache 和tomcat

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...

  10. js储存参数的数组arguments

    js函数中有个储存参数的数组arguments ,所有函数获得的参数会被编译器挨个保存到这个数组中.于是我们的js版支持参数默认值的函数可以通过另外一种变通的方法实现 function simue ( ...