MFC 滑动条的重绘
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 滑动条的重绘的更多相关文章
- 【VS开发】MFC滑动条 CSliderCtrl
在MFC中滑动条(CSliderCtrl)是个常用的控件,用法如下: 主要要方法有: 1.设置.取得滑动范围: void SetRange( int nMin, int nMax, BOOL bRed ...
- Android自定义Seekbar滑动条,Pop提示跟随滑动按钮一起滑动
由于项目需要做出此效果,自定义写了一个. 效果图 思路: 原始的seekbar只有滑动条并没有下方的提示文字,所以我们必须要继承Seekbar重写这个控件. 代码: 在values文件夹下新建attr ...
- MFC窗口重绘
Invalidate()与 UpdateAllViews()有什么分别 Invalidate()是让程序重画窗口. UpdateAllViews()是在DOC/VIEW结构中, 当一个视图的数据改变后 ...
- 【转】VC的MFC中重绘函数的使用总结(整理)
原文网址:http://www.cnblogs.com/x8023z/archive/2008/12/09/mfc33.html 在刷新窗口时经常要调用重绘函数MFC提供了三个函数用于窗口重绘Inva ...
- MFC重绘函数:InvalidateRect(), Invalidate()和UpdateWindow()
1. 重绘消息 当需要更新或者重绘窗口时,一般系统会发出两个消息WM_PAINT(通知客户区有变化)和WM_NCPAINT(通知非客户区有变化) WM_NCPAINT系统会自己搞定 WM_PAINT消 ...
- 【MFC】MFC中窗口重绘
MFC中窗口重绘 摘自:http://blog.csdn.net/shuilan0066/article/details/5859057 在刷新窗口时经常要调用重绘函数 MFC提供了三个函数用于窗口重 ...
- MFC重绘原理的关键理解
// ====================Windows重绘消息与函数========================== 得到桌面窗口的句柄,然后再绘图HWND GetDesktopWindow ...
- MFC中窗口重绘
搬家于CSDN 2015-05-14 MFC提供了三个函数用于窗口重绘 InvalidateRect(&Rect) Invalidate() UpdateWindow() 当需要更新或者重绘窗 ...
- iOS之UI--Quartz2D的入门应用--重绘下载圆形进度条
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
随机推荐
- 架构师养成记--12.Concurrent工具类CyclicBarrier和CountDownLatch
java.util.concurrent.CyclicBarrier 一组线程共同等待,直到达到一个公共屏障点. 举个栗子,百米赛跑中,所有运动员都要等其他运动员都准备好后才能一起跑(假如没有发令员) ...
- 人脸识别引擎SeetaFace编译 ubuntu
00.SeetaFace简介 SeetaFace Engine is an open source C++ face recognition engine, which can run on CPU ...
- [bigdata] hadoop 参数配置解析
ResourceManager相关配置参数 yarn-site.xml 中配置 yarn.resourcemanager.address ResourceManager 对客户端暴露的地址.客户端通过 ...
- CSS之div和span标签
div和span是非常重要的标签,div的语义是division"分割": span的语义就是span"范围.跨度". 这两个东西,都是最最重要的"盒 ...
- checkbox全选与非全选之间的切换
<div id="congras_area"> <input type="checkbox" name="" id=&qu ...
- 基于linux(centos)的svn环境搭建
1. 安装svn yum intall subversion 2. 查看安装位置 rpm -ql subversion 3. 检验svn是否安装成功,查看帮助 svn --help , 看到下图表示成 ...
- Opera 浏览器各版本下载地址
新版本下载地址: 正式分支: http://get.opera.com/ftp/pub/opera/desktop/ beta分支:http://get.opera.com/ftp/pub/opera ...
- SQL语句判断数据库、表、字段是否存在
from master..sysdatabases where name='TestDB') print 'TestDB存在'else print 'TestDB不存在' --判断表[Te ...
- 基础知识(05) -- Java中的类
Java中的类 1.类的概念 2.类中的封装 3.对象的三大特征 4.对象状态 5.类与类之间的关系 ------------------------------------------------- ...
- 学习实战java虚拟机的计划图
啥也不说了,实战java虚拟机,好好学习,天天向上! <实战java虚拟机>一书Q交流群:397196583