Здравствуйте, sjman, Вы писали:
[]
S>И ещё вопросик: Как изменить цвет ScrollBar'а если не устраивает стандартный серый?
Я бы так сделал...
// Перерисовка
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcClient;
GetClientRect(&rcClient);
CRect rect(50,50,400,400);
dc.SetViewportOrg(0,-m_nVOffset);
dc.FillSolidRect(&rect, 0x0000FF);
dc.SetViewportOrg(0,0);
dc.FillSolidRect(0,0,rcClient.right,20, 0xFAC0FF);
dc.TextOut(20,1,"Ехал Грека через реку, цап за руку Греку рак! :-))");
}
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// инициализация скролбара
SCROLLINFO scrlInfo;
scrlInfo.cbSize=sizeof(SCROLLINFO);
scrlInfo.fMask=SIF_ALL;
scrlInfo.nMin=0;
scrlInfo.nMax=1000;
scrlInfo.nPage=400;
scrlInfo.nPos=0;
scrlInfo.nTrackPos = 0;
SetScrollInfo(SB_VERT, &scrlInfo);
return 0;
}
// m_nVOffset - переменная-член класса CChildView
void CChildView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CRect rcClient;
GetClientRect(&rcClient);
rcClient.top+=20;
// calc new y position
int yOrig = GetScrollPos(SB_VERT);
int nDelta=0;
// ну тут получаем дельту
switch (nSBCode)
{
case SB_TOP:
nDelta = 0;
break;
case SB_BOTTOM:
nDelta = INT_MAX;
break;
case SB_LINEUP:
nDelta = -10;
break;
case SB_LINEDOWN:
nDelta = 10;
break;
case SB_PAGEUP:
nDelta = -100;
break;
case SB_PAGEDOWN:
nDelta = 100;
break;
case SB_THUMBTRACK:
nDelta = nPos-yOrig;
break;
}
m_nVOffset+=nDelta; // ставим оффсет
SetScrollPos(SB_VERT, m_nVOffset); // ЫуеЫскщддЗщы
ScrollWindow(0, -nDelta, 0, &rcClient); // скрол
CWnd::OnVScroll(nSBCode, nPos, pScrollBar);
}
А цвет я не знаю как поменять! Это вроде нельзя сделать. Можно соорудить свой скролбар... или через CScrollBar::OnPaint рисуй сам.