GUI overhaul

This commit is contained in:
Andrew 2023-04-11 18:42:09 +03:00
parent 7139c79592
commit 602ad90f67
3 changed files with 278 additions and 20 deletions

View File

@ -141,8 +141,9 @@
<ImportLibrary> <ImportLibrary>
</ImportLibrary> </ImportLibrary>
<ProgramDataBaseFile>$(OutDir)$(TargetName).pdb</ProgramDataBaseFile> <ProgramDataBaseFile>$(OutDir)$(TargetName).pdb</ProgramDataBaseFile>
<SubSystem>Console</SubSystem> <SubSystem>Windows</SubSystem>
<AdditionalManifestDependencies>"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"</AdditionalManifestDependencies> <AdditionalManifestDependencies>"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"</AdditionalManifestDependencies>
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link> </Link>
<ProjectReference> <ProjectReference>
<LinkLibraryDependencies>true</LinkLibraryDependencies> <LinkLibraryDependencies>true</LinkLibraryDependencies>

View File

@ -40,6 +40,10 @@
#define IDC_IMAGE1 1050 #define IDC_IMAGE1 1050
#define IDC_LABEL1 1055
#define IDC_LABEL2 1056
#define IDC_LABEL3 1057
typedef unsigned long ul32; typedef unsigned long ul32;
extern HANDLE hConsole; extern HANDLE hConsole;

View File

