Browse Source

Dark mode and classic theme support for GUI

pull/51/head
Valentin Radu 4 years ago
parent
commit
92f5e9084e
  1. 3
      CHANGELOG.md
  2. 8
      ExplorerPatcher/ExplorerPatcher.rc
  3. 327
      ExplorerPatcher/GUI.c
  4. 7
      ExplorerPatcher/GUI.h

3
CHANGELOG.md

@ -10,7 +10,8 @@ Tested on build: 22000.194. @@ -10,7 +10,8 @@ Tested on build: 22000.194.
* Bluetooth and Safe to Remove menus toggle their visibility when clicked
* Bluetooth and Safe to Remove menus are centered relative to the icon they are invoked from
* WiFi list now correctly toggles when clicking the Network icon in the taskbar
* Reliability improvements for restoring old search bar in File Explorer when patcher is used alongside other programs
* The settings GUI now supports dark mode and switches correctly when the system theme changes
* The settings GUI draws correctly when themes are disabled (classic theme compatibility)
* Optionally uses DLL from StartAllBack (`StartAllBackX64.dll`) instead of StartIsBack(TBD) (which was called `StartIsBack64.dll`); the StartAllBack DLL has SHA-256: `D8D1484D6F7DE94C5018B03A5A93EE8BBB7795BCA5408A721CBB74BE28065689`
## 22000.194.0.23

8
ExplorerPatcher/ExplorerPatcher.rc

@ -51,8 +51,8 @@ END @@ -51,8 +51,8 @@ END
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 22000,194,0,23
PRODUCTVERSION 22000,194,0,23
FILEVERSION 22000,194,0,24
PRODUCTVERSION 22000,194,0,24
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
@ -69,12 +69,12 @@ BEGIN @@ -69,12 +69,12 @@ BEGIN
BEGIN
VALUE "CompanyName", "VALINET Solutions SRL"
VALUE "FileDescription", "ExplorerPatcher"
VALUE "FileVersion", "22000.194.0.23"
VALUE "FileVersion", "22000.194.0.24"
VALUE "InternalName", "ExplorerPatcher.dll"
VALUE "LegalCopyright", "Copyright (C) 2006-2021 VALINET Solutions SRL. All rights reserved."
VALUE "OriginalFilename", "ExplorerPatcher.dll"
VALUE "ProductName", "ExplorerPatcher"
VALUE "ProductVersion", "22000.194.0.23"
VALUE "ProductVersion", "22000.194.0.24"
END
END
BLOCK "VarFileInfo"

327
ExplorerPatcher/GUI.c

