|
在MFC中实现平面滚动条(VC++) 把MFC中的CScrollView的风格换成平面滚动条后,可以使滚动条的形状,背景色等外观改变。
BOOL FlatSB_SetScrollProp( HWND hwnd, UINT index, INT_PTR newValue, BOOL fRedraw ); 这个API通过参数index的指定,改变滚动条的立体/平面风格,背景色等。 int FlatSB_SetScrollInfo( HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw ); 调用这个API,可以在需要的时候重新设定滚动条的位置等情報,以维持平面外形維持不变。 例:填写CScrollView的派生类CScrlView,实现上图的外观。 #include "commctrl.h"
#pragma comment(lib, "Comctl32.lib")
void CScrlView::OnDraw(CDC* pDC)
{
CScrlDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString strText;
int iXPos = GetScrollPos(SB_HORZ);
int iYPos = GetScrollPos(SB_VERT);
strText.Format(_T("<%d,%d>"), iXPos, iYPos);
pDC->TextOut(iXPos, iYPos, strText);
}
void CScrlView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
sizeTotal.cx = 2000;
sizeTotal.cy = 1000;
SetScrollSizes(MM_TEXT, sizeTotal);
BOOL bRet = ::InitializeFlatSB(m_hWnd);
::FlatSB_SetScrollProp(m_hWnd, WSB_PROP_VSTYLE, FSB_FLAT_MODE, TRUE);
::FlatSB_SetScrollProp(m_hWnd, WSB_PROP_HSTYLE, FSB_FLAT_MODE, TRUE);
::FlatSB_SetScrollProp(m_hWnd, WSB_PROP_HBKGCOLOR, 0x000000ff, TRUE);
::FlatSB_SetScrollProp(m_hWnd, WSB_PROP_VBKGCOLOR, 0x0000ff00, TRUE);
}
void CScrlView::OnSize(UINT nType, int cx, int cy)
{
CScrollView::OnSize(nType, cx, cy);
SCROLLINFO scrollinfo;
memset(&scrollinfo, 0, sizeof(SCROLLINFO));
GetScrollInfo(SB_HORZ, &scrollinfo);
FlatSB_SetScrollInfo(m_hWnd, SB_HORZ, &scrollinfo, TRUE);
memset(&scrollinfo, 0, sizeof(SCROLLINFO));
GetScrollInfo(SB_VERT, &scrollinfo);
FlatSB_SetScrollInfo(m_hWnd, SB_VERT, &scrollinfo, TRUE);
Invalidate();
}
void CScrlView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
SCROLLINFO scrollinfo;
memset(&scrollinfo, 0, sizeof(SCROLLINFO));
GetScrollInfo(SB_VERT, &scrollinfo);
FlatSB_SetScrollInfo(m_hWnd, SB_VERT, &scrollinfo, TRUE);
Invalidate();
}
void CScrlView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
SCROLLINFO scrollinfo;
memset(&scrollinfo, 0, sizeof(SCROLLINFO));
GetScrollInfo(SB_HORZ, &scrollinfo);
FlatSB_SetScrollInfo(m_hWnd, SB_HORZ, &scrollinfo, TRUE);
Invalidate();
}
|