@ -59,28 +59,220 @@ bool PlayAudio(HINSTANCE hInstance, WCHAR *lpName, UINT bFlags) {
} }
LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) { LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lParam) {
static HBRUSH hBGColorPrim, hBGColorSec, hFGColor, hBtnDefault,
hBtn1Select, hBtn1Hot,
hBtn2Select, hBtn2Hot,
hBtn3Select, hBtn3Hot,
hBtn4Select, hBtn4Hot;
static HPEN hFrameColor, hFramePrim, hBtnDefaultP,
hBtn1SelectP, hBtn1HotP,
hBtn2SelectP, hBtn2HotP,
hBtn3SelectP, hBtn3HotP,
hBtn4SelectP, hBtn4HotP;
static HDC hMainDC;
switch (uMessage) { switch (uMessage) {
case WM_CREATE: case WM_CREATE:
hMainDC = GetDC(hWindow);
hFrameColor = CreatePen(PS_SOLID, 1, RGB(240, 240, 240));
hFramePrim = CreatePen(PS_SOLID, 1, RGB(10, 10, 10));
hBGColorPrim = CreateSolidBrush(RGB(10, 10, 10));
hBGColorSec = (HBRUSH)(GetStockObject(BLACK_BRUSH));
hFGColor = (HBRUSH)GetStockObject(WHITE_BRUSH);
// yellow, blue, red, green
hBtnDefaultP = CreatePen(PS_SOLID, 1, RGB(0, 0, 0));
hBtn1SelectP = CreatePen(PS_SOLID, 1, RGB(160, 160, 0));
hBtn1HotP = CreatePen(PS_SOLID, 1, RGB(80, 80, 0));
hBtn2SelectP = CreatePen(PS_SOLID, 1, RGB(0, 0, 160));
hBtn2HotP = CreatePen(PS_SOLID, 1, RGB(0, 0, 80));
hBtn3SelectP = CreatePen(PS_SOLID, 1, RGB(160, 0, 0));
hBtn3HotP = CreatePen(PS_SOLID, 1, RGB(80, 0, 0));
hBtn4SelectP = CreatePen(PS_SOLID, 1, RGB(0, 160, 0));
hBtn4HotP = CreatePen(PS_SOLID, 1, RGB(0, 80, 0));
hBtnDefault = CreateSolidBrush(RGB(30, 30, 30));
hBtn1Select = CreateSolidBrush(RGB(70, 70, 30));
hBtn1Hot = CreateSolidBrush(RGB(40, 40, 30));
hBtn2Select = CreateSolidBrush(RGB(30, 30, 70));
hBtn2Hot = CreateSolidBrush(RGB(30, 30, 40));
hBtn3Select = CreateSolidBrush(RGB(70, 30, 30));
hBtn3Hot = CreateSolidBrush(RGB(40, 30, 30));
hBtn4Hot = CreateSolidBrush(RGB(30, 40, 30));
hBtn4Select = CreateSolidBrush(RGB(30, 70, 30));
break; break;
case WM_PAINT: {
RECT rGroup = {
10,
165,
589,
430
};
SelectObject(hMainDC, hFrameColor);
SelectObject(hMainDC, GetStockObject(HOLLOW_BRUSH));
RoundRect(hMainDC, 10, 165, 589, 430, 12, 12);
InvalidateRect(GetDlgItem(hWindow, IDC_LABEL1), nullptr, true);
goto execute;
}
case WM_CTLCOLORSTATIC: case WM_CTLCOLORSTATIC:
if ((HWND)lParam == GetDlgItem(hWindow, IDC_EDIT1)) {
SetBkMode((HDC)wParam, TRANSPARENT); SetBkMode((HDC)wParam, TRANSPARENT);
if ((HWND)lParam == GetDlgItem(hWindow, IDC_EDIT1)) {
SetTextColor((HDC)wParam, RGB(255, 255, 0)); SetTextColor((HDC)wParam, RGB(255, 255, 0));
return (LRESULT)((HBRUSH)GetStockObject(BLACK_BRUSH)); return (LRESULT)(hBGColorSec);
}
else {
SetTextColor((HDC)wParam, RGB(255, 255, 255));
return (LRESULT)(hBGColorPrim);
}
break;
case WM_CTLCOLOREDIT:
SetBkMode((HDC)wParam, TRANSPARENT);
if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT1)) {
SetTextColor((HDC)wParam, RGB(255, 140, 140));
}
else if ((HWND)lParam == GetDlgItem(hWindow, IDC_INPUT2)) {
SetTextColor((HDC)wParam, RGB(140, 140, 255));
} }
else goto execute; else goto execute;
break; return (LRESULT)(hBGColorSec);
case WM_CHAR: case WM_CHAR:
if (LOWORD(wParam) == VK_TAB) if (LOWORD(wParam) == VK_TAB)
SetFocus(GetNextDlgTabItem(hWindow, NULL, FALSE)); SetFocus(GetNextDlgTabItem(hWindow, NULL, FALSE));
break; break;
case WM_NOTIFY: {
LPNMHDR nmHeader = (LPNMHDR)lParam;
if (nmHeader->code == NM_CUSTOMDRAW) {
LPNMCUSTOMDRAW item = (LPNMCUSTOMDRAW)nmHeader;
HBRUSH hBtnXSelect, hBtnXHot;
HPEN hBtnXSelectP, hBtnXHotP;
CONST WCHAR *pCaption = L"Unknown";
switch (nmHeader->idFrom) {
case IDC_BUTTON1:
pCaption = L"About";
hBtnXSelect = hBtn1Select;
hBtnXHot = hBtn1Hot;
hBtnXSelectP = hBtn1SelectP;
hBtnXHotP = hBtn1HotP;
break;
case IDC_BUTTON2:
pCaption = L"> Generate <";
hBtnXSelect = hBtn2Select;
hBtnXHot = hBtn2Hot;
hBtnXSelectP = hBtn2SelectP;
hBtnXHotP = hBtn2HotP;
break;
case IDC_BUTTON3:
pCaption = L"Quit";
hBtnXSelect = hBtn3Select;
hBtnXHot = hBtn3Hot;
hBtnXSelectP = hBtn3SelectP;
hBtnXHotP = hBtn3HotP;
break;
case IDC_BUTTON4:
pCaption = L"Random";
hBtnXSelect = hBtn4Select;
hBtnXHot = hBtn4Hot;
hBtnXSelectP = hBtn4SelectP;
hBtnXHotP = hBtn4HotP;
break;
default:
goto execute;
}
SetBkMode(item->hdc, TRANSPARENT);
SetTextColor(item->hdc, RGB(255, 255, 255));
SelectObject(item->hdc, hFramePrim);
SelectObject(item->hdc, hBGColorPrim);
Rectangle(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom);
if (item->uItemState & CDIS_SELECTED) {
SelectObject(item->hdc, hBtnXSelectP);
SelectObject(item->hdc, hBtnXSelect);
}
else if (item->uItemState & CDIS_HOT) {
SelectObject(item->hdc, hBtnXHotP);
SelectObject(item->hdc, hBtnXHot);
}
else {
SelectObject(item->hdc, hBtnDefaultP);
SelectObject(item->hdc, hBtnDefault);
}
RoundRect(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom, 12, 12);
DrawTextW(item->hdc, pCaption, -1, &item->rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
return CDRF_SKIPDEFAULT;
}
return CDRF_DODEFAULT;
}
case WM_COMMAND: case WM_COMMAND:
switch (LOWORD(wParam)) { switch (LOWORD(wParam)) {
case IDC_LABEL2: {
switch (HIWORD(wParam)) {
case STN_CLICKED:
CheckRadioButton(hWindow, IDC_RADIO1, IDC_RADIO2, IDC_RADIO1);
break;
}
break;
}
case IDC_LABEL3: {
switch (HIWORD(wParam)) {
case STN_CLICKED:
CheckRadioButton(hWindow, IDC_RADIO1, IDC_RADIO2, IDC_RADIO2);
break;
}
break;
}
case IDC_BUTTON1: { case IDC_BUTTON1: {
ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL); ShellExecuteW(hWindow, L"open", pAboutLink, nullptr, nullptr, SW_SHOWNORMAL);
@ -161,6 +353,35 @@ LRESULT CALLBACK WNDProc(HWND hWindow, UINT uMessage, WPARAM wParam, LPARAM lPar
break; break;
case WM_DESTROY: case WM_DESTROY:
DeleteObject(hBGColorPrim);
DeleteObject(hBtn1Select);
DeleteObject(hBtn1Hot);
DeleteObject(hBtn2Select);
DeleteObject(hBtn2Hot);
DeleteObject(hBtn3Select);
DeleteObject(hBtn3Hot);
DeleteObject(hBtn4Select);
DeleteObject(hBtn4Hot);
DeleteObject(hBtnDefault);
DeleteObject(hBtn1SelectP);
DeleteObject(hBtn1HotP);
DeleteObject(hBtn2SelectP);
DeleteObject(hBtn2HotP);
DeleteObject(hBtn3SelectP);
DeleteObject(hBtn3HotP);
DeleteObject(hBtn4SelectP);
DeleteObject(hBtn4HotP);
DeleteObject(hBtnDefaultP);
DeleteObject(hFrameColor);
DeleteObject(hFramePrim);
ReleaseDC(hWindow, hMainDC);
PostQuitMessage(0); PostQuitMessage(0);
break; break;
@ -186,7 +407,7 @@ bool InitializeWindow(HINSTANCE hInstance) {
wndClass.hInstance = hInstance; wndClass.hInstance = hInstance;
wndClass.lpfnWndProc = (WNDPROC)WNDProc; wndClass.lpfnWndProc = (WNDPROC)WNDProc;
wndClass.lpszClassName = L"XPKeygen"; wndClass.lpszClassName = L"XPKeygen";
wndClass.hbrBackground = (HBRUSH)COLOR_WINDOW; wndClass.hbrBackground = (HBRUSH)CreateSolidBrush(RGB(10, 10, 10));
wndClass.style = CS_HREDRAW | CS_VREDRAW; wndClass.style = CS_HREDRAW | CS_VREDRAW;
wndClass.hIcon = LoadIconW(nullptr, MAKEINTRESOURCEW(IDI_ICON1)); wndClass.hIcon = LoadIconW(nullptr, MAKEINTRESOURCEW(IDI_ICON1));
wndClass.hIconSm = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_ICON1)); wndClass.hIconSm = LoadIconW(hInstance, MAKEINTRESOURCEW(IDI_ICON1));
@ -237,12 +458,12 @@ bool InitializeWindow(HINSTANCE hInstance) {
HWND hGroupBox = CreateWindowExW( HWND hGroupBox = CreateWindowExW(
0, 0,
L"Button", L"Windows XP Pro VLK x86 // Server 2003 + SP2 x64", L"Static", L"Windows XP Pro VLK x86 // Server 2003 + SP2 x64",
WS_CHILD | WS_VISIBLE | WS_CHILD | WS_VISIBLE |
BS_GROUPBOX, SS_CENTER,
10, 150, 42, 150,
w - 36, h - 200, 515, 32,
hMainWindow, nullptr, hMainWindow, (HMENU)IDC_LABEL1,
hInstance, nullptr hInstance, nullptr
); );
@ -340,11 +561,11 @@ bool InitializeWindow(HINSTANCE hInstance) {
HWND hRadio1 = CreateWindowExW( HWND hRadio1 = CreateWindowExW(
WS_EX_WINDOWEDGE, WS_EX_WINDOWEDGE,
L"Button", L"Button",
L"Windows XP VLK", L"",
WS_VISIBLE | WS_CHILD | WS_GROUP | WS_VISIBLE | WS_CHILD | WS_GROUP | WS_TABSTOP |
BS_AUTORADIOBUTTON, BS_AUTORADIOBUTTON,
70, 219, 70, 219,
120, 20, 17, 20,
hMainWindow, hMainWindow,
(HMENU)IDC_RADIO1, (HMENU)IDC_RADIO1,
hInstance, NULL hInstance, NULL
@ -353,20 +574,48 @@ bool InitializeWindow(HINSTANCE hInstance) {
SendMessageW(hRadio1, BM_SETCHECK, 1, 0); SendMessageW(hRadio1, BM_SETCHECK, 1, 0);
SendMessageW(hRadio1, WM_SETFONT, (WPARAM)hLabelFont, 0); SendMessageW(hRadio1, WM_SETFONT, (WPARAM)hLabelFont, 0);
HWND hRadioLabel1 = CreateWindowExW(
0,
L"Static",
L"Windows XP VLK",
WS_CHILD | WS_VISIBLE |
SS_NOTIFY,
89, 221,
90, 16,
hMainWindow, (HMENU)IDC_LABEL2,
hInstance, nullptr
);
SendMessageW(hRadioLabel1, WM_SETFONT, (WPARAM)hLabelFont, 0);
HWND hRadio2 = CreateWindowExW( HWND hRadio2 = CreateWindowExW(
WS_EX_WINDOWEDGE, WS_EX_WINDOWEDGE,
L"Button", L"Button",
L"Windows Server 2003 / SP2 x64", L"",
WS_VISIBLE | WS_CHILD | WS_VISIBLE | WS_CHILD | WS_TABSTOP |
BS_AUTORADIOBUTTON, BS_AUTORADIOBUTTON,
200, 219, 200, 219,
180, 20, 17, 20,
hMainWindow, hMainWindow,
(HMENU)IDC_RADIO2, (HMENU)IDC_RADIO2,
hInstance, NULL); hInstance, NULL);
SendMessageW(hRadio2, WM_SETFONT, (WPARAM)hLabelFont, 0); SendMessageW(hRadio2, WM_SETFONT, (WPARAM)hLabelFont, 0);
HWND hRadioLabel2 = CreateWindowExW(
0,
L"Static",
L"Windows Server 2003 / SP2 x64",
WS_CHILD | WS_VISIBLE |
SS_NOTIFY,
218, 221,
170, 16,
hMainWindow, (HMENU)IDC_LABEL3,
hInstance, nullptr
);
SendMessageW(hRadioLabel2, WM_SETFONT, (WPARAM)hLabelFont, 0);
HWND hEdit = CreateWindowExW( HWND hEdit = CreateWindowExW(
0, 0,
L"Edit", L"Edit",
@ -388,7 +637,8 @@ bool InitializeWindow(HINSTANCE hInstance) {
0, 0,
L"Button", L"Button",
L"About", L"About",
WS_CHILD | WS_VISIBLE | WS_TABSTOP, WS_CHILD | WS_VISIBLE | WS_TABSTOP |
BS_PUSHBUTTON,
44, h - 90, 44, h - 90,
100, 27, 100, 27,
hMainWindow, hMainWindow,
@ -419,7 +669,8 @@ bool InitializeWindow(HINSTANCE hInstance) {
0, 0,
L"Button", L"Button",
L"Quit", L"Quit",
WS_CHILD | WS_VISIBLE | WS_TABSTOP, WS_CHILD | WS_VISIBLE | WS_TABSTOP |
BS_PUSHBUTTON,
w - 160, h - 90, w - 160, h - 90,
100, 27, 100, 27,
hMainWindow, hMainWindow,
@ -438,9 +689,11 @@ bool InitializeWindow(HINSTANCE hInstance) {
MSG uMessage; MSG uMessage;
while(GetMessageW(&uMessage, nullptr, 0, 0)) { while(GetMessageW(&uMessage, nullptr, 0, 0)) {
if (!IsDialogMessageW(hMainWindow, &uMessage)) {
TranslateMessage(&uMessage); TranslateMessage(&uMessage);
DispatchMessageW(&uMessage); DispatchMessageW(&uMessage);
} }
}
ReleaseDC(hMainWindow, hMainDC); ReleaseDC(hMainWindow, hMainDC);