滑动条控件(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);
}