// File: splitbar.h #ifndef __SplitBar2_h__ #define __SplitBar2_h__ class CSplitBar2 : public CWindowImpl { public: // Datatypes typedef void (WINAPI * PFN_ADJUST)(int dxp, LPARAM lParam); private: HWND m_hwndBuddy; // Buddy window HWND m_hwndParent; // Parent window BOOL m_fCaptured; // TRUE if captured HDC m_hdcDrag; // The captured desktop hdc static int ms_dxpSplitBar; // width of a splitbar window int m_dxSplitter; // Width of the splitter bar int m_dxDragOffset; // Offset of mouse click within splitter (0 - m_dxSplitter) int m_xCurr; // Current x position of bar (m_hwndParent co-ordinates) int m_dxMin; int m_dxMax; // callback data and fn ptrs PFN_ADJUST m_pfnAdjust; LPARAM m_Context; BEGIN_MSG_MAP(CSplitBar2) MESSAGE_HANDLER( WM_LBUTTONDOWN, OnLButtonDown ) END_MSG_MAP() // Message map handlers LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled); public: CSplitBar2(void); ~CSplitBar2(); HRESULT Create(HWND hwndBuddy, PFN_ADJUST pfnAdjust, LPARAM Context); int GetWidth(void) const { return ms_dxpSplitBar; } static CWndClassInfo& GetWndClassInfo(); private: void _DrawBar(void); int _ConstrainDragPoint(short x); void CancelDragLoop(void); BOOL FInitDragLoop(POINT pt); void OnDragMove(POINT pt); void OnDragEnd(POINT pt); private: // Helper Fns void _TrackDrag(POINT pt); static void _UpdateSplitBar(void); }; #endif // __SplitBar2_h__