mirror of
https://github.com/zs-yg/kortapp-z.git
synced 2025-12-06 16:10:42 +08:00
Add files via upload
This commit is contained in:
@@ -5,5 +5,7 @@
|
||||
#include "system_info.h"
|
||||
|
||||
void update_main_window(HWND hWnd, SystemInfo* sysInfo);
|
||||
void toggle_fullscreen(HWND hWnd);
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
#endif // MAIN_WINDOW_H
|
||||
|
||||
@@ -1,31 +1,101 @@
|
||||
#include "main_window.h"
|
||||
#include "disk_info.h"
|
||||
#include <tchar.h>
|
||||
#include <commctrl.h>
|
||||
#include <wchar.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define IDC_INFO_TEXT 1002
|
||||
#define IDM_FULLSCREEN 1003
|
||||
|
||||
// 全屏状态标志
|
||||
static BOOL g_isFullScreen = FALSE;
|
||||
// 保存原始窗口位置和大小
|
||||
static RECT g_windowRect;
|
||||
|
||||
void toggle_fullscreen(HWND hWnd) {
|
||||
g_isFullScreen = !g_isFullScreen;
|
||||
|
||||
if (g_isFullScreen) {
|
||||
// 保存当前窗口位置和大小
|
||||
GetWindowRect(hWnd, &g_windowRect);
|
||||
|
||||
// 设置全屏样式
|
||||
SetWindowLong(hWnd, GWL_STYLE,
|
||||
WS_OVERLAPPEDWINDOW & ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_SYSMENU));
|
||||
|
||||
// 设置全屏尺寸
|
||||
MONITORINFO mi = {0};
|
||||
mi.cbSize = sizeof(mi);
|
||||
GetMonitorInfo(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &mi);
|
||||
SetWindowPos(hWnd, HWND_TOP,
|
||||
mi.rcMonitor.left,
|
||||
mi.rcMonitor.top,
|
||||
mi.rcMonitor.right - mi.rcMonitor.left,
|
||||
mi.rcMonitor.bottom - mi.rcMonitor.top,
|
||||
SWP_FRAMECHANGED);
|
||||
} else {
|
||||
// 恢复窗口样式
|
||||
SetWindowLong(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW);
|
||||
|
||||
// 恢复原始大小和位置
|
||||
SetWindowPos(hWnd, NULL,
|
||||
g_windowRect.left,
|
||||
g_windowRect.top,
|
||||
g_windowRect.right - g_windowRect.left,
|
||||
g_windowRect.bottom - g_windowRect.top,
|
||||
SWP_FRAMECHANGED);
|
||||
}
|
||||
}
|
||||
|
||||
void update_main_window(HWND hWnd, SystemInfo* sysInfo) {
|
||||
// 根据全屏状态计算窗口尺寸
|
||||
int windowWidth, windowHeight;
|
||||
if (g_isFullScreen) {
|
||||
MONITORINFO mi = {0};
|
||||
mi.cbSize = sizeof(mi);
|
||||
GetMonitorInfo(MonitorFromWindow(hWnd, MONITOR_DEFAULTTONEAREST), &mi);
|
||||
windowWidth = mi.rcMonitor.right - mi.rcMonitor.left;
|
||||
windowHeight = mi.rcMonitor.bottom - mi.rcMonitor.top;
|
||||
} else {
|
||||
// 普通模式下使用70%屏幕尺寸
|
||||
windowWidth = (int)(GetSystemMetrics(SM_CXSCREEN) * 0.7);
|
||||
windowHeight = (int)(GetSystemMetrics(SM_CYSCREEN) * 0.7);
|
||||
}
|
||||
|
||||
HWND hInfoText = GetDlgItem(hWnd, IDC_INFO_TEXT);
|
||||
if (!hInfoText) {
|
||||
if (hInfoText) {
|
||||
// 更新现有控件大小和位置
|
||||
SetWindowPos(hInfoText, NULL,
|
||||
30, 50, windowWidth - 60, windowHeight - 80,
|
||||
SWP_NOZORDER);
|
||||
} else {
|
||||
// 创建信息显示控件
|
||||
hInfoText = CreateWindow(
|
||||
_T("EDIT"),
|
||||
_T(""),
|
||||
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_READONLY,
|
||||
20, 50, 800, 550,
|
||||
WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_READONLY | WS_BORDER,
|
||||
30, 50, windowWidth - 60, windowHeight - 80,
|
||||
hWnd,
|
||||
(HMENU)IDC_INFO_TEXT,
|
||||
(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),
|
||||
NULL);
|
||||
|
||||
SendMessage(hInfoText, WM_SETFONT,
|
||||
(WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
|
||||
// 计算动态字体大小
|
||||
int fontSize = max(16, windowHeight / 30);
|
||||
|
||||
// 创建支持中文的字体
|
||||
HFONT hFont = CreateFont(
|
||||
fontSize, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
|
||||
DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
|
||||
DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,
|
||||
_T("Microsoft YaHei"));
|
||||
|
||||
SendMessage(hInfoText, WM_SETFONT, (WPARAM)hFont, TRUE);
|
||||
}
|
||||
|
||||
// 使用宽字符处理所有文本
|
||||
wchar_t infoText[2048];
|
||||
wchar_t infoText[4096]; // 增大缓冲区以适应磁盘信息
|
||||
wchar_t cpuNameW[256];
|
||||
MultiByteToWideChar(CP_UTF8, 0, sysInfo->cpuName, -1, cpuNameW, 256);
|
||||
|
||||
@@ -51,5 +121,26 @@ void update_main_window(HWND hWnd, SystemInfo* sysInfo) {
|
||||
sysInfo->osVersion.dwMinorVersion,
|
||||
sysInfo->osVersion.dwBuildNumber);
|
||||
|
||||
// 添加磁盘信息
|
||||
DiskInfo disks[26];
|
||||
int diskCount;
|
||||
get_disk_info(disks, &diskCount);
|
||||
|
||||
wchar_t diskInfoText[2048];
|
||||
swprintf(diskInfoText, 2048,
|
||||
L"\r\n[磁盘信息]\r\n"
|
||||
L"磁盘数量: %d\r\n", diskCount);
|
||||
wcscat(infoText, diskInfoText);
|
||||
|
||||
for (int i = 0; i < diskCount; i++) {
|
||||
swprintf(diskInfoText, 2048,
|
||||
L"%c: 文件系统: %ls, 总容量: %.2f GB, 剩余容量: %.2f GB\r\n",
|
||||
disks[i].driveLetter,
|
||||
disks[i].fileSystem[0] ? L"NTFS" : L"",
|
||||
(float)disks[i].totalBytes / (1024 * 1024 * 1024),
|
||||
(float)disks[i].freeBytes / (1024 * 1024 * 1024));
|
||||
wcscat(infoText, diskInfoText);
|
||||
}
|
||||
|
||||
SetWindowTextW(hInfoText, infoText);
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ BOOL register_window_class(HINSTANCE hInstance) {
|
||||
wcex.hInstance = hInstance;
|
||||
wcex.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
|
||||
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
|
||||
wcex.hbrBackground = CreateSolidBrush(RGB(240, 240, 240));
|
||||
wcex.lpszMenuName = NULL;
|
||||
wcex.lpszClassName = _T("SystemInfoWindowClass");
|
||||
wcex.hIconSm = LoadIcon(hInstance, IDI_APPLICATION);
|
||||
@@ -47,10 +47,10 @@ int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage)
|
||||
HWND hWnd = CreateWindowW(
|
||||
L"SystemInfoWindowClass",
|
||||
windowTitle,
|
||||
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_CLIPCHILDREN,
|
||||
WS_POPUP | WS_VISIBLE,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT,
|
||||
450, 300,
|
||||
NULL, NULL, hInstance, NULL);
|
||||
800, 600,
|
||||
NULL, NULL, hInstance, sysInfo);
|
||||
|
||||
if (!hWnd) {
|
||||
return 0;
|
||||
@@ -75,14 +75,28 @@ int create_main_window(HINSTANCE hInstance, SystemInfo* sysInfo, UINT codePage)
|
||||
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
|
||||
switch (message) {
|
||||
case WM_CREATE: {
|
||||
// 安全初始化系统信息指针
|
||||
if (lParam) {
|
||||
g_sysInfo = (SystemInfo*)((CREATESTRUCT*)lParam)->lpCreateParams;
|
||||
}
|
||||
if (!g_sysInfo) {
|
||||
MessageBoxW(hWnd, L"系统信息初始化失败", L"错误", MB_ICONERROR);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 创建显示系统信息的按钮
|
||||
CreateWindowW(L"BUTTON", L"刷新信息",
|
||||
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
|
||||
WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER,
|
||||
10, 10, 150, 30,
|
||||
hWnd, (HMENU)IDC_MAIN_BUTTON,
|
||||
(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL);
|
||||
break;
|
||||
}
|
||||
case WM_SIZE: {
|
||||
// 窗口大小变化时更新布局
|
||||
update_main_window(hWnd, g_sysInfo);
|
||||
break;
|
||||
}
|
||||
case WM_COMMAND: {
|
||||
if (LOWORD(wParam) == IDC_MAIN_BUTTON) {
|
||||
// 刷新系统信息
|
||||
@@ -91,6 +105,25 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_KEYDOWN: {
|
||||
// F11键切换全屏
|
||||
if (wParam == VK_F11) {
|
||||
toggle_fullscreen(hWnd);
|
||||
update_main_window(hWnd, g_sysInfo);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_NCCALCSIZE:
|
||||
if (wParam) {
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
case WM_ERASEBKGND: {
|
||||
RECT rc;
|
||||
GetClientRect(hWnd, &rc);
|
||||
FillRect((HDC)wParam, &rc, (HBRUSH)GetClassLongPtr(hWnd, GCLP_HBRBACKGROUND));
|
||||
return 1;
|
||||
}
|
||||
case WM_DESTROY: {
|
||||
PostQuitMessage(0);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user