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. jsp上传图片实时显示

    jsp代码 <div class="form-group" id="caseIma"> <label class="control- ...

  2. [bigdata] hadoop 参数配置解析

    ResourceManager相关配置参数 yarn-site.xml 中配置 yarn.resourcemanager.address ResourceManager 对客户端暴露的地址.客户端通过 ...

  3. gdb调试器的使用

    想要使用gdb调试程序的话,首先需要gcc -g main.c -o test 然后运行gdb test对程序进行调试 l (小写的l,是list的首字母),用以列出程序 回车    是运行上一个命令 ...

  4. Z字形扫描(201412-2)

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  5. thinkphp5.0分页

    第一种 public function index(){ // 页面和面包屑导航 $ttl[] = $this->title; $ttl[] = '管理员列表'; $this->assig ...

  6. Python之路3【知识点】白话Python编码和文件操作

    Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View ...

  7. git gui 还原部分提交文件

    有时候用git提交文件的时候会一起提交了多个文件,但是突然后悔了,想把其中一个文件撤销提交,其他文件不做修改.这个时候该怎么办呢? 我觉得有很多办法,比如可以先checkout到上次的提交,然后复制要 ...

  8. phpstorm常用功能&快捷键(mac)

    command + delete 删除整行 option + comman +enter 下面增加一行 command + D 复制出一行 command + / 单行注释 control + shi ...

  9. iOS中如何监测来电

    http://blog.csdn.net/liujinlongxa/article/details/44207587

  10. Linux htop工具使用详解

    一.Htop的使用简介 大家可能对top监控软件比较熟悉,今天我为大家介绍另外一个监控软件Htop,姑且称之为top的增强版,相比top其有着很多自身的优势.如下: 两者相比起来,top比较繁琐 默认 ...