annotate foosdk/sdk/libPPUI/CDialogResizeHelper.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 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "CDialogResizeHelperCompat.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include <vector>
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 // ==========================================================
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 // CDialogResizeHelper
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 // Usage:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 // Put CDialogResizeHelper member in your dialog class
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 // Initialize with controls sizing info table, array of CDialogResizeHelper::Param
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 // Put CHAIN_MSG_MAP_MEMBER(m_resizer) before your dialog message handlers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 // CDialogResizeHelper will do its own message handling without marking messages as handled, that is, your handlers of the same messages will be allowed to run.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 // CRect minMaxRange specifies allowed size min (left&top) and max (right&bottom) values, in DLU not pixels.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 // ==========================================================
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 class CDialogResizeHelper : public CMessageMap {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 public:
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 typedef CDialogResizeHelperCompat::param ParamOld;
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 struct Param {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 uint32_t id;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 float snapLeft, snapTop, snapRight, snapBottom;
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 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 void AddSizeGrip();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 inline void set_min_size(unsigned x, unsigned y) { min_x = x; min_y = y; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 inline void set_max_size(unsigned x, unsigned y) { max_x = x; max_y = y; }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 bool m_autoSizeGrip = true;
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 BEGIN_MSG_MAP_EX(CDialogResizeHelper)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 if (uMsg == WM_INITDIALOG) OnInitDialog(hWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 MSG_WM_SIZE(OnSize)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 MSG_WM_DESTROY(OnDestroy)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 MSG_WM_GETMINMAXINFO(OnGetMinMaxInfo)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 END_MSG_MAP()
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 template<typename TParam, size_t paramCount> CDialogResizeHelper(const TParam(&src)[paramCount], CRect const& minMaxRange = CRect(0, 0, 0, 0)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 InitTable(src, paramCount);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 InitMinMax(minMaxRange);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 void InitTable(const Param* table, size_t tableSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 void InitTable(const ParamOld * table, size_t tableSize);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 void InitMinMax(const CRect & range);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 bool EvalRect(UINT id, CRect & out) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 //! initData.id may be null, if so specify a non null window handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 void AddControl( Param const & initData, CWindow wnd = NULL );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 bool RemoveControl( CWindow wnd );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 bool HaveControl(CWindow wnd) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 struct runtime_t {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 HWND userHWND = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 CRect origRect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 CSize origWindowSize;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 Param initData = {};
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 CSize CurrentSize() const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 CWindow ResolveWnd( runtime_t const & rt ) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 CRect _EvalRect(runtime_t const & rt, CSize wndSize) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 void OnGetMinMaxInfo(LPMINMAXINFO lpMMI) const;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 void OnSize(UINT nType, CSize size);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 void OnInitDialog(CWindow thisWnd);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 void OnDestroy();
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 std::vector<runtime_t> m_runtime;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 std::vector<Param> m_initData;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 CWindow m_thisWnd, m_sizeGrip;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 unsigned min_x, min_y, max_x, max_y;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 };