mirror of
https://github.com/BeneficialCode/WinArk
synced 2026-08-09 12:00:31 +00:00
169 lines
5.7 KiB
C++
169 lines
5.7 KiB
C++
#include "stdafx.h"
|
|
#include "ThemeSystem.h"
|
|
#include "AppSettings.h"
|
|
#include "IniFile.h"
|
|
|
|
int g_AvHighFont = 0x10;
|
|
int g_AvWidthFont = 0x8;
|
|
HFONT g_hAppFont;
|
|
|
|
HPEN g_hBlackPen, g_hWhitePen, g_hDarkGrayPen;
|
|
HPEN g_myPen[20];
|
|
|
|
COLORREF g_crLightGray, g_crDarkGray, g_crBlack;
|
|
COLORREF g_myColor[20];
|
|
|
|
HBRUSH g_hLightGrayBrush;
|
|
HBRUSH g_myBrush[20];
|
|
|
|
t_scheme g_myScheme[8];
|
|
|
|
HWND g_hWndMainFrame;
|
|
HWND g_hWndMDIClient;
|
|
HWND g_hWndTop = 0;
|
|
|
|
void InitColorSys() {
|
|
HDC hdc = GetDC(g_hWndMainFrame);
|
|
g_crLightGray = GetNearestColor(hdc, RGB(0xc0, 0xc0, 0xc0));
|
|
g_crDarkGray = GetNearestColor(hdc, RGB(0x80, 0x80, 0x80));
|
|
g_crBlack = GetNearestColor(hdc, RGB(0, 0, 0));
|
|
|
|
g_myColor[0] = GetNearestColor(hdc, RGB(0, 0, 0));
|
|
g_myColor[1] = GetNearestColor(hdc, RGB(0x80, 0, 0));
|
|
g_myColor[2] = GetNearestColor(hdc, RGB(0, 0x80, 0));
|
|
g_myColor[3] = GetNearestColor(hdc, RGB(0x80, 0x80, 0));
|
|
g_myColor[4] = GetNearestColor(hdc, RGB(0, 0, 0x80));
|
|
g_myColor[5] = GetNearestColor(hdc, RGB(0x80, 0, 0x80));
|
|
g_myColor[6] = GetNearestColor(hdc, RGB(0, 0x80, 0x80));
|
|
g_myColor[7] = GetNearestColor(hdc, RGB(0xc0, 0xc0, 0xc0));
|
|
g_myColor[8] = GetNearestColor(hdc, RGB(0x80, 0x80, 0x80));
|
|
g_myColor[9] = GetNearestColor(hdc, RGB(0xff, 0, 0));
|
|
g_myColor[10] = GetNearestColor(hdc, RGB(0, 0xff, 0));
|
|
g_myColor[11] = GetNearestColor(hdc, RGB(0xff, 0xff, 0));
|
|
g_myColor[12] = GetNearestColor(hdc, RGB(0, 0, 0xff));
|
|
g_myColor[13] = GetNearestColor(hdc, RGB(0xff, 0, 0xff));
|
|
g_myColor[14] = GetNearestColor(hdc, RGB(0, 0xff, 0xff));
|
|
g_myColor[15] = GetNearestColor(hdc, RGB(0xff, 0xff, 0xff));
|
|
g_myColor[16] = GetNearestColor(hdc, RGB(0xc0, 0xdc, 0xc0));
|
|
g_myColor[17] = GetNearestColor(hdc, RGB(0x16, 0xc6, 0x12));
|
|
g_myColor[18] = GetNearestColor(hdc, RGB(0x53, 0x53, 0x53));
|
|
g_myColor[19] = GetNearestColor(hdc, RGB(0xa4, 0xa0, 0xa0));
|
|
}
|
|
|
|
void InitFontSys() {
|
|
LOGFONT lf;
|
|
lf.lfHeight = 0;
|
|
if (AppSettings::Get().Load(L"Software\\YuanOS\\WinArk")) {
|
|
lf = AppSettings::Get().Font();
|
|
}
|
|
if (!lf.lfHeight) {
|
|
lf.lfHeight = -14;
|
|
lf.lfWidth = 0;
|
|
lf.lfEscapement = 0;
|
|
lf.lfOrientation = 0;
|
|
lf.lfWeight = FW_NORMAL;
|
|
lf.lfItalic = 0;
|
|
lf.lfUnderline = 0;
|
|
lf.lfStrikeOut = 0;
|
|
lf.lfCharSet = GB2312_CHARSET;
|
|
lf.lfOutPrecision = OUT_STROKE_PRECIS;
|
|
lf.lfClipPrecision = CLIP_STROKE_PRECIS;
|
|
lf.lfQuality = DRAFT_QUALITY;
|
|
lf.lfPitchAndFamily = FF_SWISS | VARIABLE_PITCH;
|
|
wcscpy_s(lf.lfFaceName, L"΢ČíŃĹşÚ");
|
|
}
|
|
g_hAppFont = CreateFontIndirect(&lf);
|
|
}
|
|
|
|
void InitPenSys() {
|
|
g_hBlackPen = static_cast<HPEN>(GetStockObject(BLACK_PEN));
|
|
g_hWhitePen = static_cast<HPEN>(GetStockObject(WHITE_PEN));
|
|
g_hDarkGrayPen = CreatePen(PS_SOLID, 0, g_crDarkGray);
|
|
|
|
g_myPen[0] = (HPEN)GetStockObject(BLACK_PEN);
|
|
g_myPen[1] = CreatePen(PS_SOLID, 0, g_myColor[1]);
|
|
g_myPen[2] = CreatePen(PS_SOLID, 0, g_myColor[2]);
|
|
g_myPen[3] = CreatePen(PS_SOLID, 0, g_myColor[3]);
|
|
g_myPen[4] = CreatePen(PS_SOLID, 0, g_myColor[4]);
|
|
g_myPen[5] = CreatePen(PS_SOLID, 0, g_myColor[5]);
|
|
g_myPen[6] = CreatePen(PS_SOLID, 0, g_myColor[6]);
|
|
g_myPen[7] = CreatePen(PS_SOLID, 0, g_myColor[7]);
|
|
g_myPen[8] = CreatePen(PS_SOLID, 0, g_myColor[8]);
|
|
g_myPen[9] = CreatePen(PS_SOLID, 0, g_myColor[9]);
|
|
g_myPen[10] = CreatePen(PS_SOLID, 0, g_myColor[10]);
|
|
g_myPen[11] = CreatePen(PS_SOLID, 0, g_myColor[11]);
|
|
g_myPen[12] = CreatePen(PS_SOLID, 0, g_myColor[12]);
|
|
g_myPen[13] = CreatePen(PS_SOLID, 0, g_myColor[13]);
|
|
g_myPen[14] = CreatePen(PS_SOLID, 0, g_myColor[14]);
|
|
g_myPen[15] = CreatePen(PS_SOLID, 0, g_myColor[15]);
|
|
g_myPen[16] = CreatePen(PS_SOLID, 0, g_myColor[16]);
|
|
g_myPen[17] = CreatePen(PS_SOLID, 0, g_myColor[17]);
|
|
g_myPen[18] = CreatePen(PS_SOLID, 0, g_myColor[18]);
|
|
g_myPen[19] = CreatePen(PS_SOLID, 0, g_myColor[19]);
|
|
}
|
|
|
|
void InitBrushSys() {
|
|
g_hLightGrayBrush = CreateSolidBrush(g_crLightGray);
|
|
|
|
g_myBrush[0] = (HBRUSH)GetStockObject(BLACK_BRUSH);
|
|
g_myBrush[1] = CreateSolidBrush(g_myColor[1]);
|
|
g_myBrush[2] = CreateSolidBrush(g_myColor[2]);
|
|
g_myBrush[3] = CreateSolidBrush(g_myColor[3]);
|
|
g_myBrush[4] = CreateSolidBrush(g_myColor[4]);
|
|
g_myBrush[5] = CreateSolidBrush(g_myColor[5]);
|
|
g_myBrush[6] = CreateSolidBrush(g_myColor[6]);
|
|
g_myBrush[7] = CreateSolidBrush(g_myColor[7]);
|
|
g_myBrush[8] = CreateSolidBrush(g_myColor[8]);
|
|
g_myBrush[9] = CreateSolidBrush(g_myColor[9]);
|
|
g_myBrush[10] = CreateSolidBrush(g_myColor[10]);
|
|
g_myBrush[11] = CreateSolidBrush(g_myColor[11]);
|
|
g_myBrush[12] = CreateSolidBrush(g_myColor[12]);
|
|
g_myBrush[13] = CreateSolidBrush(g_myColor[13]);
|
|
g_myBrush[14] = CreateSolidBrush(g_myColor[14]);
|
|
g_myBrush[15] = CreateSolidBrush(g_myColor[15]);
|
|
g_myBrush[16] = CreateSolidBrush(g_myColor[16]);
|
|
g_myBrush[17] = CreateSolidBrush(g_myColor[17]);
|
|
g_myBrush[18] = CreateSolidBrush(g_myColor[18]);
|
|
g_myBrush[19] = CreateSolidBrush(g_myColor[19]);
|
|
}
|
|
|
|
void InitSchemSys() {
|
|
g_myScheme[0].name = "Marine";
|
|
g_myScheme[0].textcolor = Black;
|
|
g_myScheme[0].hitextcolor = Red;
|
|
g_myScheme[0].lowcolor = DarkGray;
|
|
g_myScheme[0].bkcolor = White;
|
|
g_myScheme[0].selbkcolor = Yellow;
|
|
g_myScheme[0].linecolor = DarkBlue;
|
|
g_myScheme[0].auxcolor = Blue;
|
|
g_myScheme[0].condbkcolor = Magenta;
|
|
}
|
|
|
|
bool SaveColors(PCWSTR path, PCWSTR prefix, const ThemeColor* colors, int count) {
|
|
IniFile file(path);
|
|
CString text;
|
|
|
|
for (int i = 0; i < count; i++) {
|
|
text.Format(L"%s%d", prefix, i);
|
|
auto& info = colors[i];
|
|
if (!file.WriteColor(text, L"Color", info.Color))
|
|
return false;
|
|
file.WriteString(text, L"Name", info.Name);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool LoadColors(PCWSTR path, PCWSTR prefix, ThemeColor* colors, int count) {
|
|
IniFile file(path);
|
|
if (!file.IsValid())
|
|
return false;
|
|
|
|
CString text;
|
|
for (int i = 0; i < count; i++) {
|
|
text.Format(L"%s%d", prefix, i);
|
|
auto& info = colors[i];
|
|
info.Color = file.ReadColor(text, L"Color", info.Color);
|
|
info.Name = file.ReadString(text, L"Name", info.Name);
|
|
}
|
|
return true;
|
|
} |