diff foosdk/sdk/libPPUI/CFlashWindow.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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/foosdk/sdk/libPPUI/CFlashWindow.h	Mon Jan 05 02:15:46 2026 -0500
@@ -0,0 +1,69 @@
+#pragma once
+
+#include "win32_op.h"
+
+typedef CWinTraits<WS_POPUP,WS_EX_TRANSPARENT|WS_EX_LAYERED|WS_EX_TOPMOST|WS_EX_TOOLWINDOW> CFlashWindowTraits;
+
+class CFlashWindow : public CWindowImpl<CFlashWindow,CWindow,CFlashWindowTraits> {
+public:
+	void Activate(CWindow parent) {
+		ShowAbove(parent);
+		m_tickCount = 0;
+		SetTimer(KTimerID, 500);
+	}
+	void Deactivate() throw() {
+		ShowWindow(SW_HIDE); KillTimer(KTimerID);
+	}
+
+	void ShowAbove(CWindow parent) {
+		if (m_hWnd == NULL) {
+			WIN32_OP( Create(NULL) != NULL );
+		}
+		CRect rect;
+		WIN32_OP_D( parent.GetWindowRect(rect) );
+		WIN32_OP_D( SetWindowPos(NULL,rect,SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW) );
+		m_parent = parent;
+	}
+
+	void CleanUp() throw() {
+		if (m_hWnd != NULL) DestroyWindow();
+	}
+
+	BEGIN_MSG_MAP_EX(CFlashWindow)
+		MSG_WM_CREATE(OnCreate)
+		MSG_WM_TIMER(OnTimer)
+		MSG_WM_DESTROY(OnDestroy)
+	END_MSG_MAP()
+
+	DECLARE_WND_CLASS_EX(TEXT("{2E124D52-131F-4004-A569-2316615BE63F}"),0,COLOR_HIGHLIGHT);
+private:
+	void OnDestroy() throw() {
+		KillTimer(KTimerID);
+	}
+	enum {
+		KTimerID = 0x47f42dd0
+	};
+	void OnTimer(WPARAM id) {
+		if (id == KTimerID) {
+			switch(++m_tickCount) {
+				case 1:
+					ShowWindow(SW_HIDE);
+					break;
+				case 2:
+					ShowAbove(m_parent);
+					break;
+				case 3:
+					ShowWindow(SW_HIDE);
+					KillTimer(KTimerID);
+					break;
+			}
+		}
+	}
+	LRESULT OnCreate(LPCREATESTRUCT) throw() {
+		SetLayeredWindowAttributes(*this,0,128,LWA_ALPHA);
+		return 0;
+	}
+	CWindow m_parent;
+	uint32_t m_tickCount;
+};
+