annotate foosdk/sdk/libPPUI/CDialogResizeHelper.cpp @ 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 #include "stdafx.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 #include "CDialogResizeHelper.h"
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 #include "win32_op.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 static BOOL GetChildWindowRect2(HWND wnd, HWND wndChild, RECT* child) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 RECT temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 if (wndChild == NULL) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 if (!GetWindowRect(wndChild, &temp)) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 if (!MapWindowPoints(NULL, wnd, (POINT*)&temp, 2)) return FALSE;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 *child = temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 return TRUE;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 static BOOL GetChildWindowRect(HWND wnd, UINT id, RECT* child) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 return GetChildWindowRect2(wnd, GetDlgItem(wnd, id), child);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 bool CDialogResizeHelper::EvalRect(UINT id, CRect & out) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 for( auto iter = m_runtime.begin(); iter != m_runtime.end(); ++ iter ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 if ( iter->initData.id == id ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 out = _EvalRect(*iter, this->CurrentSize() );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 return true;
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 }
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 CRect CDialogResizeHelper::_EvalRect(runtime_t const & rt, CSize wndSize) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 CRect rc = rt.origRect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 int delta_x = wndSize.cx - rt.origWindowSize.cx,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 delta_y = wndSize.cy - rt.origWindowSize.cy;
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 const Param & e = rt.initData;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 rc.left += pfc::rint32(e.snapLeft * delta_x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 rc.right += pfc::rint32(e.snapRight * delta_x);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 rc.top += pfc::rint32(e.snapTop * delta_y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 rc.bottom += pfc::rint32(e.snapBottom * delta_y);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 return rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 }
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 CWindow CDialogResizeHelper::ResolveWnd(runtime_t const & rt) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 if ( rt.userHWND != NULL ) return rt.userHWND;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 return m_thisWnd.GetDlgItem( rt.initData.id );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 CSize CDialogResizeHelper::CurrentSize() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 CRect rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 WIN32_OP_D( m_thisWnd.GetClientRect(rc) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 return rc.Size();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 void CDialogResizeHelper::OnSize(UINT, CSize newSize)
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 if (m_thisWnd != NULL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 HDWP hWinPosInfo = BeginDeferWindowPos((int)(m_runtime.size() + (m_sizeGrip != NULL ? 1 : 0)));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 for (auto iter = m_runtime.begin(); iter != m_runtime.end(); ++ iter) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 CRect rc = _EvalRect(*iter, newSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 hWinPosInfo = DeferWindowPos(hWinPosInfo, ResolveWnd(*iter), 0, rc.left, rc.top, rc.Width(), rc.Height(), SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_NOCOPYBITS);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 if (m_sizeGrip != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 RECT rc, rc_grip;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 if (m_thisWnd.GetClientRect(&rc) && m_sizeGrip.GetWindowRect(&rc_grip)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 DWORD flags = SWP_NOZORDER | SWP_NOOWNERZORDER | SWP_NOACTIVATE | SWP_NOSIZE | SWP_NOCOPYBITS;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 if (IsZoomed(m_thisWnd)) flags |= SWP_HIDEWINDOW;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 else flags |= SWP_SHOWWINDOW;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 hWinPosInfo = DeferWindowPos(hWinPosInfo, m_sizeGrip, NULL, rc.right - (rc_grip.right - rc_grip.left), rc.bottom - (rc_grip.bottom - rc_grip.top), 0, 0, flags);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 EndDeferWindowPos(hWinPosInfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 //RedrawWindow(m_thisWnd, NULL, NULL, RDW_UPDATENOW | RDW_ALLCHILDREN);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 SetMsgHandled(FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 void CDialogResizeHelper::OnGetMinMaxInfo(LPMINMAXINFO info) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 CRect r;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 const DWORD dwStyle = m_thisWnd.GetWindowLong(GWL_STYLE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 const DWORD dwExStyle = m_thisWnd.GetWindowLong(GWL_EXSTYLE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 if (max_x && max_y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 r.left = 0; r.right = max_x;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 r.top = 0; r.bottom = max_y;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 MapDialogRect(m_thisWnd, &r);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 AdjustWindowRectEx(&r, dwStyle, FALSE, dwExStyle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 info->ptMaxTrackSize.x = r.right - r.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 info->ptMaxTrackSize.y = r.bottom - r.top;
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 if (min_x && min_y)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 r.left = 0; r.right = min_x;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 r.top = 0; r.bottom = min_y;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 MapDialogRect(m_thisWnd, &r);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 AdjustWindowRectEx(&r, dwStyle, FALSE, dwExStyle);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 info->ptMinTrackSize.x = r.right - r.left;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 info->ptMinTrackSize.y = r.bottom - r.top;
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 }
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 void CDialogResizeHelper::OnInitDialog(CWindow thisWnd) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 m_thisWnd = thisWnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 const auto origSize = CurrentSize();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 for( auto initIter = m_initData.begin(); initIter != m_initData.end(); ++ initIter ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 CRect rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 if (GetChildWindowRect(m_thisWnd, initIter->id, &rc)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 runtime_t rt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 rt.origRect = rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 rt.initData = * initIter;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 rt.origWindowSize = origSize;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 m_runtime.push_back( std::move(rt) );
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 AddSizeGrip();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 SetMsgHandled(FALSE);
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 CDialogResizeHelper::OnDestroy() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 m_runtime.clear();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 m_sizeGrip = NULL; m_thisWnd = NULL;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 SetMsgHandled(FALSE);
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 void CDialogResizeHelper::AddSizeGrip()
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 ( m_autoSizeGrip && m_thisWnd != NULL && m_sizeGrip == NULL)
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_thisWnd.GetWindowLong(GWL_STYLE) & WS_POPUP) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 m_sizeGrip = CreateWindowEx(0, WC_SCROLLBAR, _T(""), WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | SBS_SIZEGRIP | SBS_SIZEBOXBOTTOMRIGHTALIGN,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 0, 0, CW_USEDEFAULT, CW_USEDEFAULT,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 m_thisWnd, (HMENU)0, NULL, NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 if (m_sizeGrip != NULL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 RECT rc, rc_grip;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 if (m_thisWnd.GetClientRect(&rc) && m_sizeGrip.GetWindowRect(&rc_grip)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138 m_sizeGrip.SetWindowPos(NULL, rc.right - (rc_grip.right - rc_grip.left), rc.bottom - (rc_grip.bottom - rc_grip.top), 0, 0, SWP_NOZORDER | SWP_NOSIZE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 }
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 }
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 }
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 void CDialogResizeHelper::InitTable(const Param* table, size_t tableSize) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 m_initData.assign( table, table+tableSize );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 void CDialogResizeHelper::InitTable(const ParamOld * table, size_t tableSize) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 m_initData.resize(tableSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 for (size_t walk = 0; walk < tableSize; ++walk) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 const ParamOld in = table[walk];
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 Param entry = {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 entry.id = table[walk].id;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 if (in.flags & CDialogResizeHelperCompat::X_MOVE) entry.snapLeft = entry.snapRight = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 else if (in.flags & CDialogResizeHelperCompat::X_SIZE) entry.snapRight = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 if (in.flags & CDialogResizeHelperCompat::Y_MOVE) entry.snapTop = entry.snapBottom = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 else if (in.flags & CDialogResizeHelperCompat::Y_SIZE) entry.snapBottom = 1;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 m_initData[walk] = entry;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 void CDialogResizeHelper::InitMinMax(const CRect & range) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 min_x = range.left; min_y = range.top; max_x = range.right; max_y = range.bottom;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 void CDialogResizeHelper::AddControl(Param const & initData, CWindow wnd) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 CRect rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 if ( wnd == NULL ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 PFC_ASSERT( initData.id != 0 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 WIN32_OP_D(GetChildWindowRect(m_thisWnd, initData.id, rc));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 } else {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 WIN32_OP_D(GetChildWindowRect2(m_thisWnd, wnd, rc));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 }
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 runtime_t rt;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 rt.initData = initData;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 rt.userHWND = wnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 rt.origRect = rc;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 rt.origWindowSize = this->CurrentSize();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 m_runtime.push_back( std::move(rt) );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 }
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 bool CDialogResizeHelper::RemoveControl(CWindow wnd) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 return pfc::remove_if_t( m_runtime, [wnd] (runtime_t const & rt) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 return rt.userHWND == wnd;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 } ) > 0;
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 bool CDialogResizeHelper::HaveControl(CWindow wnd) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 for( auto i = m_runtime.begin(); i != m_runtime.end(); ++ i ) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 if ( i->userHWND == wnd ) return 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 return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 }