annotate foosdk/sdk/libPPUI/CPopupTooltipMessage.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 "win32_op.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 #include "wtl-pp.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 class CPopupTooltipMessage {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 CPopupTooltipMessage(DWORD style = TTS_BALLOON | TTS_NOPREFIX) : m_style(style | WS_POPUP), m_toolinfo(), m_shutDown() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 void ShowFocus(const TCHAR * message, CWindow wndParent) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 Show(message, wndParent); wndParent.SetFocus();
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 void Show(const TCHAR * message, CWindow wndParent) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 if (m_shutDown || (message == NULL && m_tooltip.m_hWnd == NULL)) return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 Initialize();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 Hide();
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 if (message != NULL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 CRect rect;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 WIN32_OP_D(wndParent.GetWindowRect(rect));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 ShowInternal(message, wndParent, rect);
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 void ShowEx(const TCHAR * message, CWindow wndParent, CRect rect) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 if (m_shutDown) return;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 Initialize();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 Hide();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 ShowInternal(message, wndParent, rect);
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 void Hide() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 if (m_tooltip.m_hWnd != NULL && m_tooltip.GetToolCount() > 0) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 m_tooltip.TrackActivate(&m_toolinfo, FALSE);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 m_tooltip.DelTool(&m_toolinfo);
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 void CleanUp() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 if (m_tooltip.m_hWnd != NULL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 m_tooltip.DestroyWindow();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 }
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 void ShutDown() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 m_shutDown = true; CleanUp();
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 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 void ShowInternal(const TCHAR * message, CWindow wndParent, CRect rect) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 PFC_ASSERT(!m_shutDown);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 PFC_ASSERT(message != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 PFC_ASSERT(wndParent != NULL);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 if (_tcschr(message, '\n') != nullptr) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 m_tooltip.SetMaxTipWidth(rect.Width());
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 m_toolinfo.cbSize = sizeof(m_toolinfo);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 m_toolinfo.uFlags = TTF_TRACK | TTF_IDISHWND | TTF_ABSOLUTE | TTF_TRANSPARENT | TTF_CENTERTIP;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 m_toolinfo.hwnd = wndParent;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 m_toolinfo.uId = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 m_toolinfo.lpszText = const_cast<TCHAR*>(message);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 m_toolinfo.hinst = NULL; //core_api::get_my_instance();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 if (m_tooltip.AddTool(&m_toolinfo)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 m_tooltip.TrackPosition(rect.CenterPoint().x, rect.bottom);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 m_tooltip.TrackActivate(&m_toolinfo, TRUE);
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 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 void Initialize() {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 if (m_tooltip.m_hWnd == NULL) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 WIN32_OP(m_tooltip.Create(NULL, NULL, NULL, m_style));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 CToolTipCtrl m_tooltip;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 TOOLINFO m_toolinfo;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 const DWORD m_style;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 bool m_shutDown;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 };
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
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 template<typename T> class CDialogWithTooltip : public CDialogImpl<T> {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 BEGIN_MSG_MAP_EX(CDialogWithTooltip)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 MSG_WM_DESTROY(OnDestroy)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 END_MSG_MAP()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 void ShowTip(UINT id, const TCHAR * label) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 m_tip.Show(label, this->GetDlgItem(id));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 void ShowTip(HWND child, const TCHAR * label) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 m_tip.Show(label, child);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 void ShowTipF(UINT id, const TCHAR * label) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 m_tip.ShowFocus(label, this->GetDlgItem(id));
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 void ShowTipF(HWND child, const TCHAR * label) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 m_tip.ShowFocus(label, child);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 void HideTip() { m_tip.Hide(); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 private:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 void OnDestroy() { m_tip.ShutDown(); this->SetMsgHandled(FALSE); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 CPopupTooltipMessage m_tip;
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