|
1
|
1 #pragma once
|
|
|
2 #include <atlctrlx.h>
|
|
|
3 #include "DarkMode.h"
|
|
|
4
|
|
|
5 namespace DarkMode {
|
|
|
6 static constexpr COLORREF colorHyperLink = 0xCC6600; // taken from screenshot of syslink
|
|
|
7
|
|
|
8 template<typename impl_t> class CHyperLinkImpl : public ::CHyperLinkImpl<impl_t> {
|
|
|
9 public:
|
|
|
10 BEGIN_MSG_MAP_EX(CDarkHyperLinkImpl)
|
|
|
11 MESSAGE_HANDLER_EX(DarkMode::msgSetDarkMode(), OnSetDarkMode)
|
|
|
12 CHAIN_MSG_MAP(::CHyperLinkImpl<impl_t>)
|
|
|
13 END_MSG_MAP()
|
|
|
14 private:
|
|
|
15 LRESULT OnSetDarkMode(UINT, WPARAM wp, LPARAM) {
|
|
|
16 const bool bDark = (wp != 0);
|
|
|
17 if ( m_clrLinkBackup == CLR_INVALID ) m_clrLinkBackup = this->m_clrLink;
|
|
|
18
|
|
|
19 if (bDark != m_isDark) {
|
|
|
20 m_isDark = bDark;
|
|
|
21 this->m_clrLink = bDark ? colorHyperLink : m_clrLinkBackup;
|
|
|
22 this->Invalidate();
|
|
|
23 }
|
|
|
24
|
|
|
25 return 1;
|
|
|
26 }
|
|
|
27 COLORREF m_clrLinkBackup = CLR_INVALID;
|
|
|
28 bool m_isDark = false;
|
|
|
29 };
|
|
|
30
|
|
|
31
|
|
|
32 class CHyperLink : public CHyperLinkImpl<CHyperLink> {
|
|
|
33 public:
|
|
|
34 DECLARE_WND_CLASS(_T("WTL_DarkHyperLink"))
|
|
|
35 };
|
|
|
36
|
|
|
37 }
|