您的位置:首页 > 产品设计 > UI/UE

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

2012-11-18 12:30 190 查看
滑动条控件(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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: