http://hi.baidu.com/yaoliang11/blog/item/bc1517ee80ab5207fcfa3cf3.html
1.滚动条监控类的头文件:
#include <eiksbobs.h>
#include <e32base.h>
class MCustomScrollBarObserver
{
public:
virtual void ChangeRectsCoordinates(TInt newPosition)=0;
};
class CSbObserver : public CBase, public MEikScrollBarObserver
{
public:
CSbObserver(){};
public:
void HandleScrollEventL(CEikScrollBar* aScrollBar,TEikScrollEvent aEventType);
TInt sbPosition;
TInt GetPosition(){return sbPosition;}
MCustomScrollBarObserver* iScrollBarObserver;
void SetCustomScrollBarObserver(MCustomScrollBarObserver* aObserver){iScrollBarObserver = aObserver;}
};
2.滚动条监控类的实现:
void CSbObserver::HandleScrollEventL(CEikScrollBar* aScrollBar,
TEikScrollEvent aEventType)
{
switch (aEventType)
{
case EEikScrollThumbDragVert:
{
sbPosition = aScrollBar->ThumbPosition();
break;
}
case EEikScrollThumbReleaseVert:
{
sbPosition = aScrollBar->ThumbPosition();
if(iScrollBarObserver)
{
iScrollBarObserver->ChangeRectsCoordinates(sbPosition);
}
break;
}
case EEikScrollPageDown:
{
sbPosition = aScrollBar->ThumbPosition();
break;
}
case EEikScrollPageUp:
{
sbPosition = aScrollBar->ThumbPosition();
break;
}
default:
TInt b = 0;
// SetActualElement(aScrollBar->ThumbPosition());
break;
}
}
3.使用监控滚动条类:
1) 在使用的类中继承MCustomScrollBarObserver,并实现其纯虚函数;
2) 对需要监控的对象进行注册,比如CEikRichTextEditor类;
iEditor = new (ELeave) CEikRichTextEditor();
iEditor ->SetContainerWindowL(*this);
iEditor ->ConstructL(this, 0, 0, CEikEdwin::EReadOnly
| CEikEdwin::EAvkonDisableCursor | CEikEdwin::ENoCustomDraw,
EGulFontControlAll, EGulNoSymbolFonts);
iEditor ->CreateScrollBarFrameL()->SetScrollBarVisibilityL(
CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOn);
iScrollObserver = new (ELeave) CSbObserver();
iEditor ->ScrollBarFrame()->SetScrollBarFrameObserver( iScrollObserver);
iScrollObserver->SetCustomScrollBarObserver(this);
这样就监视了我们RichText的滚动条了,只要我们拖动之后,就会进入到响应函数,回调在本类的实现的虚函数中。可以自己定义,比如得到滚动条拖动的距离等。