@ -1,5 +1,30 @@ @@ -1,5 +1,30 @@
#include "GUI.h"
BOOL g_darkModeEnabled = FALSE;
static void(*RefreshImmersiveColorPolicyState)() = NULL;
static int(*SetPreferredAppMode)(int bAllowDark) = NULL;
static BOOL(*AllowDarkModeForWindow)(HWND hWnd, BOOL bAllowDark) = NULL;
static BOOL(*ShouldAppsUseDarkMode)() = NULL;
BOOL IsHighContrast()
{
HIGHCONTRASTW highContrast;
ZeroMemory(&highContrast, sizeof(HIGHCONTRASTW));
highContrast.cbSize = sizeof(highContrast);
if (SystemParametersInfoW(SPI_GETHIGHCONTRAST, sizeof(highContrast), &highContrast, FALSE))
return highContrast.dwFlags & HCF_HIGHCONTRASTON;
return FALSE;
}
BOOL IsColorSchemeChangeMessage(LPARAM lParam)
{
BOOL is = FALSE;
if (lParam && CompareStringOrdinal(lParam, -1, L"ImmersiveColorSet", -1, TRUE) == CSTR_EQUAL)
{
RefreshImmersiveColorPolicyState();
is = TRUE;
}
return is;
}
static HRESULT GUI_AboutProc(
HWND hwnd,
UINT uNotification,
@ -67,9 +92,9 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -67,9 +92,9 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
RECT rc;
GetClientRect(hwnd, &rc);
HRSRC hRscr = FindResourceA(
HRSRC hRscr = FindResource(
hModule,
MAKEINTRESOURCEA(IDR_REGISTRY1),
MAKEINTRESOURCE(IDR_REGISTRY1),
RT_RCDATA
);
if (!hRscr)
@ -92,9 +117,17 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -92,9 +117,17 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
LOGFONT logFont;
memset(&logFont, 0, sizeof(logFont));
NONCLIENTMETRICS ncm;
ncm.cbSize = sizeof(NONCLIENTMETRICS);
SystemParametersInfoW(
SPI_GETNONCLIENTMETRICS,
sizeof(NONCLIENTMETRICS),
&ncm,
0
);
logFont = ncm.lfCaptionFont;
logFont.lfHeight = GUI_CAPTION_FONT_SIZE * dy;
logFont.lfWeight = FW_BOLD;
wcscpy_s(logFont.lfFaceName, 32, L"Segoe UI");
HFONT hFontCaption = CreateFontIndirect(&logFont);
logFont.lfHeight = GUI_TITLE_FONT_SIZE * dy;
HFONT hFontTitle = CreateFontIndirect(&logFont);
@ -109,10 +142,11 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -109,10 +142,11 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
DTTOPTS DttOpts;
DttOpts.dwSize = sizeof(DTTOPTS);
DttOpts.dwFlags = DTT_COMPOSITED | DTT_TEXTCOLOR;
DttOpts.crText = GUI_TEXTCOLOR;
//DttOpts.crText = GetSysColor(COLOR_WINDOWTEXT);
DttOpts.crText = g_darkModeEnabled ? GUI_TEXTCOLOR_DARK : GUI_TEXTCOLOR;
DWORD dwTextFlags = DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS;
RECT rcText;
DWORD dwCL = 0;
DWORD dwMaxHeight = 0, dwMaxWidth = 0;
BOOL bTabOrderHit = FALSE;
HDC hdcPaint = NULL;
@ -122,6 +156,14 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -122,6 +156,14 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
if (!hDC || (hDC && hdcPaint))
{
if (!IsThemeActive())
{
COLORREF oldcr = SetBkColor(hdcPaint, GetSysColor(COLOR_WINDOW));
ExtTextOutW(hdcPaint, 0, 0, ETO_OPAQUE, &rc, L"", 0, 0);
SetBkColor(hdcPaint, oldcr);
SetTextColor(hdcPaint, GetSysColor(COLOR_WINDOWTEXT));
}
FILE* f = fmemopen(pRscr, cbRscr, "r");
char* line = malloc(MAX_LINE_LENGTH * sizeof(char));
wchar_t* text = malloc(MAX_LINE_LENGTH * sizeof(wchar_t));
@ -149,9 +191,9 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -149,9 +191,9 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
DWORD dwLineHeight = GUI_LINE_HEIGHT;
rcText.left = _this->padding.left;
rcText.top = _this->padding.top + dwCL;
rcText.top = _this->padding.top + dwMaxHeight;
rcText.right = (rc.right - rc.left) - _this->padding.right;
rcText.bottom = dwCL + dwLineHeight * dy - _this->padding.bottom;
rcText.bottom = dwMaxHeight + dwLineHeight * dy - _this->padding.bottom;
if (!strncmp(line, ";T ", 3))
{
@ -222,32 +264,74 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -222,32 +264,74 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
}
if (hDC)
{
COLORREF cr;
if (!strncmp(line, ";u ", 3) && tabOrder == _this->tabOrder)
{
bTabOrderHit = TRUE;
DttOpts.crText = GUI_TEXTCOLOR_SELECTED;
if (!IsThemeActive())
{
cr = SetTextColor(hdcPaint, GetSysColor(COLOR_HIGHLIGHT));
}
else
{
DttOpts.crText = g_darkModeEnabled ? GUI_TEXTCOLOR_SELECTED_DARK : GUI_TEXTCOLOR_SELECTED;
//DttOpts.crText = GetSysColor(COLOR_HIGHLIGHT);
}
}
DrawThemeTextEx(
_this->hTheme,
RECT rcNew = rcText;
DrawTextW(
hdcPaint,
hOldFont ? 0 : 8,
0,
text,
-1,
dwTextFlags,
&rcText,
&DttOpts
&rcNew,
DT_CALCRECT
);
if (rcNew.right - rcNew.left > dwMaxWidth)
{
dwMaxWidth = rcNew.right - rcNew.left + 20 * dx;
}
if (IsThemeActive())
{
DrawThemeTextEx(
_this->hTheme,
hdcPaint,
hOldFont ? 0 : 8,
0,
text,
-1,
dwTextFlags,
&rcText,
&DttOpts
);
}
else
{
DrawTextW(
hdcPaint,
text,
-1,
&rcText,
dwTextFlags
);
}
if (!strncmp(line, ";u ", 3) && tabOrder == _this->tabOrder)
{
DttOpts.crText = GUI_TEXTCOLOR;
if (!IsThemeActive())
{
SetTextColor(hdcPaint, cr);
}
else
{
DttOpts.crText = g_darkModeEnabled ? GUI_TEXTCOLOR_DARK : GUI_TEXTCOLOR;
//DttOpts.crText = GetSysColor(COLOR_WINDOWTEXT);
}
}
}
else
{
RECT rcTemp;
rcTemp = rcText;
DrawText(
DrawTextW(
GetDC(hwnd),
text,
-1,
@ -432,7 +516,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -432,7 +516,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
}
}
}
dwCL += dwLineHeight * dy;
dwMaxHeight += dwLineHeight * dy;
if (!strncmp(line, ";u ", 3))
{
tabOrder++;
@ -624,7 +708,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -624,7 +708,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
}
RECT rcTemp;
rcTemp = rcText;
DrawText(
DrawTextW(
GetDC(hwnd),
text,
-1,
@ -737,7 +821,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -737,7 +821,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
{
RECT rcTemp;
rcTemp = rcText;
DrawText(
DrawTextW(
GetDC(hwnd),
text,
-1,
@ -765,28 +849,70 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -765,28 +849,70 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
}
if (hDC)
{
COLORREF cr;
if (tabOrder == _this->tabOrder)
{
bTabOrderHit = TRUE;
DttOpts.crText = GUI_TEXTCOLOR_SELECTED;
if (!IsThemeActive())
{
cr = SetTextColor(hdcPaint, GetSysColor(COLOR_HIGHLIGHT));
}
else
{
DttOpts.crText = g_darkModeEnabled ? GUI_TEXTCOLOR_SELECTED_DARK : GUI_TEXTCOLOR_SELECTED;
//DttOpts.crText = GetSysColor(COLOR_HIGHLIGHT);
}
}
DrawThemeTextEx(
_this->hTheme,
RECT rcNew = rcText;
DrawTextW(
hdcPaint,
0,
0,
text,
-1,
dwTextFlags,
&rcText,
&DttOpts
&rcNew,
DT_CALCRECT
);
if (rcNew.right - rcNew.left > dwMaxWidth)
{
dwMaxWidth = rcNew.right - rcNew.left + 20 * dx;
}
if (IsThemeActive())
{
DrawThemeTextEx(
_this->hTheme,
hdcPaint,
0,
0,
text,
-1,
dwTextFlags,
&rcText,
&DttOpts
);
}
else
{
DrawTextW(
hdcPaint,
text,
-1,
&rcText,
dwTextFlags
);
}
if (tabOrder == _this->tabOrder)
{
DttOpts.crText = GUI_TEXTCOLOR;
if (!IsThemeActive())
{
SetTextColor(hdcPaint, cr);
}
else
{
DttOpts.crText = g_darkModeEnabled ? GUI_TEXTCOLOR_DARK : GUI_TEXTCOLOR;
//DttOpts.crText = GetSysColor(COLOR_WINDOWTEXT);
}
}
}
dwCL += dwLineHeight * dy;
dwMaxHeight += dwLineHeight * dy;
tabOrder++;
}
}
@ -809,8 +935,35 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt) @@ -809,8 +935,35 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
_this->tabOrder = 0;
}
}
EndBufferedPaint(hBufferedPaint, TRUE);
}
if (_this->bCalcExtent)
{
RECT rcWin;
GetWindowRect(hwnd, &rcWin);
printf("%d %d - %d %d\n", rcWin.right - rcWin.left, rcWin.bottom - rcWin.top, dwMaxWidth, dwMaxHeight);
dwMaxWidth += _this->padding.left + _this->padding.right;
dwMaxHeight += GUI_LINE_HEIGHT * dy + 20 * dy;
HMONITOR hMonitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTOPRIMARY);
MONITORINFO mi;
mi.cbSize = sizeof(MONITORINFO);
GetMonitorInfo(hMonitor, &mi);
SetWindowPos(
hwnd,
hwnd,
mi.rcWork.left + ((mi.rcWork.right - mi.rcWork.left) / 2 - (dwMaxWidth) / 2),
mi.rcWork.top + ((mi.rcWork.bottom - mi.rcWork.top) / 2 - (dwMaxHeight) / 2),
dwMaxWidth,
dwMaxHeight,
SWP_NOZORDER | SWP_NOACTIVATE
);
_this->bCalcExtent = FALSE;
InvalidateRect(hwnd, NULL, FALSE);
}
EndBufferedPaint(hBufferedPaint, TRUE);
return TRUE;
}
@ -855,6 +1008,17 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR @@ -855,6 +1008,17 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
_this->size.cy * dyp,
SWP_NOZORDER | SWP_NOACTIVATE
);
if (IsThemeActive() && ShouldAppsUseDarkMode)
{
AllowDarkModeForWindow(hWnd, g_darkModeEnabled);
BOOL value = g_darkModeEnabled;
DwmSetWindowAttribute(hWnd, DWMWA_USE_IMMERSIVE_DARK_MODE, &value, sizeof(BOOL));
}
if (!IsThemeActive())
{
int extendedStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
SetWindowLong(hWnd, GWL_EXSTYLE, extendedStyle | WS_EX_DLGMODALFRAME);
}
}
else
{
@ -866,6 +1030,30 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR @@ -866,6 +1030,30 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
PostQuitMessage(0);
return 0;
}
else if (uMsg == WM_SETTINGCHANGE)
{
if (IsColorSchemeChangeMessage(lParam))
{
if (IsThemeActive() && ShouldAppsUseDarkMode)
{
BOOL bIsCompositionEnabled = TRUE;
DwmIsCompositionEnabled(&bIsCompositionEnabled);
BOOL bDarkModeEnabled = IsThemeActive() && bIsCompositionEnabled && ShouldAppsUseDarkMode() && !IsHighContrast();
if (bDarkModeEnabled != g_darkModeEnabled)
{
g_darkModeEnabled = bDarkModeEnabled;
AllowDarkModeForWindow(hWnd, g_darkModeEnabled);
BOOL value = g_darkModeEnabled;
DwmSetWindowAttribute(hWnd, DWMWA_USE_IMMERSIVE_DARK_MODE, &value, sizeof(BOOL));
InvalidateRect(hWnd, NULL, FALSE);
}
}
else
{
InvalidateRect(hWnd, NULL, FALSE);
}
}
}
else if (uMsg == WM_KEYDOWN)
{
if (wParam == VK_ESCAPE)
@ -899,7 +1087,7 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR @@ -899,7 +1087,7 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
return 0;
}
}
else if (uMsg == WM_NCHITTEST)
else if (uMsg == WM_NCHITTEST && IsThemeActive())
{
POINT pt;
pt.x = GET_X_LPARAM(lParam);
@ -937,8 +1125,16 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR @@ -937,8 +1125,16 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
}
else if (uMsg == WM_PAINT)
{
MARGINS marGlassInset = { -1, -1, -1, -1 }; // -1 means the whole window
DwmExtendFrameIntoClientArea(hWnd, &marGlassInset);
if (IsThemeActive())
{
BOOL bIsCompositionEnabled = TRUE;
DwmIsCompositionEnabled(&bIsCompositionEnabled);
if (bIsCompositionEnabled)
{
MARGINS marGlassInset = { -1, -1, -1, -1 }; // -1 means the whole window
DwmExtendFrameIntoClientArea(hWnd, &marGlassInset);
}
}
PAINTSTRUCT ps;
HDC hDC = BeginPaint(hWnd, &ps);
@ -999,7 +1195,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin @@ -999,7 +1195,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin
SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
GUI _this;
_this.hBackgroundBrush = (HBRUSH)GetStockObject(BLACK_BRUSH);
_this.hBackgroundBrush = (HBRUSH)(CreateSolidBrush(RGB(255, 255, 255)));// (HBRUSH)GetStockObject(BLACK_BRUSH);
_this.location.x = GUI_POSITION_X;
_this.location.y = GUI_POSITION_Y;
_this.size.cx = GUI_POSITION_WIDTH;
@ -1010,6 +1206,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin @@ -1010,6 +1206,7 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin
_this.padding.bottom = GUI_PADDING_BOTTOM;
_this.hTheme = OpenThemeData(NULL, TEXT(GUI_WINDOWSWITCHER_THEME_CLASS));
_this.tabOrder = 0;
_this.bCalcExtent = TRUE;
WNDCLASS wc = { 0 };
ZeroMemory(&wc, sizeof(WNDCLASSW));
@ -1027,7 +1224,32 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin @@ -1027,7 +1224,32 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin
{
LoadStringW(hModule, IDS_PRODUCTNAME, title, 260);
}
HANDLE hUxtheme = NULL;
BOOL bHasLoadedUxtheme = FALSE;
BOOL bIsCompositionEnabled = TRUE;
DwmIsCompositionEnabled(&bIsCompositionEnabled);
if (IsThemeActive() && bIsCompositionEnabled)
{
bHasLoadedUxtheme = TRUE;
hUxtheme = LoadLibraryW(L"uxtheme.dll");
if (hUxtheme)
{
RefreshImmersiveColorPolicyState = GetProcAddress(hUxtheme, (LPCSTR)104);
SetPreferredAppMode = GetProcAddress(hUxtheme, (LPCSTR)135);
AllowDarkModeForWindow = GetProcAddress(hUxtheme, (LPCSTR)133);
ShouldAppsUseDarkMode = GetProcAddress(hUxtheme, (LPCSTR)132);
if (ShouldAppsUseDarkMode &&
SetPreferredAppMode &&
AllowDarkModeForWindow &&
RefreshImmersiveColorPolicyState
)
{
SetPreferredAppMode(TRUE);
RefreshImmersiveColorPolicyState();
g_darkModeEnabled = IsThemeActive() && bIsCompositionEnabled && ShouldAppsUseDarkMode() && !IsHighContrast();
}
}
}
HWND hwnd = CreateWindowEx(
NULL,
L"ExplorerPatcherGUI",
@ -1043,17 +1265,23 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin @@ -1043,17 +1265,23 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin
{
return 1;
}
BOOL value = 1;
DwmSetWindowAttribute(hwnd, 1029, &value, sizeof(BOOL));
WTA_OPTIONS ops;
ops.dwFlags = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;
ops.dwMask = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;
SetWindowThemeAttribute(
hwnd,
WTA_NONCLIENT,
&ops,
sizeof(WTA_OPTIONS)
);
if (IsThemeActive())
{
if (bIsCompositionEnabled)
{
BOOL value = 1;
DwmSetWindowAttribute(hwnd, DWMWA_MICA_EFFFECT, &value, sizeof(BOOL));
WTA_OPTIONS ops;
ops.dwFlags = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;
ops.dwMask = WTNCA_NODRAWCAPTION | WTNCA_NODRAWICON;
SetWindowThemeAttribute(
hwnd,
WTA_NONCLIENT,
&ops,
sizeof(WTA_OPTIONS)
);
}
}
ShowWindow(hwnd, SW_SHOW);
MSG msg = { 0 };
@ -1063,5 +1291,10 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin @@ -1063,5 +1291,10 @@ __declspec(dllexport) int ZZGUI(HWND hWnd, HINSTANCE hInstance, LPSTR lpszCmdLin
DispatchMessage(&msg);
}
if (bHasLoadedUxtheme)
{
FreeLibrary(hUxtheme);
}
printf("Ended \"GUI\" thread.\n");
}

7
ExplorerPatcher/GUI.h

@ -27,8 +27,8 @@ extern HMODULE hModule; @@ -27,8 +27,8 @@ extern HMODULE hModule;
#define GUI_POSITION_X CW_USEDEFAULT
#define GUI_POSITION_Y CW_USEDEFAULT
#define GUI_POSITION_WIDTH 467
#define GUI_POSITION_HEIGHT 716
#define GUI_POSITION_WIDTH 367
#define GUI_POSITION_HEIGHT 616
#define GUI_WINDOWSWITCHER_THEME_CLASS "ControlPanelStyle"
#define GUI_CAPTION_FONT_SIZE -22
#define GUI_TITLE_FONT_SIZE -12
@ -36,6 +36,8 @@ extern HMODULE hModule; @@ -36,6 +36,8 @@ extern HMODULE hModule;
#define GUI_CAPTION_LINE_HEIGHT 42
#define GUI_TEXTCOLOR RGB(0, 0, 0)
#define GUI_TEXTCOLOR_SELECTED RGB(255, 0, 0)
#define GUI_TEXTCOLOR_DARK RGB(240, 240, 240)
#define GUI_TEXTCOLOR_SELECTED_DARK RGB(255, 150, 150)
#define GUI_MAX_TABORDER 9999
#define GUI_PADDING 5
#define GUI_PADDING_LEFT GUI_PADDING * 3
@ -52,6 +54,7 @@ typedef struct _GUI @@ -52,6 +54,7 @@ typedef struct _GUI
POINT dpi;
MARGINS extent;
UINT tabOrder;
BOOL bCalcExtent;
} GUI;
static HRESULT GUI_AboutProc(

Loading…
Cancel
Save