GetSysColor

本文介绍了Windows API中的GetSysColor函数,详细列举了该函数的参数及其含义,并解释了如何通过不同参数值来获取系统中各种显示对象的颜色。

1简介

原 型:DWORD GetSysColor(int nIndex);
说 明:判断指定windows显示对象的颜色。
返回值:DWORD,指定对象的RGB颜色。

2参数

参 数:nIndex:一个常数,指出特定的windows显示对象。取值如下:
1. COLOR_ACTIVEBORDER [10]:活动窗口的边框。
2. COLOR_ACTIVECAPTION [2]:活动窗口的标题。
3. COLOR_APPWORKSPACE [12]:MDI桌面的背景。
4. COLOR_BACKGROUND [1]:windows桌面。
5. COLOR_BTNFACE [15]:按钮。
6. COLOR_BTNHIGHLIGHT [20]:按钮的3D加亮区。
7. COLOR_BTNSHADOW [16]:按钮的3D阴影。
8. COLOR_BTNTEXT [18]:按钮文字。
9. COLOR_CAPTIONTEXT [9]:窗口标题中的文字。
10. COLOR_GRAYTEXT [17]:灰色文字;如使用了抖动技术则为零。
11. COLOR_HIGHLIGHT [13]:选定的项目背景。
12. COLOR_HIGHLIGHTTEXT [14]:选定的项目文字。
13. COLOR_INACTIVEBORDER [11]:不活动窗口的边框。
14. COLOR_INACTIVECAPTION [3]:不活动窗口的标题。
15. COLOR_INACTIVECAPTIONTEXT [19]:不活动窗口的文字。
16. COLOR_MENU [4]:菜单。
17. COLOR_MENUTEXT [7]:菜单正文。
18. COLOR_SCROLLBAR [0]:滚动条。
19. COLOR_WINDOW [5]:窗口背景;
20. COLOR_WINDOWFRAME [6]:窗框
21. COLOR_WINDOWTEXT [8]:窗口正文。
22. COLOR_3DDKSHADOW [21]:3D深阴影。
23. COLOR_3DFACE [COLOR_BTNFACE]:3D阴影化对象的正面颜色。
24. COLOR_3DHILIGHT [COLOR_BTNHIGHLIGHT]:3D加亮颜色(win95)。
25. COLOR_3DLIGHT [22]:3D阴影化对象的浅色。
26. COLOR_INFOBK [24]:工具提示的背景色。
27. COLOR_INFOTEXT [23]:工具提示的文本色。
28. COLOR_HOTLIGHT [26]:
29. COLOR_GRADIENTACTIVECAPTION [27]:
30. COLOR_GRADIENTINACTIVECAPTION [28]:
31. COLOR_DESKTOP [COLOR_BACKGROUND]:桌面颜色。
32. COLOR_3DHIGHLIGHT [COLOR_BTNHIGHLIGHT]:
33. COLOR_BTNHILIGHT [COLOR_BTNHIGHLIGHT]:
// ------------------ 窗口消息处理 ------------------ LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: { ClearLogFile(); current_vehicle_speed = 0; // 创建暂停按钮 HWND pauseButton = CreateWindowW( L"BUTTON", L"Pause", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, 160, 200, 100, 30, hwnd, (HMENU)IDC_PAUSE_BUTTON, NULL, NULL ); HANDLE thread = CreateThread(NULL, 0, WorkerThread, hwnd, 0, NULL); if (!thread) { MessageBox(NULL, L"Error", L"Failed to create thread", MB_ICONERROR); PostQuitMessage(-1); } CloseHandle(thread); break; } case WM_USER + 1: { wchar_t buffer[256]; // 将总行驶距离从毫米转换为米(四舍五入到米) uint64_t total_distance_m = (total_distance_mm + 500) / 1000; // 获取当前系统时间 SYSTEMTIME st; GetLocalTime(&st); swprintf(buffer, 256, L"Time: %02d:%02d:%02d", st.wHour, st.wMinute, st.wSecond); // 获取客户区大小 RECT clientRect; GetClientRect(hwnd, &clientRect); // 定义动态内容区域,避免覆盖按钮部分 RECT dynamicRect = clientRect; dynamicRect.bottom -= 110; // 保留底部按钮区域 // 获取设备上下文 HDC hdc = GetDC(hwnd); HDC memDC = CreateCompatibleDC(hdc); // 创建内存DC HBITMAP memBitmap = CreateCompatibleBitmap(hdc, dynamicRect.right - dynamicRect.left, dynamicRect.bottom - dynamicRect.top); SelectObject(memDC, memBitmap); // 将位图选入内存DC // 填充动态内容区域背景 HBRUSH hBrush = CreateSolidBrush(GetSysColor(COLOR_WINDOW)); // 默认窗口背景色 FillRect(memDC, &dynamicRect, hBrush); DeleteObject(hBrush); // 设置字体 HFONT hFont = CreateFontW( 36, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, L"Arial"); HFONT oldFont = SelectObject(memDC, hFont); // 打印当前时间 RECT timeRect = { dynamicRect.left + 50, dynamicRect.top + 10, dynamicRect.right - 50, dynamicRect.top + 50 // 时间显示区域 }; SetTextColor(memDC, RGB(0, 0, 0)); // 黑色字体 DrawTextW(memDC, buffer, -1, &timeRect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); // 打印车辆速度 RECT speedRect = { dynamicRect.left + 50, dynamicRect.top + 70, dynamicRect.right - 50, dynamicRect.bottom - 50 }; swprintf(buffer, 256, L"Speed: %d km/h", current_vehicle_speed); SetTextColor(memDC, RGB(0, 0, 255)); // 蓝色字体 DrawTextW(memDC, buffer, -1, &speedRect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); // 打印总行驶距离 RECT distanceRect = { dynamicRect.left + 50, dynamicRect.top + 150, dynamicRect.right - 50, dynamicRect.bottom - 30 }; if (total_distance_m >= 100000) { swprintf(buffer, 256, L"Distance: %.1f km",total_distance_m / 1000.0); // 显示为 km(保留1位小数) } else { swprintf(buffer, 256, L"Distance: %d m", (int)total_distance_m); // 显示为米 } SetTextColor(memDC, RGB(255, 0, 0)); // 红色字体 DrawTextW(memDC, buffer, -1, &distanceRect, DT_CENTER | DT_SINGLELINE | DT_VCENTER); // 将内存DC的内容复制到动态区域 BitBlt(hdc, dynamicRect.left, dynamicRect.top, dynamicRect.right - dynamicRect.left, dynamicRect.bottom - dynamicRect.top, memDC, 0, 0, SRCCOPY); // 清理资源 SelectObject(memDC, oldFont); DeleteObject(hFont); DeleteDC(memDC); DeleteObject(memBitmap); ReleaseDC(hwnd, hdc); break; } case WM_COMMAND: { if (LOWORD(wParam) == IDC_PAUSE_BUTTON) { is_paused = !is_paused; HWND pauseButton = GetDlgItem(hwnd, IDC_PAUSE_BUTTON); SetWindowTextW(pauseButton, is_paused ? L"Resume" : L"Pause"); } break; } case WM_DESTROY: { PostQuitMessage(0); break; } default: { return DefWindowProc(hwnd, uMsg, wParam, lParam); } } return 0; } // ------------------ 主程序入口 ------------------ int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) { WNDCLASSW wc = {0}; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszClassName = L"VehicleLogger"; if (!RegisterClassW(&wc)) return -1; HWND hwnd = CreateWindowW( L"VehicleLogger", L"CAN Signal Logger", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 450, 300, NULL, NULL, hInstance, NULL ); if (!hwnd) return -1; MSG msg = {0}; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return 0; } 接着修改代码规范
最新发布
09-23
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值