68 lines
1.5 KiB
C++
68 lines
1.5 KiB
C++
// File: splitbar.h
|
|
|
|
#ifndef __SplitBar2_h__
|
|
#define __SplitBar2_h__
|
|
|
|
|
|
class CSplitBar2
|
|
: public CWindowImpl<CSplitBar2>
|
|
{
|
|
|
|
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__
|
|
|