#include #include TrackBar::TrackBar(void) : mHorizontalScrollHandler(this,&TrackBar::horizontalScrollHandler), mVerticalScrollHandler(this,&TrackBar::verticalScrollHandler), mSizeHandler(this,&TrackBar::sizeHandler), mlpParentWindow(0) { for(short itemIndex=0;itemIndexremoveHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); mlpParentWindow->removeHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); mlpParentWindow->removeHandler(VectorHandler::SizeHandler,&mSizeHandler); } WORD TrackBar::createTrackBar(Window &parentWindow,Rect winRect,int itemID,WORD rubberControl) { String className(String(TRACKBAR_CLASSA)); if(mTrackBar.isValid())return FALSE; ::InitCommonControls(); mlpParentWindow=&parentWindow; mlpParentWindow->insertHandler(VectorHandler::HorizontalScrollHandler,&mHorizontalScrollHandler); mlpParentWindow->insertHandler(VectorHandler::VerticalScrollHandler,&mVerticalScrollHandler); if(rubberControl)mlpParentWindow->insertHandler(VectorHandler::SizeHandler,&mSizeHandler); if(!winRect.right()||!winRect.bottom())winRect=Rect(CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT); mTrackBar=::CreateWindowEx(WS_EX_CLIENTEDGE|WS_EX_LEFT|WS_EX_LTRREADING|WS_EX_RIGHTSCROLLBAR, className,"",WS_CHILD|WS_VISIBLE|WS_CLIPSIBLINGS|WS_TABSTOP|TBSAutoTicks|TBSBottom|TBSRight|TBSHorz|TBSEnableSelRange, winRect.left(),winRect.top(),winRect.right(),winRect.bottom(), parentWindow,(HMENU)itemID,parentWindow.processInstance(),0); if(!mTrackBar.isValid())return FALSE; initControl(parentWindow); return TRUE; } CallbackData::ReturnType TrackBar::verticalScrollHandler(CallbackData &someCallbackData) { switch(LOWORD(someCallbackData.wParam())) { case TB_BOTTOM : mNotificationHandlers[NotifyBottom].callback(someCallbackData); break; case TB_ENDTRACK : mNotificationHandlers[NotifyEndTrack].callback(someCallbackData); break; case TB_LINEDOWN : mNotificationHandlers[NotifyLineDown].callback(someCallbackData); break; case TB_LINEUP : mNotificationHandlers[NotifyLineUp].callback(someCallbackData); break; case TB_PAGEDOWN : mNotificationHandlers[NotifyPageDown].callback(someCallbackData); break; case TB_PAGEUP : mNotificationHandlers[NotifyPageUp].callback(someCallbackData); break; case TB_THUMBPOSITION : mNotificationHandlers[NotifyThumbPosition].callback(someCallbackData); break; case TB_THUMBTRACK : mNotificationHandlers[NotifyThumbTrack].callback(someCallbackData); break; case TB_TOP : mNotificationHandlers[NotifyTop].callback(someCallbackData); break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType TrackBar::horizontalScrollHandler(CallbackData &someCallbackData) { switch(LOWORD(someCallbackData.wParam())) { case TB_BOTTOM : mNotificationHandlers[NotifyBottom].callback(someCallbackData); break; case TB_ENDTRACK : mNotificationHandlers[NotifyEndTrack].callback(someCallbackData); break; case TB_LINEDOWN : mNotificationHandlers[NotifyLineDown].callback(someCallbackData); break; case TB_LINEUP : mNotificationHandlers[NotifyLineUp].callback(someCallbackData); break; case TB_PAGEDOWN : mNotificationHandlers[NotifyPageDown].callback(someCallbackData); break; case TB_PAGEUP : mNotificationHandlers[NotifyPageUp].callback(someCallbackData); break; case TB_THUMBPOSITION : mNotificationHandlers[NotifyThumbPosition].callback(someCallbackData); break; case TB_THUMBTRACK : mNotificationHandlers[NotifyThumbTrack].callback(someCallbackData); break; case TB_TOP : mNotificationHandlers[NotifyTop].callback(someCallbackData); break; } return (CallbackData::ReturnType)FALSE; } CallbackData::ReturnType TrackBar::sizeHandler(CallbackData &someCallbackData) { if(!mlpParentWindow)return (CallbackData::ReturnType)FALSE; moveControl(*mlpParentWindow,someCallbackData.loWord(),someCallbackData.hiWord()); return (CallbackData::ReturnType)FALSE; } Window &TrackBar::controlWindow(void) { return mTrackBar; }