我想使用Common Controls和Win32 API创建某种暗模式按钮。
我想使用自定义图形来设置按钮的背景和文本颜色。
至于背景,它似乎工作正常,但我不知道如何设置文本颜色。
这是我所做的(在窗口处理程序函数中:)]
LRESULT CALLBACK WindowHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { static HBRUSH defaultbrush = NULL; static HBRUSH hotbrush = NULL; static HBRUSH selectbrush = NULL; switch (msg) { case WM_CREATE: { HWND button = CreateWindowA("Button", "Click Me", WS_VISIBLE | WS_CHILD, 10, 10, 80, 30, hwnd, (HMENU)1, NULL, NULL); if (!button) { MessageBoxA(NULL, "Button Creation Failed!", "Error!", MB_ICONEXCLAMATION); exit(EXIT_FAILURE); } break; } case WM_NOTIFY: { LPNMHDR some_item = (LPNMHDR)lParam; if (some_item->idFrom == 1 && some_item->code == NM_CUSTOMDRAW) { LPNMCUSTOMDRAW item = (LPNMCUSTOMDRAW)some_item; if (item->uItemState & CDIS_SELECTED) { //Select our color when the button is selected if (selectbrush == NULL) selectbrush = CreateSolidBrush(0x383838); //Create pen for button border HPEN pen = CreatePen(PS_INSIDEFRAME, 0, RGB(0, 0, 0)); //Select our brush into hDC HGDIOBJ old_pen = SelectObject(item->hdc, pen); HGDIOBJ old_brush = SelectObject(item->hdc, selectbrush); Rectangle(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom); //Clean up SelectObject(item->hdc, old_pen); SelectObject(item->hdc, old_brush); DeleteObject(pen); //Here is the problem: DrawTextA(item->hdc, "Click Me", -1, &item->rc, DT_CENTER | DT_VCENTER); return CDRF_SKIPDEFAULT; } else { if (item->uItemState & CDIS_HOT) //Our mouse is over the button { //Select our color when the mouse hovers our button if (hotbrush == NULL) hotbrush = CreateSolidBrush(0x474747); HPEN pen = CreatePen(PS_INSIDEFRAME, 0, RGB(0, 0, 0)); HGDIOBJ old_pen = SelectObject(item->hdc, pen); HGDIOBJ old_brush = SelectObject(item->hdc, hotbrush); Rectangle(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom); SelectObject(item->hdc, old_pen); SelectObject(item->hdc, old_brush); DeleteObject(pen); //Here too: DrawTextA(item->hdc, "Click Me", -1, &item->rc, DT_CENTER | DT_VCENTER); return CDRF_SKIPDEFAULT; } //Select our color when our button is doing nothing if (defaultbrush == NULL) defaultbrush = CreateSolidBrush(0x383838); HPEN pen = CreatePen(PS_INSIDEFRAME, 0, RGB(0, 0, 0)); HGDIOBJ old_pen = SelectObject(item->hdc, pen); HGDIOBJ old_brush = SelectObject(item->hdc, defaultbrush); Rectangle(item->hdc, item->rc.left, item->rc.top, item->rc.right, item->rc.bottom); SelectObject(item->hdc, old_pen); SelectObject(item->hdc, old_brush); DeleteObject(pen); //And also here: DrawTextA(item->hdc, "Click Me", -1, &item->rc, DT_CENTER | DT_VCENTER); return CDRF_SKIPDEFAULT; } } return CDRF_DODEFAULT; break; } case WM_DESTROY: DeleteObject(defaultbrush); DeleteObject(selectbrush); DeleteObject(hotbrush); PostQuitMessage(0); break; } return DefWindowProcA(hwnd, msg, wParam, lParam); }
我尝试遵循我在Stack Overflow上找到的另一篇文章:How can I change the background color of a button WinAPI C++但是它们仅显示如何设置背景颜色,而不显示文本颜色。
有人可以帮我吗?
我想使用Common Controls&Win32 API创建某种暗模式按钮。我想使用自定义绘图来设置按钮的背景和文本颜色。至于背景...
您只需要在调用SetTextColor
之前的某个位置,使用SetTextColor
功能设置文本颜色: