GUI 剖析之控件篇之 滑动条控件

滑动条控件(slider control):

 

滑动条控件和进度条的作用类似,在播放器中经常用到这类控件,不过,实现美丽的这类控件以给用户舒适感,这类控件的利用率就不高了(利用图形接口自绘),不过还是介绍下:

对话框上使用滑动条

添加头文件:

#include "MMSystem.h "

#include "CommCtrl.h "

#include "CommDlg.h "

添加静态库:

Comctl32.lib
Winmm.lib

 

hwndback=GetDlgItem(hDlg, IDC_SLIDER2);// IDC_SLIDER2是滑动条控件的ID

SendMessage(hwndback,TBM_SETRANGE, (WPARAM)1,(LPARAM)MAKELONG(0,1000));

下面就让滑动条动起来:

static float BacklightPercentage=0;

//比如读取文件进度,每读一个文件就改变BacklightPercentage的值。然后执行下面的代码//使控件动起来。

SendMessage(hwndback,TBM_SETPOS, (WPARAM)1,(LPARAM)BacklightPercentage);

 

 

PS:手动创建滑动条

注:下面是我写的一个CSlider类,包括两个文件(.h和.cpp)

//CSliderBar.h

#pragma once
#include "stdafx.h"

class CSlider
{
public:
 CSlider(HWND hParent)
 {
  m_hParent=hParent;
  HINSTANCE hInst=(HINSTANCE)GetWindowLong(m_hParent,GWL_HINSTANCE);
  m_hInstance=hInst;
  InitCommonControls(); // loads common control's DLL

 }
 virtual ~CSlider();
 BOOL CreateEx(UINT x,UINT y,UINT width,UINT height,DWORD dwStyle,UINT ID,LPARAM lParam);
 void Show(DWORD dwStyle);
 void SetRange(UINT nMin,UINT nMax);
 void SetPos(UINT nPos);
 
private:
 HWND m_hParent;
 HINSTANCE m_hInstance;
 HWND m_hSlider;
};

 

 

 

 

//CSliderBar.cpp

#pragma once
#include "stdafx.h"
#include "CSliderBar.h"

 CSlider::~CSlider()
{

}
BOOL  CSlider::CreateEx(UINT x,UINT y,UINT width,UINT height,DWORD dwStyle,UINT ID,LPARAM lParam)
{
 m_hSlider=CreateWindowEx(
  0,                             // no extended styles
  TRACKBAR_CLASS,                // class name
  NULL,          // title (caption)
  WS_CHILD|
  TBS_AUTOTICKS | TBS_ENABLESELRANGE|TBS_TOOLTIPS|WS_BORDER|dwStyle,  // style
  x, y,                        // position
  width, height,                       // size
  m_hParent,                       // parent window
  (HMENU)ID,             // control identifier
  m_hInstance,                       // instance
  NULL                           // no WM_CREATE parameter
  );

 if (m_hSlider!=NULL)
 {
  return TRUE;
 }
 return FALSE;
}

void CSlider::SetRange(UINT nMin,UINT nMax)
{
 SendMessage(m_hSlider, TBM_SETRANGE,
  (WPARAM) TRUE,                   // redraw flag
  (LPARAM) MAKELONG(nMin, nMax));  // min. & max. positions

 SendMessage(m_hSlider, TBM_SETPOS,
  (WPARAM) TRUE,                   // redraw flag
  (LPARAM) 0);

 

 

}
void CSlider::SetPos(UINT nPos)
{
 SendMessage(m_hSlider, TBM_SETPOS,
  (WPARAM) TRUE,                   // redraw flag
  (LPARAM) nPos);
 //SendMessage(m_hSlider, TBM_SETPAGESIZE,
 // 0, (LPARAM) 4);                  // new page size

 SendMessage(m_hSlider, TBM_SETSEL,
  (WPARAM) TRUE,                  // redraw flag
  (LPARAM) MAKELONG(0, nPos));
}
void  CSlider::Show(DWORD dwStyle)
{
 ShowWindow(m_hSlider,dwStyle);
}

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值