annotate foosdk/wtl/Include/atlsplit.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 // Windows Template Library - WTL version 10.0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 // Copyright (C) Microsoft Corporation, WTL Team. All rights reserved.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 // This file is a part of the Windows Template Library.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 // The use and distribution terms for this software are covered by the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 // Microsoft Public License (http://opensource.org/licenses/MS-PL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // which can be found in the file MS-PL.txt at the root folder.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 #ifndef __ATLSPLIT_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 #define __ATLSPLIT_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 #ifndef __ATLAPP_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 #error atlsplit.h requires atlapp.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 #ifndef __ATLWIN_H__
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 #error atlsplit.h requires atlwin.h to be included first
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 // Classes in this file:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 //
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 // CSplitterImpl<T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 // CSplitterWindowImpl<T, TBase, TWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 // CSplitterWindowT<t_bVertical> - CSplitterWindow, CHorSplitterWindow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 // CSplitterImpl - Provides splitter support to any window
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 // Splitter panes constants
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 #define SPLIT_PANE_LEFT 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 #define SPLIT_PANE_RIGHT 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 #define SPLIT_PANE_TOP SPLIT_PANE_LEFT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 #define SPLIT_PANE_BOTTOM SPLIT_PANE_RIGHT
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 #define SPLIT_PANE_NONE -1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 // Splitter extended styles
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 #define SPLIT_PROPORTIONAL 0x00000001
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 #define SPLIT_NONINTERACTIVE 0x00000002
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 #define SPLIT_RIGHTALIGNED 0x00000004
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 #define SPLIT_BOTTOMALIGNED SPLIT_RIGHTALIGNED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 #define SPLIT_GRADIENTBAR 0x00000008
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 #define SPLIT_FLATBAR 0x00000020
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 #define SPLIT_FIXEDBARSIZE 0x00000010
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 // Note: SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED/SPLIT_BOTTOMALIGNED are
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 // mutually exclusive. If both are set, splitter defaults to SPLIT_PROPORTIONAL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 // Also, SPLIT_FLATBAR overrides SPLIT_GRADIENTBAR if both are set.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 template <class T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 class CSplitterImpl
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 enum { m_nPanesCount = 2, m_nPropMax = INT_MAX, m_cxyStep = 10 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 bool m_bVertical;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 HWND m_hWndPane[m_nPanesCount];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 RECT m_rcSplitter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 int m_xySplitterPos; // splitter bar position
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 int m_xySplitterPosNew; // internal - new position while moving
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 HWND m_hWndFocusSave;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 int m_nDefActivePane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 int m_cxySplitBar; // splitter bar width/height
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 HCURSOR m_hCursor;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 int m_cxyMin; // minimum pane size
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 int m_cxyBarEdge; // splitter bar edge
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 bool m_bFullDrag;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 int m_cxyDragOffset; // internal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 int m_nProportionalPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 bool m_bUpdateProportionalPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 DWORD m_dwExtendedStyle; // splitter specific extended styles
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 int m_nSinglePane; // single pane mode
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 int m_xySplitterDefPos; // default position
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 bool m_bProportionalDefPos; // porportinal def pos
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 // Constructor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 CSplitterImpl(bool bVertical = true) :
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 m_bVertical(bVertical), m_xySplitterPos(-1), m_xySplitterPosNew(-1), m_hWndFocusSave(NULL),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 m_nDefActivePane(SPLIT_PANE_NONE), m_cxySplitBar(4), m_hCursor(NULL), m_cxyMin(0), m_cxyBarEdge(0),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 m_bFullDrag(true), m_cxyDragOffset(0), m_nProportionalPos(0), m_bUpdateProportionalPos(true),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 m_dwExtendedStyle(SPLIT_PROPORTIONAL), m_nSinglePane(SPLIT_PANE_NONE),
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 m_xySplitterDefPos(-1), m_bProportionalDefPos(false)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 m_hWndPane[SPLIT_PANE_LEFT] = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 m_hWndPane[SPLIT_PANE_RIGHT] = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 ::SetRectEmpty(&m_rcSplitter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 // Attributes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 void SetSplitterRect(LPRECT lpRect = NULL, bool bUpdate = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 if(lpRect == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 pT->GetClientRect(&m_rcSplitter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 m_rcSplitter = *lpRect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 if(IsProportional())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 UpdateProportionalPos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 else if(IsRightAligned())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 UpdateRightAlignPos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 if(bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 void GetSplitterRect(LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 ATLASSERT(lpRect != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 *lpRect = m_rcSplitter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 bool SetSplitterPos(int xyPos = -1, bool bUpdate = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 if(xyPos == -1) // -1 == default position
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 if(m_bProportionalDefPos)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 ATLASSERT((m_xySplitterDefPos >= 0) && (m_xySplitterDefPos <= m_nPropMax));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 xyPos = ::MulDiv(m_xySplitterDefPos, m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge, m_nPropMax);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 xyPos = ::MulDiv(m_xySplitterDefPos, m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge, m_nPropMax);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 else if(m_xySplitterDefPos != -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 xyPos = m_xySplitterDefPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 else // not set, use middle position
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 xyPos = (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 xyPos = (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 // Adjust if out of valid range
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 int cxyMax = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 cxyMax = m_rcSplitter.right - m_rcSplitter.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 cxyMax = m_rcSplitter.bottom - m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 if(xyPos < m_cxyMin + m_cxyBarEdge)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 xyPos = m_cxyMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 else if(xyPos > (cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 xyPos = cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 // Set new position and update if requested
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 bool bRet = (m_xySplitterPos != xyPos);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 m_xySplitterPos = xyPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 if(m_bUpdateProportionalPos)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 if(IsProportional())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 StoreProportionalPos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 else if(IsRightAligned())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 StoreRightAlignPos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 m_bUpdateProportionalPos = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 if(bUpdate && bRet)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 int GetSplitterPos() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 return m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 void SetSplitterPosPct(int nPct, bool bUpdate = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 ATLASSERT((nPct >= 0) && (nPct <= 100));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 m_nProportionalPos = ::MulDiv(nPct, m_nPropMax, 100);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 UpdateProportionalPos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 if(bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 int GetSplitterPosPct() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 int cxyTotal = m_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 return ((cxyTotal > 0) && (m_xySplitterPos >= 0)) ? ::MulDiv(m_xySplitterPos, 100, cxyTotal) : -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 bool SetSinglePaneMode(int nPane = SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210 ATLASSERT((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT) || (nPane == SPLIT_PANE_NONE));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 if(!((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT) || (nPane == SPLIT_PANE_NONE)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214 if(nPane != SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 if(::IsWindowVisible(m_hWndPane[nPane]) == FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217 ::ShowWindow(m_hWndPane[nPane], SW_SHOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 int nOtherPane = (nPane == SPLIT_PANE_LEFT) ? SPLIT_PANE_RIGHT : SPLIT_PANE_LEFT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 ::ShowWindow(m_hWndPane[nOtherPane], SW_HIDE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 if(m_nDefActivePane != nPane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221 m_nDefActivePane = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 else if(m_nSinglePane != SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 int nOtherPane = (m_nSinglePane == SPLIT_PANE_LEFT) ? SPLIT_PANE_RIGHT : SPLIT_PANE_LEFT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226 ::ShowWindow(m_hWndPane[nOtherPane], SW_SHOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 m_nSinglePane = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 int GetSinglePaneMode() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 return m_nSinglePane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 DWORD GetSplitterExtendedStyle() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 return m_dwExtendedStyle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 DWORD SetSplitterExtendedStyle(DWORD dwExtendedStyle, DWORD dwMask = 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 DWORD dwPrevStyle = m_dwExtendedStyle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 if(dwMask == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 m_dwExtendedStyle = dwExtendedStyle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 m_dwExtendedStyle = (m_dwExtendedStyle & ~dwMask) | (dwExtendedStyle & dwMask);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 #ifdef _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 if(IsProportional() && IsRightAligned())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 ATLTRACE2(atlTraceUI, 0, _T("CSplitterImpl::SetSplitterExtendedStyle - SPLIT_PROPORTIONAL and SPLIT_RIGHTALIGNED are mutually exclusive, defaulting to SPLIT_PROPORTIONAL.\n"));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 #endif // _DEBUG
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 return dwPrevStyle;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261 void SetSplitterDefaultPos(int xyPos = -1)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 m_xySplitterDefPos = xyPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 m_bProportionalDefPos = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 void SetSplitterDefaultPosPct(int nPct)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 ATLASSERT((nPct >= 0) && (nPct <= 100));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271 m_xySplitterDefPos = ::MulDiv(nPct, m_nPropMax, 100);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 m_bProportionalDefPos = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 // Splitter operations
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 void SetSplitterPanes(HWND hWndLeftTop, HWND hWndRightBottom, bool bUpdate = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 m_hWndPane[SPLIT_PANE_LEFT] = hWndLeftTop;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 m_hWndPane[SPLIT_PANE_RIGHT] = hWndRightBottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 ATLASSERT((m_hWndPane[SPLIT_PANE_LEFT] == NULL) || (m_hWndPane[SPLIT_PANE_RIGHT] == NULL) || (m_hWndPane[SPLIT_PANE_LEFT] != m_hWndPane[SPLIT_PANE_RIGHT]));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 if(bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 bool SetSplitterPane(int nPane, HWND hWnd, bool bUpdate = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 ATLASSERT((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 if((nPane != SPLIT_PANE_LEFT) && (nPane != SPLIT_PANE_RIGHT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 m_hWndPane[nPane] = hWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 ATLASSERT((m_hWndPane[SPLIT_PANE_LEFT] == NULL) || (m_hWndPane[SPLIT_PANE_RIGHT] == NULL) || (m_hWndPane[SPLIT_PANE_LEFT] != m_hWndPane[SPLIT_PANE_RIGHT]));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 if(bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 HWND GetSplitterPane(int nPane) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 ATLASSERT((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 if((nPane != SPLIT_PANE_LEFT) && (nPane != SPLIT_PANE_RIGHT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 return NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 return m_hWndPane[nPane];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 bool SetActivePane(int nPane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 ATLASSERT((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 if((nPane != SPLIT_PANE_LEFT) && (nPane != SPLIT_PANE_RIGHT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 if((m_nSinglePane != SPLIT_PANE_NONE) && (nPane != m_nSinglePane))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 ::SetFocus(m_hWndPane[nPane]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 m_nDefActivePane = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 int GetActivePane() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 int nRet = SPLIT_PANE_NONE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 HWND hWndFocus = ::GetFocus();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 if(hWndFocus != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 for(int nPane = 0; nPane < m_nPanesCount; nPane++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 if((hWndFocus == m_hWndPane[nPane]) || (::IsChild(m_hWndPane[nPane], hWndFocus) != FALSE))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 nRet = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 return nRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 bool ActivateNextPane(bool bNext = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343 int nPane = m_nSinglePane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 if(nPane == SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 switch(GetActivePane())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 case SPLIT_PANE_LEFT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 nPane = SPLIT_PANE_RIGHT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 case SPLIT_PANE_RIGHT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 nPane = SPLIT_PANE_LEFT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 nPane = bNext ? SPLIT_PANE_LEFT : SPLIT_PANE_RIGHT;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 return SetActivePane(nPane);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 bool SetDefaultActivePane(int nPane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 ATLASSERT((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 if((nPane != SPLIT_PANE_LEFT) && (nPane != SPLIT_PANE_RIGHT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 m_nDefActivePane = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 bool SetDefaultActivePane(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 for(int nPane = 0; nPane < m_nPanesCount; nPane++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 if(hWnd == m_hWndPane[nPane])
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 m_nDefActivePane = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 return false; // not found
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 int GetDefaultActivePane() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 return m_nDefActivePane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 void DrawSplitter(CDCHandle dc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 ATLASSERT(dc.m_hDC != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 if((m_nSinglePane == SPLIT_PANE_NONE) && (m_xySplitterPos == -1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 if(m_nSinglePane == SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 pT->DrawSplitterBar(dc);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 for(int nPane = 0; nPane < m_nPanesCount; nPane++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 if(m_hWndPane[nPane] == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 pT->DrawSplitterPane(dc, nPane);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 if(m_hWndPane[m_nSinglePane] == NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 pT->DrawSplitterPane(dc, m_nSinglePane);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 // call to initiate moving splitter bar with keyboard
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 void MoveSplitterBar()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 int x = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 int y = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 x = m_xySplitterPos + (m_cxySplitBar / 2) + m_cxyBarEdge;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 y = (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 x = (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) / 2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 y = m_xySplitterPos + (m_cxySplitBar / 2) + m_cxyBarEdge;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 POINT pt = { x, y };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 pT->ClientToScreen(&pt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 ::SetCursorPos(pt.x, pt.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 m_xySplitterPosNew = m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 pT->SetCapture();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 m_hWndFocusSave = pT->SetFocus();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 ::SetCursor(m_hCursor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443 if(!m_bFullDrag)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 DrawGhostBar();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 m_cxyDragOffset = x - m_rcSplitter.left - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 m_cxyDragOffset = y - m_rcSplitter.top - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 void SetOrientation(bool bVertical, bool bUpdate = true)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 if(m_bVertical != bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 m_bVertical = bVertical;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 m_hCursor = ::LoadCursor(NULL, m_bVertical ? IDC_SIZEWE : IDC_SIZENS);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 pT->GetSystemSettings(false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 m_xySplitterPos = ::MulDiv(m_xySplitterPos, m_rcSplitter.right - m_rcSplitter.left, m_rcSplitter.bottom - m_rcSplitter.top);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 m_xySplitterPos = ::MulDiv(m_xySplitterPos, m_rcSplitter.bottom - m_rcSplitter.top, m_rcSplitter.right - m_rcSplitter.left);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 if(bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 // Overrideables
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 void DrawSplitterBar(CDCHandle dc)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 RECT rect = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 if(GetSplitterBarRect(&rect))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 dc.FillRect(&rect, COLOR_3DFACE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 if((m_dwExtendedStyle & SPLIT_FLATBAR) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 RECT rect1 = rect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484 rect1.right = rect1.left + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 rect1.bottom = rect1.top + 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 dc.FillRect(&rect1, COLOR_WINDOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 rect1 = rect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 rect1.left = rect1.right - 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 rect1.top = rect1.bottom - 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 dc.FillRect(&rect1, COLOR_3DSHADOW);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 else if((m_dwExtendedStyle & SPLIT_GRADIENTBAR) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 RECT rect2 = rect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 rect2.left = (rect.left + rect.right) / 2 - 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 rect2.top = (rect.top + rect.bottom) / 2 - 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 dc.GradientFillRect(rect2, ::GetSysColor(COLOR_3DFACE), ::GetSysColor(COLOR_3DSHADOW), m_bVertical);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 // draw 3D edge if needed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 dc.DrawEdge(&rect, EDGE_RAISED, m_bVertical ? (BF_LEFT | BF_RIGHT) : (BF_TOP | BF_BOTTOM));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 // called only if pane is empty
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 void DrawSplitterPane(CDCHandle dc, int nPane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 RECT rect = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 if(GetSplitterPaneRect(nPane, &rect))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 if((pT->GetExStyle() & WS_EX_CLIENTEDGE) == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 dc.DrawEdge(&rect, EDGE_SUNKEN, BF_RECT | BF_ADJUST);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 dc.FillRect(&rect, COLOR_APPWORKSPACE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 // Message map and handlers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 BEGIN_MSG_MAP(CSplitterImpl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 MESSAGE_HANDLER(WM_CREATE, OnCreate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530 MESSAGE_HANDLER(WM_PAINT, OnPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 MESSAGE_HANDLER(WM_PRINTCLIENT, OnPaint)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 if(IsInteractive())
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDoubleClick)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 MESSAGE_HANDLER(WM_CAPTURECHANGED, OnCaptureChanged)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 MESSAGE_HANDLER(WM_MOUSEACTIVATE, OnMouseActivate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 MESSAGE_HANDLER(WM_SETTINGCHANGE, OnSettingChange)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 pT->Init();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 LRESULT OnPaint(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 // try setting position if not set
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 if((m_nSinglePane == SPLIT_PANE_NONE) && (m_xySplitterPos == -1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 pT->SetSplitterPos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 // do painting
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 if(wParam != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 pT->DrawSplitter((HDC)wParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 CPaintDC dc(pT->m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 pT->DrawSplitter(dc.m_hDC);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578 LRESULT OnSetCursor(UINT /*uMsg*/, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 if(((HWND)wParam == pT->m_hWnd) && (LOWORD(lParam) == HTCLIENT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 DWORD dwPos = ::GetMessagePos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 POINT ptPos = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 pT->ScreenToClient(&ptPos);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 if(IsOverSplitterBar(ptPos.x, ptPos.y))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 LRESULT OnMouseMove(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 int xPos = GET_X_LPARAM(lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 int yPos = GET_Y_LPARAM(lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 if(::GetCapture() == pT->m_hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 int xyNewSplitPos = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 xyNewSplitPos = xPos - m_rcSplitter.left - m_cxyDragOffset;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605 xyNewSplitPos = yPos - m_rcSplitter.top - m_cxyDragOffset;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 if(xyNewSplitPos == -1) // avoid -1, that means default position
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608 xyNewSplitPos = -2;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 if(m_xySplitterPos != xyNewSplitPos)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 if(m_bFullDrag)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 if(pT->SetSplitterPos(xyNewSplitPos, true))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 pT->UpdateWindow();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 DrawGhostBar();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 pT->SetSplitterPos(xyNewSplitPos, false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 DrawGhostBar();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 else // not dragging, just set cursor
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 if(IsOverSplitterBar(xPos, yPos))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 ::SetCursor(m_hCursor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635 LRESULT OnLButtonDown(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM lParam, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 int xPos = GET_X_LPARAM(lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 int yPos = GET_Y_LPARAM(lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 if((::GetCapture() != pT->m_hWnd) && IsOverSplitterBar(xPos, yPos))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 m_xySplitterPosNew = m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 pT->SetCapture();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 m_hWndFocusSave = pT->SetFocus();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 ::SetCursor(m_hCursor);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 if(!m_bFullDrag)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 DrawGhostBar();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 m_cxyDragOffset = xPos - m_rcSplitter.left - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 m_cxyDragOffset = yPos - m_rcSplitter.top - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 else if((::GetCapture() == pT->m_hWnd) && !IsOverSplitterBar(xPos, yPos))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 ::ReleaseCapture();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 LRESULT OnLButtonUp(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 if(::GetCapture() == pT->m_hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 m_xySplitterPosNew = m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668 ::ReleaseCapture();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 LRESULT OnLButtonDoubleClick(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678 pT->SetSplitterPos(); // default
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
680 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
681 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
682
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
683 LRESULT OnCaptureChanged(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
684 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
685 if(!m_bFullDrag)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
686 DrawGhostBar();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
687
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
688 if((m_xySplitterPosNew != -1) && (!m_bFullDrag || (m_xySplitterPos != m_xySplitterPosNew)))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
689 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
690 m_xySplitterPos = m_xySplitterPosNew;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
691 m_xySplitterPosNew = -1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
692 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
693 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
694 pT->UpdateWindow();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
695 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
696
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
697 if(m_hWndFocusSave != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
698 ::SetFocus(m_hWndFocusSave);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
699
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
700 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
701 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
702
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
703 LRESULT OnKeyDown(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
704 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
705 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
706 if(::GetCapture() == pT->m_hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
707 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
708 switch(wParam)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
709 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
710 case VK_RETURN:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
711 m_xySplitterPosNew = m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
712 // FALLTHROUGH
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
713 case VK_ESCAPE:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
714 ::ReleaseCapture();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
715 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
716 case VK_LEFT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
717 case VK_RIGHT:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
718 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
719 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
720 POINT pt = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
721 ::GetCursorPos(&pt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
722 int xyPos = m_xySplitterPos + ((wParam == VK_LEFT) ? -pT->m_cxyStep : pT->m_cxyStep);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
723 int cxyMax = m_rcSplitter.right - m_rcSplitter.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
724 if(xyPos < (m_cxyMin + m_cxyBarEdge))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
725 xyPos = m_cxyMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
726 else if(xyPos > (cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
727 xyPos = cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
728 pt.x += xyPos - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
729 ::SetCursorPos(pt.x, pt.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
730 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
731 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
732 case VK_UP:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
733 case VK_DOWN:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
734 if(!m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
735 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
736 POINT pt = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
737 ::GetCursorPos(&pt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
738 int xyPos = m_xySplitterPos + ((wParam == VK_UP) ? -pT->m_cxyStep : pT->m_cxyStep);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
739 int cxyMax = m_rcSplitter.bottom - m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
740 if(xyPos < (m_cxyMin + m_cxyBarEdge))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
741 xyPos = m_cxyMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
742 else if(xyPos > (cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
743 xyPos = cxyMax - m_cxySplitBar - m_cxyBarEdge - m_cxyMin;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
744 pt.y += xyPos - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
745 ::SetCursorPos(pt.x, pt.y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
746 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
747 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
748 default:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
749 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
750 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
751 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
752 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
753 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
754 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
755 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
756
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
757 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
758 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
759
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
760 LRESULT OnSetFocus(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
761 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
762 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
763 if(::GetCapture() != pT->m_hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
764 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
765 if(m_nSinglePane == SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
766 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
767 if((m_nDefActivePane == SPLIT_PANE_LEFT) || (m_nDefActivePane == SPLIT_PANE_RIGHT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
768 ::SetFocus(m_hWndPane[m_nDefActivePane]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
769 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
770 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
771 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
772 ::SetFocus(m_hWndPane[m_nSinglePane]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
773 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
774 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
775
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
776 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
777 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
778 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
779
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
780 LRESULT OnMouseActivate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
781 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
782 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
783 LRESULT lRet = pT->DefWindowProc(uMsg, wParam, lParam);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
784 if((lRet == MA_ACTIVATE) || (lRet == MA_ACTIVATEANDEAT))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
785 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
786 DWORD dwPos = ::GetMessagePos();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
787 POINT pt = { GET_X_LPARAM(dwPos), GET_Y_LPARAM(dwPos) };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
788 pT->ScreenToClient(&pt);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
789 RECT rcPane = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
790 for(int nPane = 0; nPane < m_nPanesCount; nPane++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
791 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
792 if(GetSplitterPaneRect(nPane, &rcPane) && (::PtInRect(&rcPane, pt) != FALSE))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
793 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
794 m_nDefActivePane = nPane;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
795 break;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
796 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
797 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
798 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
799
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
800 return lRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
801 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
802
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
803 LRESULT OnSettingChange(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
804 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
805 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
806 pT->GetSystemSettings(true);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
807
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
808 return 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
809 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
810
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
811 // Implementation - internal helpers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
812 void Init()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
813 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
814 m_hCursor = ::LoadCursor(NULL, m_bVertical ? IDC_SIZEWE : IDC_SIZENS);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
815
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
816 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
817 pT->GetSystemSettings(false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
818 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
819
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
820 void UpdateSplitterLayout()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
821 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
822 if((m_nSinglePane == SPLIT_PANE_NONE) && (m_xySplitterPos == -1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
823 return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
824
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
825 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
826 RECT rect = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
827 if(m_nSinglePane == SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
828 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
829 if(GetSplitterBarRect(&rect))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
830 pT->InvalidateRect(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
831
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
832 for(int nPane = 0; nPane < m_nPanesCount; nPane++)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
833 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
834 if(GetSplitterPaneRect(nPane, &rect))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
835 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
836 if(m_hWndPane[nPane] != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
837 ::SetWindowPos(m_hWndPane[nPane], NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
838 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
839 pT->InvalidateRect(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
840 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
841 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
842 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
843 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
844 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
845 if(GetSplitterPaneRect(m_nSinglePane, &rect))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
846 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
847 if(m_hWndPane[m_nSinglePane] != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
848 ::SetWindowPos(m_hWndPane[m_nSinglePane], NULL, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, SWP_NOZORDER);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
849 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
850 pT->InvalidateRect(&rect);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
851 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
852 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
853 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
854
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
855 bool GetSplitterBarRect(LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
856 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
857 ATLASSERT(lpRect != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
858 if((m_nSinglePane != SPLIT_PANE_NONE) || (m_xySplitterPos == -1))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
859 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
860
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
861 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
862 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
863 lpRect->left = m_rcSplitter.left + m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
864 lpRect->top = m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
865 lpRect->right = m_rcSplitter.left + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
866 lpRect->bottom = m_rcSplitter.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
867 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
868 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
869 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
870 lpRect->left = m_rcSplitter.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
871 lpRect->top = m_rcSplitter.top + m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
872 lpRect->right = m_rcSplitter.right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
873 lpRect->bottom = m_rcSplitter.top + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
874 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
875
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
876 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
877 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
878
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
879 bool GetSplitterPaneRect(int nPane, LPRECT lpRect) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
880 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
881 ATLASSERT((nPane == SPLIT_PANE_LEFT) || (nPane == SPLIT_PANE_RIGHT));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
882 ATLASSERT(lpRect != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
883 bool bRet = true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
884 if(m_nSinglePane != SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
885 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
886 if(nPane == m_nSinglePane)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
887 *lpRect = m_rcSplitter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
888 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
889 bRet = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
890 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
891 else if(nPane == SPLIT_PANE_LEFT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
892 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
893 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
894 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
895 lpRect->left = m_rcSplitter.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
896 lpRect->top = m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
897 lpRect->right = m_rcSplitter.left + m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
898 lpRect->bottom = m_rcSplitter.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
899 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
900 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
901 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
902 lpRect->left = m_rcSplitter.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
903 lpRect->top = m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
904 lpRect->right = m_rcSplitter.right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
905 lpRect->bottom = m_rcSplitter.top + m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
906 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
907 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
908 else if(nPane == SPLIT_PANE_RIGHT)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
909 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
910 if(m_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
911 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
912 lpRect->left = m_rcSplitter.left + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
913 lpRect->top = m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
914 lpRect->right = m_rcSplitter.right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
915 lpRect->bottom = m_rcSplitter.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
916 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
917 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
918 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
919 lpRect->left = m_rcSplitter.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
920 lpRect->top = m_rcSplitter.top + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
921 lpRect->right = m_rcSplitter.right;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
922 lpRect->bottom = m_rcSplitter.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
923 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
924 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
925 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
926 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
927 bRet = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
928 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
929
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
930 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
931 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
932
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
933 bool IsOverSplitterRect(int x, int y) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
934 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
935 // -1 == don't check
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
936 return (((x == -1) || ((x >= m_rcSplitter.left) && (x <= m_rcSplitter.right))) &&
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
937 ((y == -1) || ((y >= m_rcSplitter.top) && (y <= m_rcSplitter.bottom))));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
938 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
939
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
940 bool IsOverSplitterBar(int x, int y) const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
941 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
942 if(m_nSinglePane != SPLIT_PANE_NONE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
943 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
944 if((m_xySplitterPos == -1) || !IsOverSplitterRect(x, y))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
945 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
946 int xy = m_bVertical ? x : y;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
947 int xyOff = m_bVertical ? m_rcSplitter.left : m_rcSplitter.top;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
948
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
949 return ((xy >= (xyOff + m_xySplitterPos)) && (xy < (xyOff + m_xySplitterPos + m_cxySplitBar + m_cxyBarEdge)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
950 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
951
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
952 void DrawGhostBar()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
953 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
954 RECT rect = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
955 if(GetSplitterBarRect(&rect))
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
956 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
957 // convert client to window coordinates
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
958 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
959 RECT rcWnd = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
960 pT->GetWindowRect(&rcWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
961 ::MapWindowPoints(NULL, pT->m_hWnd, (LPPOINT)&rcWnd, 2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
962 ::OffsetRect(&rect, -rcWnd.left, -rcWnd.top);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
963
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
964 // invert the brush pattern (looks just like frame window sizing)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
965 CWindowDC dc(pT->m_hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
966 CBrush brush(CDCHandle::GetHalftoneBrush());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
967 if(brush.m_hBrush != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
968 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
969 CBrushHandle brushOld = dc.SelectBrush(brush);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
970 dc.PatBlt(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, PATINVERT);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
971 dc.SelectBrush(brushOld);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
972 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
973 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
974 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
975
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
976 void GetSystemSettings(bool bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
977 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
978 if((m_dwExtendedStyle & SPLIT_FIXEDBARSIZE) == 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
979 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
980 m_cxySplitBar = ::GetSystemMetrics(m_bVertical ? SM_CXSIZEFRAME : SM_CYSIZEFRAME);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
981 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
982
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
983 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
984 if((pT->GetExStyle() & WS_EX_CLIENTEDGE) != 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
985 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
986 m_cxyBarEdge = 2 * ::GetSystemMetrics(m_bVertical ? SM_CXEDGE : SM_CYEDGE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
987 m_cxyMin = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
988 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
989 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
990 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
991 m_cxyBarEdge = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
992 m_cxyMin = 2 * ::GetSystemMetrics(m_bVertical ? SM_CXEDGE : SM_CYEDGE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
993 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
994
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
995 ::SystemParametersInfo(SPI_GETDRAGFULLWINDOWS, 0, &m_bFullDrag, 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
996
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
997 if(bUpdate)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
998 UpdateSplitterLayout();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
999 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1000
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1001 bool IsProportional() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1002 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1003 return ((m_dwExtendedStyle & SPLIT_PROPORTIONAL) != 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1004 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1005
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1006 void StoreProportionalPos()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1007 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1008 int cxyTotal = m_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1009 if(cxyTotal > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1010 m_nProportionalPos = ::MulDiv(m_xySplitterPos, m_nPropMax, cxyTotal);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1011 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1012 m_nProportionalPos = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1013 ATLTRACE2(atlTraceUI, 0, _T("CSplitterImpl::StoreProportionalPos - %i\n"), m_nProportionalPos);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1014 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1015
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1016 void UpdateProportionalPos()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1017 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1018 int cxyTotal = m_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1019 if(cxyTotal > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1020 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1021 int xyNewPos = ::MulDiv(m_nProportionalPos, cxyTotal, m_nPropMax);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1022 m_bUpdateProportionalPos = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1023 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1024 pT->SetSplitterPos(xyNewPos, false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1025 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1026 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1027
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1028 bool IsRightAligned() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1029 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1030 return ((m_dwExtendedStyle & SPLIT_RIGHTALIGNED) != 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1031 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1032
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1033 void StoreRightAlignPos()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1034 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1035 int cxyTotal = m_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1036 if(cxyTotal > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1037 m_nProportionalPos = cxyTotal - m_xySplitterPos;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1038 else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1039 m_nProportionalPos = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1040 ATLTRACE2(atlTraceUI, 0, _T("CSplitterImpl::StoreRightAlignPos - %i\n"), m_nProportionalPos);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1041 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1042
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1043 void UpdateRightAlignPos()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1044 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1045 int cxyTotal = m_bVertical ? (m_rcSplitter.right - m_rcSplitter.left - m_cxySplitBar - m_cxyBarEdge) : (m_rcSplitter.bottom - m_rcSplitter.top - m_cxySplitBar - m_cxyBarEdge);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1046 if(cxyTotal > 0)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1047 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1048 m_bUpdateProportionalPos = false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1049 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1050 pT->SetSplitterPos(cxyTotal - m_nProportionalPos, false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1051 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1052 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1053
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1054 bool IsInteractive() const
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1055 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1056 return ((m_dwExtendedStyle & SPLIT_NONINTERACTIVE) == 0);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1057 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1058 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1059
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1060
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1061 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1062 // CSplitterWindowImpl - Implements a splitter window
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1063
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1064 template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1065 class ATL_NO_VTABLE CSplitterWindowImpl : public ATL::CWindowImpl< T, TBase, TWinTraits >, public CSplitterImpl< T >
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1066 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1067 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1068 DECLARE_WND_CLASS_EX2(NULL, T, CS_DBLCLKS, COLOR_WINDOW)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1069
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1070 CSplitterWindowImpl(bool bVertical = true) : CSplitterImpl< T >(bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1071 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1072
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1073 BOOL SubclassWindow(HWND hWnd)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1074 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1075 BOOL bRet = ATL::CWindowImpl< T, TBase, TWinTraits >::SubclassWindow(hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1076 if(bRet != FALSE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1077 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1078 T* pT = static_cast<T*>(this);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1079 pT->Init();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1080
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1081 this->SetSplitterRect();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1082 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1083
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1084 return bRet;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1085 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1086
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1087 BEGIN_MSG_MAP(CSplitterWindowImpl)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1088 MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1089 MESSAGE_HANDLER(WM_SIZE, OnSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1090 CHAIN_MSG_MAP(CSplitterImpl< T >)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1091 FORWARD_NOTIFICATIONS()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1092 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1093
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1094 LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1095 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1096 // handled, no background painting needed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1097 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1098 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1099
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1100 LRESULT OnSize(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1101 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1102 if(wParam != SIZE_MINIMIZED)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1103 this->SetSplitterRect();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1104
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1105 bHandled = FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1106 return 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1107 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1108 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1109
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1110
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1111 ///////////////////////////////////////////////////////////////////////////////
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1112 // CSplitterWindow/CHorSplitterWindow - Implements splitter windows to be used as is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1113
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1114 template <bool t_bVertical = true>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1115 class CSplitterWindowT : public CSplitterWindowImpl<CSplitterWindowT<t_bVertical> >
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1116 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1117 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1118 DECLARE_WND_CLASS_EX2(_T("WTL_SplitterWindow"), CSplitterWindowT<t_bVertical>, CS_DBLCLKS, COLOR_WINDOW)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1120 CSplitterWindowT() : CSplitterWindowImpl<CSplitterWindowT<t_bVertical> >(t_bVertical)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1121 { }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1122 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1123
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1124 typedef CSplitterWindowT<true> CSplitterWindow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1125 typedef CSplitterWindowT<false> CHorSplitterWindow;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1127 } // namespace WTL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1128
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1129 #endif // __ATLSPLIT_H__