Flat Scroll Bar Common Control

.

  Download Source Code and Example

Environment: VC++ 5.0 SP3, commctrl.dll 4.71 or above.
Up to date commctrl.h/comctl32.lib (From Latest Platform SDK)

Microsoft. Internet Explorer Version 4.0 introduces a new visual technology called flat scroll bars. Functionally, flat scroll bars behave just like normal scroll bars. The only difference is they are not displayed three-dimensionally. Flat scroll bar APIs are implemented in version 4.71 and later of Comctl32.dll.

Here's a Thin Wrapper around the Flat ScrollBar API.


Header File


class CFlatScrollBar 
{
// Construction
public:
	CFlatScrollBar();

// Attributes
public:
	CWnd *m_pWnd;

// Operations
public:
	BOOL EnableScrollBar(int, UINT);
	BOOL ShowScrollBar(int code, BOOL);

	BOOL GetScrollRange(int code, LPINT, LPINT);
	BOOL GetScrollInfo(int code, LPSCROLLINFO);
	int  GetScrollPos(int code);
	BOOL GetScrollProp(int propIndex, LPINT);

	int  SetScrollPos(int code, int pos, BOOL fRedraw);
	int  SetScrollInfo(int code, LPSCROLLINFO, BOOL fRedraw);
	int  SetScrollRange(int code, int min, int max, BOOL fRedraw);
	BOOL SetScrollProp(UINT index, int newValue, BOOL);

	BOOL InitializeFlatSB(CWnd *);
	HRESULT UninitializeFlatSB();

// Implementation
public:
	virtual ~CFlatScrollBar();

protected:
};

Implementation File


CFlatScrollBar::CFlatScrollBar()
{
	m_pWnd = NULL;
}

CFlatScrollBar::~CFlatScrollBar()
{
	m_pWnd = NULL;
}

/////////////////////////////////////////////////////////////////////////////
// CFlatScrollBar message handlers

BOOL CFlatScrollBar::EnableScrollBar(int wSBflags,UINT wArrows)
{
	return ::FlatSB_EnableScrollBar(m_pWnd->GetSafeHwnd(),wSBflags,wArrows);
}

BOOL CFlatScrollBar::ShowScrollBar(int code, BOOL bShow)
{
	return ::FlatSB_ShowScrollBar(m_pWnd->GetSafeHwnd(),code, bShow);
}

BOOL CFlatScrollBar::GetScrollRange(int code, LPINT lpMinPos, LPINT lpMaxPos)
{
	return ::FlatSB_GetScrollRange(m_pWnd->GetSafeHwnd(),code,lpMinPos,lpMaxPos);
}

BOOL CFlatScrollBar::GetScrollInfo(int code, LPSCROLLINFO lpsi)
{
	return ::FlatSB_GetScrollInfo(m_pWnd->GetSafeHwnd(),code,lpsi);
}

int  CFlatScrollBar::GetScrollPos(int code)
{
	return ::FlatSB_GetScrollPos(m_pWnd->GetSafeHwnd(),code);
}

BOOL CFlatScrollBar::GetScrollProp(int propIndex, LPINT pValue)
{
	return ::FlatSB_GetScrollProp(m_pWnd->GetSafeHwnd(),propIndex, pValue);
}

int  CFlatScrollBar::SetScrollPos(int code, int pos, BOOL fRedraw)
{
	return ::FlatSB_SetScrollPos(m_pWnd->GetSafeHwnd(),code,pos,fRedraw);
}

int  CFlatScrollBar::SetScrollInfo(int code, LPSCROLLINFO lpsi, BOOL fRedraw)
{
	return ::FlatSB_SetScrollInfo(m_pWnd->GetSafeHwnd(),code,lpsi,fRedraw);
}

int  CFlatScrollBar::SetScrollRange(int code, int min, int max, BOOL fRedraw)
{
	return ::FlatSB_SetScrollRange(m_pWnd->GetSafeHwnd(),code,min,max,fRedraw);
}

BOOL CFlatScrollBar::SetScrollProp(UINT index, int newValue, BOOL fRedraw)
{
	return ::FlatSB_SetScrollProp(m_pWnd->GetSafeHwnd(),index,newValue,fRedraw);
}

BOOL CFlatScrollBar::InitializeFlatSB(CWnd *pWnd)
{
	m_pWnd = pWnd;
	return ::InitializeFlatSB(pWnd->GetSafeHwnd());
}

HRESULT CFlatScrollBar::UninitializeFlatSB()
{
	return ::UninitializeFlatSB(m_pWnd->GetSafeHwnd());
}

To use CFlatScrollBar on a CEdit Control inside a CDialog:

BOOL CFlatScrollDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	...
	scrollbar.InitializeFlatSB(&m_edit);
	scrollbar.EnableScrollBar(SB_BOTH,ESB_ENABLE_BOTH);
	...
}

Last updated: 16 June 1998