#ifndef _WAVE_TRACKBAR_HPP_ #define _WAVE_TRACKBAR_HPP_ #ifndef _COMMON_WINDOWS_HPP_ #include #endif #ifndef _COMMON_WINDOW_HPP_ #include #endif #ifndef _COMMON_RECTANGLE_HPP_ #include #endif #ifndef _COMMON_COMMCTRL_HPP_ #include #endif #ifndef _COMMON_STRING_HPP_ #include #endif #ifndef _COMMON_RUBBERCONTROL_HPP_ #include #endif class TrackBar : private RubberControl { public: enum {TBSAutoTicks=TBS_AUTOTICKS,TBSVert=TBS_VERT,TBSHorz=TBS_HORZ,TBSTop=TBS_TOP, TBSBottom=TBS_BOTTOM,TBSLeft=TBS_LEFT,TBSRight=TBS_RIGHT,TBSBoth=TBS_BOTH, TBSNoTicks=TBS_NOTICKS,TBSEnableSelRange=TBS_ENABLESELRANGE, TBSFixedLength=TBS_FIXEDLENGTH,TBSNoThumb=TBS_NOTHUMB}; enum HandlerType{NotifyBottom,NotifyEndTrack,NotifyLineDown,NotifyLineUp,NotifyTop, NotifyPageDown,NotifyPageUp,NotifyThumbPosition,NotifyThumbTrack,HandlerCount}; TrackBar(void); virtual ~TrackBar(); WORD createTrackBar(Window &parentWindow,Rect winRect=Rect(),int itemID=-1,WORD rubberControl=FALSE); void clearSel(WORD redraw=TRUE)const; void clearTics(WORD redraw=TRUE)const; void getChannelRect(Rect &channelRect)const; DWORD getLineSize(void)const; DWORD getNumTics(void)const; DWORD getPageSize(void)const; DWORD getPos(void)const; DWORD getPtrTics(void)const; DWORD getRangeMax(void)const; DWORD getRangeMin(void)const; DWORD getSelEnd(void)const; DWORD getSelStart(void)const; DWORD getThumbLength(void)const; void getThumbRect(Rect &thumbRect)const; int getTic(WORD indexTic)const; int getTicPos(WORD indexTic)const; void setLineSize(LONG lineSize)const; LONG setPageSize(LONG pageSize)const; void setPos(LONG newPosition,WORD control=TRUE)const; void setRange(WORD minPos,WORD maxPos,WORD redraw=TRUE)const; void setRangeMax(LONG maxRange,WORD redraw=TRUE)const; void setRangeMin(LONG minRange,WORD redraw=TRUE)const; void setSel(WORD startPos,WORD endPos,WORD redraw=TRUE)const; void setSelEnd(LONG endPos,WORD redraw=TRUE)const; void setSelStart(LONG endPos,WORD redraw=TRUE)const; void setThumbLength(UINT thumbLength)const; WORD setTic(LONG position)const; void setTicFreq(WORD frequency,LONG position)const; WORD isOkay(void)const; void insertHandler(HandlerType typeHandler,PureCallback *lpCallback); protected: Window &controlWindow(void); private: TrackBar(const TrackBar &someTrackBar); TrackBar &operator=(const TrackBar &someTrackBar); CallbackData::ReturnType verticalScrollHandler(CallbackData &someCallbackData); CallbackData::ReturnType horizontalScrollHandler(CallbackData &someCallbackData); CallbackData::ReturnType sizeHandler(CallbackData &someCallbackData); Callback mHorizontalScrollHandler; Callback mVerticalScrollHandler; Callback mSizeHandler; Block mNotificationHandlers; Window mTrackBar; Window *mlpParentWindow; }; inline TrackBar::TrackBar(const TrackBar &/*someTrackBar*/) { } inline TrackBar &TrackBar::operator=(const TrackBar &/*someTrackBar*/) { return *this; } inline void TrackBar::clearSel(WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_CLEARSEL,(WPARAM)redraw,0L); } inline void TrackBar::clearTics(WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_CLEARTICS,(WPARAM)redraw,0L); } inline void TrackBar::getChannelRect(Rect &channelRect)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_GETCHANNELRECT,0,(LPARAM)&((RECT&)channelRect)); } inline DWORD TrackBar::getLineSize(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETLINESIZE,0,0L); } inline DWORD TrackBar::getNumTics(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETNUMTICS,0,0L); } inline DWORD TrackBar::getPos(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETPOS,0,0L); } inline DWORD TrackBar::getPtrTics(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETPTICS,0,0L); } inline DWORD TrackBar::getRangeMax(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETRANGEMAX,0,0L); } inline DWORD TrackBar::getRangeMin(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETRANGEMIN,0,0L); } inline DWORD TrackBar::getSelEnd(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETSELEND,0,0L); } inline DWORD TrackBar::getSelStart(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETSELSTART,0,0L); } inline DWORD TrackBar::getThumbLength(void)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_GETTHUMBLENGTH,0,0L); } inline void TrackBar::getThumbRect(Rect &thumbRect)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_GETTHUMBRECT,0,(LPARAM)&((RECT&)thumbRect)); } inline int TrackBar::getTic(WORD indexTic)const { if(!isOkay())return -1; return mTrackBar.sendMessage(TBM_GETTIC,(WPARAM)indexTic,0L); } inline int TrackBar::getTicPos(WORD indexTic)const { if(!isOkay())return -1; return mTrackBar.sendMessage(TBM_GETTICPOS,(WPARAM)indexTic,0L); } inline void TrackBar::setLineSize(LONG lineSize)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETLINESIZE,0,lineSize); } inline LONG TrackBar::setPageSize(LONG pageSize)const { if(!isOkay())return -1; return mTrackBar.sendMessage(TBM_SETPAGESIZE,0,pageSize); } inline void TrackBar::setPos(LONG newPosition,WORD control)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETPOS,(WPARAM)control,(LPARAM)newPosition); } inline void TrackBar::setRange(WORD minPos,WORD maxPos,WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETRANGE,(WPARAM)redraw,(LPARAM)MAKELONG(minPos,maxPos)); } inline void TrackBar::setRangeMax(LONG maxRange,WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETRANGEMAX,(WPARAM)redraw,maxRange); } inline void TrackBar::setSel(WORD startPos,WORD endPos,WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETSEL,(WPARAM)redraw,(LPARAM)MAKELONG(startPos,endPos)); } inline void TrackBar::setSelEnd(LONG endPos,WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETSELEND,(WPARAM)redraw,(LPARAM)endPos); } inline void TrackBar::setSelStart(LONG startPos,WORD redraw)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETSELSTART,(WPARAM)redraw,(LPARAM)startPos); } inline void TrackBar::setThumbLength(UINT thumbLength)const { if(!isOkay())return; mTrackBar.sendMessage(TBM_SETTHUMBLENGTH,(WPARAM)thumbLength,0L); } inline WORD TrackBar::setTic(LONG position)const { if(!isOkay())return FALSE; return mTrackBar.sendMessage(TBM_SETTIC,(WPARAM)0,(LPARAM)position); } inline void TrackBar::insertHandler(HandlerType typeHandler,PureCallback *lpCallback) { mNotificationHandlers[typeHandler]=CallbackPointer(lpCallback); } inline WORD TrackBar::isOkay(void)const { return mTrackBar.isValid(); } #endif