diff --git a/src/DarkMode/DarkMode.cpp b/src/DarkMode/DarkMode.cpp index bac509959..39df85e30 100644 --- a/src/DarkMode/DarkMode.cpp +++ b/src/DarkMode/DarkMode.cpp @@ -16,7 +16,7 @@ #include "DarkMode.h" #include "IatHook.hpp" - +#include "ListViewUtil.hpp" // ============================================================================ diff --git a/src/DarkMode/DarkMode.h b/src/DarkMode/DarkMode.h index 926b20260..722cf1e2c 100644 --- a/src/DarkMode/DarkMode.h +++ b/src/DarkMode/DarkMode.h @@ -5,6 +5,8 @@ extern "C" { #endif DWORD GetWindowsBuildNumber(LPDWORD major, LPDWORD minor); + + void InitListView(HWND hListView); #ifdef D_NP3_WIN10_DARK_MODE diff --git a/src/DarkMode/ListViewUtil.h b/src/DarkMode/ListViewUtil.hpp similarity index 86% rename from src/DarkMode/ListViewUtil.h rename to src/DarkMode/ListViewUtil.hpp index 794801543..893b3c88d 100644 --- a/src/DarkMode/ListViewUtil.h +++ b/src/DarkMode/ListViewUtil.hpp @@ -1,15 +1,17 @@ #pragma once +#ifdef D_NP3_WIN10_DARK_MODE + struct SubclassInfo { COLORREF headerTextColor; }; -void InitListView(HWND hListView) +extern "C" void InitListView(HWND hListView) { HWND hHeader = ListView_GetHeader(hListView); - if (g_darkModeSupported) + if (IsDarkModeSupported()) { SetWindowSubclass(hListView, [](HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR /*uIdSubclass*/, DWORD_PTR dwRefData) -> LRESULT { switch (uMsg) @@ -35,12 +37,12 @@ void InitListView(HWND hListView) break; case WM_THEMECHANGED: { - if (g_darkModeSupported) + if (IsDarkModeSupported()) { HWND hHeader = ListView_GetHeader(hWnd); - AllowDarkModeForWindow(hWnd, g_darkModeEnabled); - AllowDarkModeForWindow(hHeader, g_darkModeEnabled); + AllowDarkModeForWindow(hWnd, CheckDarkModeEnabled()); + AllowDarkModeForWindow(hHeader, CheckDarkModeEnabled()); HTHEME hTheme = OpenThemeData(nullptr, L"ItemsView"); if (hTheme) @@ -91,3 +93,11 @@ void InitListView(HWND hListView) SetWindowTheme(hHeader, L"ItemsView", nullptr); // DarkMode SetWindowTheme(hListView, L"ItemsView", nullptr); // DarkMode } + +#else + +extern "C" void InitListView(HWND hListView) { + (void)(hListView); +} + +#endif diff --git a/src/Dialogs.c b/src/Dialogs.c index 62d5a5ae8..0c583efd6 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -245,7 +245,7 @@ static INT_PTR CALLBACK _InfoBoxLngDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPINFOBOXLNG const lpMsgBox = (LPINFOBOXLNG)lParam; - SetWindowLayoutRTL(hwnd, (lpMsgBox->uType & MB_RTLREADING)); + InitWindowCommon(hwnd, true); if (UseDarkMode()) { @@ -255,14 +255,8 @@ static INT_PTR CALLBACK _InfoBoxLngDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, SetExplorerTheme(hBtn); } } - SetExplorerTheme(hwnd); } - HDC const hdc = GetDC(hwnd); - SetTextColor(hdc, Globals.rgbDarkTextColor); - SetBkColor(hdc, Globals.rgbDarkBkgColor); - ReleaseDC(hwnd, hdc); - dpi = Scintilla_GetWindowDPI(hwnd); int const scxb = ScaleIntByDPI(GetSystemMetrics(SM_CXICON), dpi.x); @@ -307,7 +301,7 @@ static INT_PTR CALLBACK _InfoBoxLngDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, FreeMem(lpMsgBox->lpstrMessage); } - return !0; + return TRUE; case WM_DPICHANGED: @@ -322,44 +316,29 @@ static INT_PTR CALLBACK _InfoBoxLngDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, } UpdateWindowLayoutForDPI(hwnd, (RECT*)lParam, NULL); } - return !0; + return TRUE; case WM_DESTROY: if (hIconBmp) { DeleteObject(hIconBmp); } - return !0; + return TRUE; + #ifdef D_NP3_WIN10_DARK_MODE - //case WM_ERASEBKGND: - // if (UseDarkMode()) { - // HDC const hdc = (HDC)wParam; - // SelectObject((HDC)wParam, s_hbrWndDarkBackground); - // RECT rc; - // GetClientRect(hwnd, &rc); - // SetMapMode(hdc, MM_ANISOTROPIC); - // SetWindowExtEx(hdc, 100, 100, NULL); - // SetViewportExtEx(hdc, rc.right, rc.bottom, NULL); - // FillRect(hdc, &rc, s_hbrWndDarkBackground); - // } - // return !0; - case WM_CTLCOLOR: case WM_CTLCOLORDLG: case WM_CTLCOLORSTATIC: { if (UseDarkMode()) { - HDC const hdc = (HDC)wParam; - SetTextColor(hdc, Globals.rgbDarkTextColor); - SetBkColor(hdc, Globals.rgbDarkBkgColor); - return (INT_PTR)s_hbrWndDarkBackground; + return SetDarkModeCtl((HDC)wParam); } } break; case WM_SETTINGCHANGE: if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { - SendMessageW(hwnd, WM_THEMECHANGED, 0, 0); + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); } break; @@ -381,6 +360,7 @@ static INT_PTR CALLBACK _InfoBoxLngDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, UpdateWindow(hwnd); } break; + #endif @@ -416,9 +396,9 @@ static INT_PTR CALLBACK _InfoBoxLngDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, break; } } - return !0; + return TRUE; } - return 0; + return FALSE; } @@ -581,7 +561,13 @@ static INT_PTR CALLBACK CmdLineHelpProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); - SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + InitWindowCommon(hwnd, true); + +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { + SetExplorerTheme(GetDlgItem(hwnd, IDOK)); + } +#endif WCHAR szText[4096] = { L'\0' }; GetLngString(IDS_MUI_CMDLINEHELP, szText, COUNTOF(szText)); @@ -594,6 +580,41 @@ static INT_PTR CALLBACK CmdLineHelpProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA UpdateWindowLayoutForDPI(hwnd, (RECT*)lParam, NULL); return true; +#ifdef D_NP3_WIN10_DARK_MODE + + case WM_CTLCOLOR: + case WM_CTLCOLORDLG: + case WM_CTLCOLORSTATIC: { + if (UseDarkMode()) { + return SetDarkModeCtl((HDC)wParam); + } + } break; + + case WM_SETTINGCHANGE: + if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); + } + break; + + case WM_THEMECHANGED: + if (IsDarkModeSupported()) { + bool const darkModeEnabled = CheckDarkModeEnabled(); + AllowDarkModeForWindow(hwnd, darkModeEnabled); + RefreshTitleBarThemeColor(hwnd); + + for (int btn = IDOK; btn <= IDCONTINUE; ++btn) { + HWND const hBtn = GetDlgItem(hwnd, btn); + if (hBtn) { + AllowDarkModeForWindow(hBtn, darkModeEnabled); + SendMessage(hBtn, WM_THEMECHANGED, 0, 0); + } + } + UpdateWindow(hwnd); + } + break; + +#endif + case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: @@ -622,11 +643,15 @@ INT_PTR DisplayCmdLineHelp(HWND hwnd) // // BFFCallBack() // -int CALLBACK BFFCallBack(HWND hwnd,UINT umsg,LPARAM lParam,LPARAM lpData) +int CALLBACK BFFCallBack(HWND hwnd, UINT umsg, LPARAM lParam, LPARAM lpData) { - if (umsg == BFFM_INITIALIZED) - SendMessage(hwnd,BFFM_SETSELECTION,true,lpData); + if (umsg == BFFM_INITIALIZED) { + SetDialogIconNP3(hwnd); + //?InitWindowCommon(hwnd, true); + + SendMessage(hwnd, BFFM_SETSELECTION, true, lpData); + } UNUSED(lParam); return(0); } @@ -636,27 +661,25 @@ int CALLBACK BFFCallBack(HWND hwnd,UINT umsg,LPARAM lParam,LPARAM lpData) // // GetDirectory() // -bool GetDirectory(HWND hwndParent,int uiTitle,LPWSTR pszFolder,LPCWSTR pszBase,bool bNewDialogStyle) +bool GetDirectory(HWND hwndParent, int uiTitle, LPWSTR pszFolder, LPCWSTR pszBase, bool bNewDialogStyle) { - BROWSEINFO bi; - WCHAR szTitle[MIDSZ_BUFFER] = { L'\0' };; + WCHAR szTitle[MIDSZ_BUFFER] = { L'\0' }; + GetLngString(uiTitle, szTitle, COUNTOF(szTitle)); + WCHAR szBase[MAX_PATH] = { L'\0' }; - - GetLngString(uiTitle,szTitle,COUNTOF(szTitle)); - - if (!pszBase || !*pszBase) + if (!pszBase || !*pszBase) { GetCurrentDirectory(MAX_PATH, szBase); - else + } else { StringCchCopyN(szBase, COUNTOF(szBase), pszBase, MAX_PATH); + } + BROWSEINFO bi; ZeroMemory(&bi, sizeof(BROWSEINFO)); bi.hwndOwner = hwndParent; bi.pidlRoot = NULL; bi.pszDisplayName = pszFolder; bi.lpszTitle = szTitle; - bi.ulFlags = BIF_RETURNONLYFSDIRS; - if (bNewDialogStyle) - bi.ulFlags |= BIF_NEWDIALOGSTYLE; + bi.ulFlags = BIF_RETURNONLYFSDIRS | (bNewDialogStyle ? BIF_NEWDIALOGSTYLE : 0); bi.lpfn = &BFFCallBack; bi.lParam = (LPARAM)szBase; bi.iImage = 0; @@ -681,25 +704,25 @@ static DWORD _LoadStringEx(UINT nResId, LPCTSTR pszRsType, LPSTR strOut) LPTSTR pszResId = MAKEINTRESOURCE(nResId); if (Globals.hInstance == NULL) - return 0L; + return FALSEL; HRSRC hRsrc = FindResource(Globals.hInstance, pszResId, pszRsType); if (hRsrc == NULL) { - return 0L; + return FALSEL; } HGLOBAL hGlobal = LoadResource(Globals.hInstance, hRsrc); if (hGlobal == NULL) { - return 0L; + return FALSEL; } const BYTE* pData = (const BYTE*)LockResource(hGlobal); if (pData == NULL) { FreeResource(hGlobal); - return 0L; + return FALSEL; } DWORD dwSize = SizeofResource(Globals.hInstance, hRsrc); @@ -745,7 +768,7 @@ static DWORD CALLBACK _LoadRtfCallback( memcpy(pbBuff, (LPCSTR)*pstr, *pcb); *pstr += cb; } - return 0; + return FALSE; } // ---------------------------------------------------------------------------- @@ -769,13 +792,14 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); + //~InitWindowCommon(hwnd, true); //~SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + SetExplorerTheme(hwnd); #ifdef D_NP3_WIN10_DARK_MODE if (UseDarkMode()) { SetExplorerTheme(GetDlgItem(hwnd, IDOK)); SetExplorerTheme(GetDlgItem(hwnd, IDC_COPYVERSTRG)); - SetExplorerTheme(hwnd); } #endif @@ -933,15 +957,24 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam #ifdef D_NP3_WIN10_DARK_MODE + //case WM_ERASEBKGND: + // if (UseDarkMode()) { + // HDC const hdc = (HDC)wParam; + // SelectObject((HDC)wParam, s_hbrWndDarkBackground); + // RECT rc; + // GetClientRect(hwnd, &rc); + // SetMapMode(hdc, MM_ANISOTROPIC); + // SetWindowExtEx(hdc, 100, 100, NULL); + // SetViewportExtEx(hdc, rc.right, rc.bottom, NULL); + // FillRect(hdc, &rc, s_hbrWndDarkBackground); + // } + // return TRUE; + case WM_CTLCOLOR: case WM_CTLCOLORDLG: - case WM_CTLCOLORSTATIC: - { + case WM_CTLCOLORSTATIC: { if (UseDarkMode()) { - HDC hdc = (HDC)wParam; - SetTextColor(hdc, Globals.rgbDarkTextColor); - SetBkColor(hdc, Globals.rgbDarkBkgColor); - return (INT_PTR)s_hbrWndDarkBackground; + return SetDarkModeCtl((HDC)wParam); } } break; @@ -949,7 +982,7 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam case WM_SETTINGCHANGE: if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { - SendMessageW(hwnd, WM_THEMECHANGED, 0, 0); + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); } break; @@ -997,7 +1030,7 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam EndPaint(hwnd, &ps); } } - return 0; + return FALSE; case WM_NOTIFY: @@ -1129,9 +1162,9 @@ INT_PTR CALLBACK AboutDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam EndDialog(hwnd, IDOK); break; } - return !0; + return TRUE; } - return 0; + return FALSE; } @@ -1149,7 +1182,15 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM l SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); - SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + InitWindowCommon(hwnd, true); + +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { + SetExplorerTheme(GetDlgItem(hwnd, IDOK)); + SetExplorerTheme(GetDlgItem(hwnd, IDCANCEL)); + SetExplorerTheme(GetDlgItem(hwnd, IDC_SEARCHEXE)); + } +#endif // MakeBitmapButton(hwnd,IDC_SEARCHEXE,IDB_OPEN, -1, -1); SendDlgItemMessage(hwnd, IDC_COMMANDLINE, EM_LIMITTEXT, MAX_PATH - 1, 0); @@ -1171,6 +1212,47 @@ static INT_PTR CALLBACK RunDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM l return false; +#ifdef D_NP3_WIN10_DARK_MODE + + case WM_CTLCOLOR: + case WM_CTLCOLORDLG: + case WM_CTLCOLORSTATIC: { + if (UseDarkMode()) { + return SetDarkModeCtl((HDC)wParam); + } + } break; + + case WM_SETTINGCHANGE: + if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); + } + break; + + case WM_THEMECHANGED: { + if (IsDarkModeSupported()) { + bool const darkModeEnabled = CheckDarkModeEnabled(); + AllowDarkModeForWindow(hwnd, darkModeEnabled); + RefreshTitleBarThemeColor(hwnd); + + HWND const hOkBtn = GetDlgItem(hwnd, IDOK); + AllowDarkModeForWindow(hOkBtn, darkModeEnabled); + SendMessage(hOkBtn, WM_THEMECHANGED, 0, 0); + + HWND const hCancelBtn = GetDlgItem(hwnd, IDCANCEL); + AllowDarkModeForWindow(hCancelBtn, darkModeEnabled); + SendMessage(hCancelBtn, WM_THEMECHANGED, 0, 0); + + HWND const hSearchBtn = GetDlgItem(hwnd, IDC_SEARCHEXE); + AllowDarkModeForWindow(hSearchBtn, darkModeEnabled); + SendMessage(hSearchBtn, WM_THEMECHANGED, 0, 0); + + UpdateWindow(hwnd); + } + } + break; + +#endif + case WM_COMMAND: switch (LOWORD(wParam)) @@ -1326,14 +1408,26 @@ static INT_PTR CALLBACK OpenWithDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); - SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + InitWindowCommon(hwnd, true); + +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { + SetExplorerTheme(GetDlgItem(hwnd, IDOK)); + SetExplorerTheme(GetDlgItem(hwnd, IDCANCEL)); + //SetExplorerTheme(GetDlgItem(hwnd, IDC_GETOPENWITHDIR)); + SetExplorerTheme(GetDlgItem(hwnd, IDC_RESIZEGRIP)); + } +#endif ResizeDlg_Init(hwnd, Settings.OpenWithDlgSizeX, Settings.OpenWithDlgSizeY, IDC_RESIZEGRIP); LVCOLUMN lvc = { LVCF_FMT | LVCF_TEXT, LVCFMT_LEFT, 0, L"", -1, 0, 0, 0 }; hwndLV = GetDlgItem(hwnd, IDC_OPENWITHDIR); - InitWindowCommon(hwndLV, false); + InitWindowCommon(hwndLV, true); + + InitListView(hwndLV); // DarkMode + ListView_SetExtendedListViewStyle(hwndLV, /*LVS_EX_FULLROWSELECT|*/ LVS_EX_DOUBLEBUFFER | LVS_EX_LABELTIP); ListView_InsertColumn(hwndLV, 0, &lvc); DirList_Init(hwndLV, NULL); @@ -1378,12 +1472,58 @@ static INT_PTR CALLBACK OpenWithDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM ListView_SetColumnWidth(hwndLV, 0, LVSCW_AUTOSIZE_USEHEADER); } - return !0; + return TRUE; case WM_GETMINMAXINFO: - ResizeDlg_GetMinMaxInfo(hwnd,lParam); - return !0; + ResizeDlg_GetMinMaxInfo(hwnd, lParam); + return TRUE; + +#ifdef D_NP3_WIN10_DARK_MODE + + case WM_CTLCOLOR: + case WM_CTLCOLORDLG: + case WM_CTLCOLORSTATIC: { + if (UseDarkMode()) { + return SetDarkModeCtl((HDC)wParam); + } + } break; + + case WM_SETTINGCHANGE: + if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); + } + break; + + case WM_THEMECHANGED: + if (IsDarkModeSupported()) { + bool const darkModeEnabled = CheckDarkModeEnabled(); + AllowDarkModeForWindow(hwnd, darkModeEnabled); + RefreshTitleBarThemeColor(hwnd); + + HWND const hOkBtn = GetDlgItem(hwnd, IDOK); + AllowDarkModeForWindow(hOkBtn, darkModeEnabled); + SendMessage(hOkBtn, WM_THEMECHANGED, 0, 0); + + HWND const hCancelBtn = GetDlgItem(hwnd, IDCANCEL); + AllowDarkModeForWindow(hCancelBtn, darkModeEnabled); + SendMessage(hCancelBtn, WM_THEMECHANGED, 0, 0); + + //HWND const hOpenWBtn = GetDlgItem(hwnd, IDC_GETOPENWITHDIR); + //AllowDarkModeForWindow(hOpenWBtn, darkModeEnabled); + //SendMessage(hOpenWBtn, WM_THEMECHANGED, 0, 0); + + HWND const hGrip = GetDlgItem(hwnd, IDC_RESIZEGRIP); + AllowDarkModeForWindow(hGrip, darkModeEnabled); + SendMessage(hGrip, WM_THEMECHANGED, 0, 0); + + SendMessage(hwndLV, WM_THEMECHANGED, 0, 0); + + UpdateWindow(hwnd); + } + break; + +#endif case WM_NOTIFY: @@ -1457,11 +1597,9 @@ static INT_PTR CALLBACK OpenWithDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM break; } - return true; } - return false; } @@ -1501,8 +1639,9 @@ bool OpenWithDlg(HWND hwnd,LPCWSTR lpstrFile) sei.nShow = SW_SHOWNORMAL; // resolve links and get short path name - if (!(PathIsLnkFile(lpstrFile) && PathGetLnkPath(lpstrFile,szParam,COUNTOF(szParam)))) - StringCchCopy(szParam,COUNTOF(szParam),lpstrFile); + if (!(PathIsLnkFile(lpstrFile) && PathGetLnkPath(lpstrFile, szParam, COUNTOF(szParam)))) { + StringCchCopy(szParam, COUNTOF(szParam), lpstrFile); + } //GetShortPathName(szParam,szParam,sizeof(WCHAR)*COUNTOF(szParam)); PathQuoteSpaces(szParam); result = ShellExecuteEx(&sei); @@ -1528,7 +1667,16 @@ static INT_PTR CALLBACK FavoritesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARA SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); - SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + InitWindowCommon(hwnd, true); + +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { + SetExplorerTheme(GetDlgItem(hwnd, IDOK)); + SetExplorerTheme(GetDlgItem(hwnd, IDCANCEL)); + //SetExplorerTheme(GetDlgItem(hwnd, IDC_GETFAVORITESDIR)); + SetExplorerTheme(GetDlgItem(hwnd, IDC_RESIZEGRIP)); + } +#endif ResizeDlg_Init(hwnd, Settings.FavoritesDlgSizeX, Settings.FavoritesDlgSizeY, IDC_RESIZEGRIP); @@ -1537,6 +1685,8 @@ static INT_PTR CALLBACK FavoritesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARA hwndLV = GetDlgItem(hwnd, IDC_FAVORITESDIR); InitWindowCommon(hwndLV, false); + InitListView(hwndLV); // DarkMode + ListView_SetExtendedListViewStyle(hwndLV,/*LVS_EX_FULLROWSELECT|*/LVS_EX_DOUBLEBUFFER|LVS_EX_LABELTIP); ListView_InsertColumn(hwndLV,0,&lvc); DirList_Init(hwndLV,NULL); @@ -1588,6 +1738,53 @@ static INT_PTR CALLBACK FavoritesDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARA return true; +#ifdef D_NP3_WIN10_DARK_MODE + + case WM_CTLCOLOR: + case WM_CTLCOLORDLG: + case WM_CTLCOLORSTATIC: { + if (UseDarkMode()) { + return SetDarkModeCtl((HDC)wParam); + } + } break; + + case WM_SETTINGCHANGE: + if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); + } + break; + + case WM_THEMECHANGED: + if (IsDarkModeSupported()) { + bool const darkModeEnabled = CheckDarkModeEnabled(); + AllowDarkModeForWindow(hwnd, darkModeEnabled); + RefreshTitleBarThemeColor(hwnd); + + HWND const hOkBtn = GetDlgItem(hwnd, IDOK); + AllowDarkModeForWindow(hOkBtn, darkModeEnabled); + SendMessage(hOkBtn, WM_THEMECHANGED, 0, 0); + + HWND const hCancelBtn = GetDlgItem(hwnd, IDCANCEL); + AllowDarkModeForWindow(hCancelBtn, darkModeEnabled); + SendMessage(hCancelBtn, WM_THEMECHANGED, 0, 0); + + //HWND const hOpenWBtn = GetDlgItem(hwnd, IDC_GETFAVORITESDIR); + //AllowDarkModeForWindow(hOpenWBtn, darkModeEnabled); + //SendMessage(hOpenWBtn, WM_THEMECHANGED, 0, 0); + + HWND const hGrip = GetDlgItem(hwnd, IDC_RESIZEGRIP); + AllowDarkModeForWindow(hGrip, darkModeEnabled); + SendMessage(hGrip, WM_THEMECHANGED, 0, 0); + + SendMessage(hwndLV, WM_THEMECHANGED, 0, 0); + + UpdateWindow(hwnd); + } + break; + +#endif + + case WM_NOTIFY: { LPNMHDR pnmh = (LPNMHDR)lParam; @@ -1705,7 +1902,16 @@ static INT_PTR CALLBACK AddToFavDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); - SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + InitWindowCommon(hwnd, true); + +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { + SetExplorerTheme(GetDlgItem(hwnd, IDOK)); + SetExplorerTheme(GetDlgItem(hwnd, IDCANCEL)); + //SetExplorerTheme(GetDlgItem(hwnd, IDC_ADDFAV_FILES)); + SetExplorerTheme(GetDlgItem(hwnd, IDC_RESIZEGRIP)); + } +#endif ResizeDlg_InitX(hwnd, Settings.AddToFavDlgSizeX, IDC_RESIZEGRIP); @@ -1715,7 +1921,7 @@ static INT_PTR CALLBACK AddToFavDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA CenterDlgInParent(hwnd, NULL); } - return !0; + return TRUE; case WM_DESTROY: @@ -1741,14 +1947,58 @@ static INT_PTR CALLBACK AddToFavDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA EndDeferWindowPos(hdwp); InvalidateRect(GetDlgItem(hwnd, IDC_FAVORITESDESCR), NULL, TRUE); } - return !0; + return TRUE; case WM_GETMINMAXINFO: ResizeDlg_GetMinMaxInfo(hwnd, lParam); - return !0; + return TRUE; +#ifdef D_NP3_WIN10_DARK_MODE + + case WM_CTLCOLOR: + case WM_CTLCOLORDLG: + case WM_CTLCOLORSTATIC: { + if (UseDarkMode()) { + return SetDarkModeCtl((HDC)wParam); + } + } break; + + case WM_SETTINGCHANGE: + if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); + } + break; + + case WM_THEMECHANGED: + if (IsDarkModeSupported()) { + bool const darkModeEnabled = CheckDarkModeEnabled(); + AllowDarkModeForWindow(hwnd, darkModeEnabled); + RefreshTitleBarThemeColor(hwnd); + + HWND const hOkBtn = GetDlgItem(hwnd, IDOK); + AllowDarkModeForWindow(hOkBtn, darkModeEnabled); + SendMessage(hOkBtn, WM_THEMECHANGED, 0, 0); + + HWND const hCancelBtn = GetDlgItem(hwnd, IDCANCEL); + AllowDarkModeForWindow(hCancelBtn, darkModeEnabled); + SendMessage(hCancelBtn, WM_THEMECHANGED, 0, 0); + + //HWND const hOpenWBtn = GetDlgItem(hwnd, IDC_ADDFAV_FILES); + //AllowDarkModeForWindow(hOpenWBtn, darkModeEnabled); + //SendMessage(hOpenWBtn, WM_THEMECHANGED, 0, 0); + + HWND const hGrip = GetDlgItem(hwnd, IDC_RESIZEGRIP); + AllowDarkModeForWindow(hGrip, darkModeEnabled); + SendMessage(hGrip, WM_THEMECHANGED, 0, 0); + + UpdateWindow(hwnd); + } + break; + +#endif + case WM_COMMAND: switch (LOWORD(wParam)) { @@ -1768,9 +2018,9 @@ static INT_PTR CALLBACK AddToFavDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPA EndDialog(hwnd, IDCANCEL); break; } - return !0; + return TRUE; } - return 0; + return FALSE; } @@ -1917,8 +2167,16 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR SetWindowLongPtr(hwnd, DWLP_USER, (LONG_PTR)lParam); SetDialogIconNP3(hwnd); - SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); + InitWindowCommon(hwnd, true); +#ifdef D_NP3_WIN10_DARK_MODE + if (UseDarkMode()) { + SetExplorerTheme(GetDlgItem(hwnd, IDOK)); + SetExplorerTheme(GetDlgItem(hwnd, IDCANCEL)); + SetExplorerTheme(GetDlgItem(hwnd, IDC_REMOVE)); + SetExplorerTheme(GetDlgItem(hwnd, IDC_RESIZEGRIP)); + } +#endif // sync with other instances if (Settings.SaveRecentFiles && Globals.bCanSaveIniFile) { if (MRU_MergeSave(Globals.pFileMRU, true, Flags.RelativeFileMRU, Flags.PortableMyDocs)) { @@ -1927,7 +2185,9 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR } hwndIL = GetDlgItem(hwnd, IDC_FILEMRU); - InitWindowCommon(hwndIL, false); + InitWindowCommon(hwndIL, true); + + InitListView(hwndIL); // DarkMode SHFILEINFO shfi; ZeroMemory(&shfi, sizeof(SHFILEINFO)); @@ -1968,11 +2228,11 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR CenterDlgInParent(hwnd, NULL); } - return !0; + return TRUE; case WM_DPICHANGED: UpdateWindowLayoutForDPI(hwnd, (RECT*)lParam, NULL); - return !0; + return TRUE; case WM_DESTROY: { @@ -2001,7 +2261,7 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR ResizeDlg_Destroy(hwnd, &Settings.FileMRUDlgSizeX, &Settings.FileMRUDlgSizeY); } - return 0; + return FALSE; case WM_SIZE: { @@ -2019,11 +2279,57 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR EndDeferWindowPos(hdwp); ListView_SetColumnWidth(hwndIL, 0, LVSCW_AUTOSIZE_USEHEADER); } - return !0; + return TRUE; case WM_GETMINMAXINFO: ResizeDlg_GetMinMaxInfo(hwnd, lParam); - return !0; + return TRUE; + +#ifdef D_NP3_WIN10_DARK_MODE + + case WM_CTLCOLOR: + case WM_CTLCOLORDLG: + case WM_CTLCOLORSTATIC: { + if (UseDarkMode()) { + return SetDarkModeCtl((HDC)wParam); + } + } break; + + case WM_SETTINGCHANGE: + if (IsDarkModeSupported() && IsColorSchemeChangeMessage(lParam)) { + SendMessage(hwnd, WM_THEMECHANGED, 0, 0); + } + break; + + case WM_THEMECHANGED: + if (IsDarkModeSupported()) { + bool const darkModeEnabled = CheckDarkModeEnabled(); + AllowDarkModeForWindow(hwnd, darkModeEnabled); + RefreshTitleBarThemeColor(hwnd); + + HWND const hOkBtn = GetDlgItem(hwnd, IDOK); + AllowDarkModeForWindow(hOkBtn, darkModeEnabled); + SendMessage(hOkBtn, WM_THEMECHANGED, 0, 0); + + HWND const hCancelBtn = GetDlgItem(hwnd, IDCANCEL); + AllowDarkModeForWindow(hCancelBtn, darkModeEnabled); + SendMessage(hCancelBtn, WM_THEMECHANGED, 0, 0); + + HWND const hRemBtn = GetDlgItem(hwnd, IDC_REMOVE); + AllowDarkModeForWindow(hRemBtn, darkModeEnabled); + SendMessage(hRemBtn, WM_THEMECHANGED, 0, 0); + + HWND const hGrip = GetDlgItem(hwnd, IDC_RESIZEGRIP); + AllowDarkModeForWindow(hGrip, darkModeEnabled); + SendMessage(hGrip, WM_THEMECHANGED, 0, 0); + + SendMessage(hwndIL, WM_THEMECHANGED, 0, 0); + + UpdateWindow(hwnd); + } + break; + +#endif case WM_NOTIFY: { @@ -2052,7 +2358,7 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR // Display the menu. TrackPopupMenu(hSplitMenu, TPM_LEFTALIGN | TPM_TOPALIGN, pt.x, pt.y, 0, hwnd, NULL); DestroyMenu(hSplitMenu); - return !0; + return TRUE; } break; @@ -2158,7 +2464,7 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR break; } } - return !0; + return TRUE; case WM_COMMAND: @@ -2299,9 +2605,9 @@ static INT_PTR CALLBACK FileMRUDlgProc(HWND hwnd, UINT umsg, WPARAM wParam, LPAR EndDialog(hwnd, IDCANCEL); break; } - return !0; + return TRUE; } - return 0; + return FALSE; } @@ -3048,12 +3354,12 @@ static INT_PTR CALLBACK SelectEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam, CenterDlgInParent(hwnd, NULL); } - return !0; + return TRUE; case WM_DPICHANGED: UpdateWindowLayoutForDPI(hwnd, (RECT*)lParam, NULL); - return !0; + return TRUE; case WM_DESTROY: @@ -3063,7 +3369,7 @@ static INT_PTR CALLBACK SelectEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam, PENCODEDLG pdd = (PENCODEDLG)GetWindowLongPtr(hwnd, DWLP_USER); ResizeDlg_Destroy(hwnd, &pdd->cxDlg, &pdd->cyDlg); } - return 0; + return FALSE; case WM_SIZE: @@ -3079,12 +3385,12 @@ static INT_PTR CALLBACK SelectEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam, EndDeferWindowPos(hdwp); ListView_SetColumnWidth(hwndLV, 0, LVSCW_AUTOSIZE_USEHEADER); } - return !0; + return TRUE; case WM_GETMINMAXINFO: ResizeDlg_GetMinMaxInfo(hwnd,lParam); - return !0; + return TRUE; case WM_NOTIFY: { @@ -3105,7 +3411,7 @@ static INT_PTR CALLBACK SelectEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam, } } } - return !0; + return TRUE; case WM_COMMAND: @@ -3137,9 +3443,9 @@ static INT_PTR CALLBACK SelectEncodingDlgProc(HWND hwnd,UINT umsg,WPARAM wParam, default: break; } - return !0; + return TRUE; } - return 0; + return FALSE; } @@ -4482,7 +4788,7 @@ int ResizeDlg_GetAttr(HWND hwnd, int index) { const LPCRESIZEDLG pm = (LPCRESIZEDLG)GetProp(hwnd, RESIZEDLG_PROP_KEY); return pm->attrs[index]; } - return 0; + return FALSE; } void ResizeDlg_InitY2Ex(HWND hwnd, int cxFrame, int cyFrame, int nIdGrip, int iDirection, int nCtlId1, int nCtlId2) { @@ -4496,7 +4802,7 @@ void ResizeDlg_InitY2Ex(HWND hwnd, int cxFrame, int cyFrame, int nIdGrip, int iD int ResizeDlg_CalcDeltaY2(HWND hwnd, int dy, int cy, int nCtlId1, int nCtlId2) { if (dy == 0) { - return 0; + return FALSE; } if (dy > 0) { return MulDiv(dy, cy, 100); diff --git a/src/Dialogs.h b/src/Dialogs.h index c45b34923..3a212e54e 100644 --- a/src/Dialogs.h +++ b/src/Dialogs.h @@ -83,7 +83,7 @@ void SetDlgPos(HWND hDlg, int xDlg, int yDlg); inline void InitWindowCommon(HWND hwnd, bool bSetExplorerTheme) { if (bSetExplorerTheme) { SetExplorerTheme(hwnd); } - if (Settings.DialogsLayoutRTL) { SetWindowLayoutRTL(hwnd, true); } + SetWindowLayoutRTL(hwnd, Settings.DialogsLayoutRTL); } // resize dialog directions diff --git a/src/Notepad3.c b/src/Notepad3.c index 47de2d336..0891c2d17 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -590,6 +590,38 @@ void SetSavePoint() //============================================================================== +#ifdef D_NP3_WIN10_DARK_MODE +static inline COLORREF _GetDarkBkgColor() +{ + // gets old Win32 colors :-( + //if (IsAppThemed()) { + // HTHEME const hTheme = OpenThemeData(NULL, L"WINDOWSTYLE;WINDOW"); + // if (hTheme) { + // COLORREF const color = GetThemeSysColor(hTheme, COLOR_WINDOW); + // CloseThemeData(hTheme); + // return color; + // } + //} + return 0x282828; +} + + +static inline COLORREF _GetDarkTextColor() +{ + // gets old Win32 colors :-( + //if (IsAppThemed()) { + // HTHEME const hTheme = OpenThemeData(NULL, L"WINDOWSTYLE;WINDOW"); + // if (hTheme) { + // COLORREF const color = GetThemeSysColor(hTheme, COLOR_WINDOWTEXT); + // CloseThemeData(hTheme); + // return color; + // } + //} + return 0xEFEFEF; +} + +#endif + static void _InitGlobals() { @@ -604,6 +636,8 @@ static void _InitGlobals() #ifdef D_NP3_WIN10_DARK_MODE InitDarkMode(); + Globals.rgbDarkBkgColor = _GetDarkBkgColor(); + Globals.rgbDarkTextColor = _GetDarkTextColor(); s_hbrWndDarkBackground = CreateSolidBrush(Globals.rgbDarkBkgColor); #endif @@ -649,9 +683,6 @@ static void _InitGlobals() Globals.idxSelectedTheme = 1; // Default(0), Standard(1) Globals.InitialFontSize = (IsFullHD(NULL, -1, -1) < 0) ? 10 : 11; - Globals.rgbDarkBkgColor = 0x383838; - Globals.rgbDarkTextColor = 0xFFFFFF; - Flags.bLargeFileLoaded = DefaultFlags.bLargeFileLoaded = false; Flags.bDevDebugMode = DefaultFlags.bDevDebugMode = false; Flags.bStickyWindowPosition = DefaultFlags.bStickyWindowPosition = false; @@ -1310,40 +1341,33 @@ bool InitApplication(const HINSTANCE hInstance) return RegisterClassEx(&wc); } + #if 0 //============================================================================= // // InitToolbarWndClass() // -// -bool InitToolbarWndClass(const HINSTANCE hInstance) -{ - WNDCLASSEX tbc; - static bool bIsIntialized = false; - if (bIsIntialized) { - UnregisterClass(s_ToolbarWndClassName, hInstance); +bool InitWndClass(const HINSTANCE hInstance, LPCWSTR lpszWndClassName, LPCWSTR lpszCopyFromWC, bool bUnregisterFirst) { + WNDCLASSEX wcx; + if (bUnregisterFirst) { + UnregisterClass(lpszWndClassName, hInstance); } - ZeroMemory(&tbc, sizeof(WNDCLASSEX)); - tbc.cbSize = sizeof(WNDCLASSEX); + ZeroMemory(&wcx, sizeof(WNDCLASSEX)); + wcx.cbSize = sizeof(WNDCLASSEX); - GetClassInfoEx(hInstance, TOOLBARCLASSNAME, &tbc); // copy members + GetClassInfoEx(hInstance, lpszCopyFromWC, &wcx); // copy members - tbc.style |= TBSTYLE_TRANSPARENT; - //~tbc.lpfnWndProc = (WNDPROC)TBWndProc; ~ don't do that - //~tbc.cbClsExtra = 0; - //~tbc.cbWndExtra = 0; - // tbc.hInstance = hInstance; // done already - // tbc.hIcon = Globals.hDlgIcon; // no need - tbc.hCursor = LoadCursor(NULL, IDC_HAND); - tbc.hbrBackground = s_hbrWndDarkBackground; // @@@ ยงยงยง // GetSysColorBrush(COLOR_WINDOW); //(HBRUSH)(COLOR_WINDOW + 1); - //~tbc.lpszMenuName = MAKEINTRESOURCE(IDR_MUI_POPUPMENU); - tbc.lpszClassName = s_ToolbarWndClassName; + //wcx.lpfnWndProc = (WNDPROC)TBWndProc; ~ don't do that + wcx.hInstance = hInstance; // done already + wcx.hCursor = LoadCursor(NULL, IDC_HAND); + wcx.hbrBackground = UseDarkMode() ? s_hbrWndDarkBackground : (HBRUSH)(COLOR_WINDOW + 1); + wcx.lpszClassName = lpszWndClassName; - bIsIntialized = true; - return RegisterClassEx(&tbc); + return RegisterClassEx(&wcx); } #endif + //============================================================================= // // InitInstance() @@ -2649,6 +2673,7 @@ void CreateBars(HWND hwnd, HINSTANCE hInstance) if (Globals.hwndStatus) { DestroyWindow(Globals.hwndStatus); } + Globals.hwndStatus = CreateStatusWindow(dwStatusbarStyle, NULL, hwnd, IDC_STATUSBAR); //~Globals.hwndStatus = CreateWindowEx( //~ 0, // no extended styles @@ -2664,22 +2689,25 @@ void CreateBars(HWND hwnd, HINSTANCE hInstance) InitWindowCommon(Globals.hwndStatus, true); #ifdef D_NP3_WIN10_DARK_MODE + if (IsDarkModeSupported()) { AllowDarkModeForWindow(Globals.hwndStatus, CheckDarkModeEnabled()); } - //~if (UseDarkMode()) - //~{ - //~ RECT rcSB; - //~ HDC const hdc = GetWindowDC(Globals.hwndStatus); - //~ GetWindowRect(Globals.hwndStatus, &rcSB); - //~ SetMapMode(hdc, MM_ANISOTROPIC); - //~ SetWindowExtEx(hdc, 100, 100, NULL); - //~ SetViewportExtEx(hdc, rcSB.right, rcSB.bottom, NULL); - //~ FillRect(hdc, &rcSB, s_hbrBkgnd); - //~ ReleaseDC(Globals.hwndStatus, hdc); - //~} + //if (UseDarkMode()) + //{ + // RECT rcSB; + // HDC const hdc = GetWindowDC(Globals.hwndStatus); + // GetWindowRect(Globals.hwndStatus, &rcSB); + // SetMapMode(hdc, MM_ANISOTROPIC); + // SetWindowExtEx(hdc, 100, 100, NULL); + // SetViewportExtEx(hdc, rcSB.right, rcSB.bottom, NULL); + // FillRect(hdc, &rcSB, s_hbrWndDarkBackground); + // ReleaseDC(Globals.hwndStatus, hdc); + //} + #endif + } @@ -2906,7 +2934,6 @@ LRESULT MsgSize(HWND hwnd, WPARAM wParam, LPARAM lParam) // // MsgDrawItem() - Handles WM_DRAWITEM // -// LRESULT MsgDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam) { UNUSED(hwnd); @@ -2927,25 +2954,22 @@ LRESULT MsgDrawItem(HWND hwnd, WPARAM wParam, LPARAM lParam) PAINTSTRUCT ps; BeginPaint(hWndSB, &ps); - //HTHEME const hTheme = OpenThemeData(hWndSB, L"Button"); +#ifdef D_NP3_WIN10_DARK_MODE + //HTHEME const hTheme = OpenThemeData(hWndSB, L"BUTTON"); //if (hTheme) { - - if (CheckDarkModeEnabled()) { - SetBkColor(hdc, Globals.rgbDarkBkgColor); - //DrawEdge(hdc, &rc, EDGE_RAISED, BF_RECT); - //DrawThemeEdge(hTheme, hdc, partId, stateId, &rc, EDGE_RAISED, BF_RECT, NULL); - SetTextColor(hdc, Globals.rgbDarkTextColor); - } else { - SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); - //DrawEdge(hdc, &rc, EDGE_RAISED, BF_RECT); - //DrawThemeEdge(hTheme, hdc, partId, stateId, &rc, EDGE_RAISED, BF_RECT, NULL); - SetTextColor(hdc, GetSysColor(COLOR_BTNTEXT)); - } - ExtTextOut(hdc, rc.left + 2, rc.top + 2, ETO_OPAQUE | ETO_NUMERICSLOCAL, - &rc, text, lstrlen(text), NULL); - + SetBkColor(hdc, UseDarkMode() ? Globals.rgbDarkBkgColor : GetSysColor(COLOR_BTNFACE)); + //DrawEdge(hdc, &rc, EDGE_RAISED, BF_RECT); + //DrawThemeEdge(hTheme, hdc, partId, stateId, &rc, EDGE_RAISED, BF_RECT, NULL); + SetTextColor(hdc, UseDarkMode() ? Globals.rgbDarkTextColor : GetSysColor(COLOR_BTNTEXT)); // CloseThemeData(hTheme); //} +#else + SetBkColor(hdc, GetSysColor(COLOR_BTNFACE)); + SetTextColor(hdc, GetSysColor(COLOR_BTNTEXT)); +#endif + + ExtTextOut(hdc, rc.left + 2, rc.top + 2, ETO_OPAQUE | ETO_NUMERICSLOCAL, + &rc, text, lstrlen(text), NULL); EndPaint(hWndSB, &ps); return TRUE; diff --git a/src/Notepad3.vcxproj b/src/Notepad3.vcxproj index c316e4def..c85e25807 100644 --- a/src/Notepad3.vcxproj +++ b/src/Notepad3.vcxproj @@ -566,6 +566,7 @@ + diff --git a/src/Notepad3.vcxproj.filters b/src/Notepad3.vcxproj.filters index c88ca0f6f..edba8c7f8 100644 --- a/src/Notepad3.vcxproj.filters +++ b/src/Notepad3.vcxproj.filters @@ -575,6 +575,9 @@ Source Files\DarkMode + + Source Files\DarkMode + diff --git a/src/TypeDefs.h b/src/TypeDefs.h index de1967707..20111eb87 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -273,7 +273,10 @@ typedef enum #define OCCURRENCE_MARKER_BITMASK() (bitmask32_n(MARKER_NP3_BOOKMARK + 1) & ~(1 << MARKER_NP3_OCCURRENCE)) extern LPCWSTR WordBookMarks[]; + +#ifdef D_NP3_WIN10_DARK_MODE extern HBRUSH s_hbrWndDarkBackground; +#endif // -------------------------------------------------------------------------- @@ -386,8 +389,11 @@ typedef struct _globals_t unsigned idxSelectedTheme; FR_STATES FindReplaceMatchFoundState; + +#ifdef D_NP3_WIN10_DARK_MODE COLORREF rgbDarkBkgColor; COLORREF rgbDarkTextColor; +#endif WCHAR SelectedThemeName[SMALL_BUFFER]; WCHAR WorkingDirectory[MAX_PATH]; @@ -399,6 +405,15 @@ typedef struct _globals_t extern GLOBALS_T Globals; + +#ifdef D_NP3_WIN10_DARK_MODE +inline INT_PTR SetDarkModeCtl(const HDC hdc) { + SetTextColor(hdc, Globals.rgbDarkTextColor); + SetBkColor(hdc, Globals.rgbDarkBkgColor); + return (INT_PTR)s_hbrWndDarkBackground; +} +#endif + // ------------------------------------ typedef struct _settings_t