windows-nt/Source/XPSP1/NT/enduser/netmeeting/ui/nmctl1/splitbar2.h
2020-09-26 16:20:57 +08:00

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__