gpt4 book ai didi

c++ - 更改 win32 的单选按钮文本颜色

转载 作者:行者123 更新时间:2023-11-28 06:08:29 27 4
gpt4 key购买 nike

颜色变化时,我听 WM_CTLCOLORSTATIC 并采取相应行动:

LRESULT ProcessWindowMessage(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
{
switch (uMsg)
{
case WM_CTLCOLORSTATIC:
LRESULT lBrush = ::DefWindowProc(hWnd, uMsg, wParam, lParam); // get default brush used so far
::SetBkMode((HDC)wParam, TRANSPARENT);
::SetTextColor((HDC)wParam, RGB(m_color.red, m_color.green, m_color.blue));
return lBrush;
}
}

这适用于常规静态文本:标签等,但对常规单选按钮没有影响。

在调试过程中,我试过听:

  1. WM_DRAWITEM - 没有收到任何事件
  2. WM_CTLCOLORBTN - 仅接收常规按钮(确定/取消)的事件
  3. WM_CTLCOLOREDIT - 没有收到任何事件。

我正在子类化到另一个不是由我生成/创建,而是由我的进程构建的窗口。

最佳答案

@igal k 说 SetWindowTheme 不起作用。由于示例代码的注释不够。我将其发布为答案。

首先是结果。

enter image description here

代码:

OnInitDialog:
::SetWindowTheme(GetDlgItem(IDC_RADIO1)->GetSafeHwnd(), L"wstr", L"wstr");

HBRUSH CMFCApplication1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// Call the base class implementation first! Otherwise, it may
// undo what we're trying to accomplish here.
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

// Are we painting the IDC_MYSTATIC control? We can use
// CWnd::GetDlgCtrlID() to perform the most efficient test.
if (pWnd->GetDlgCtrlID() == IDC_RADIO1)
{
// Set the text color to red
pDC->SetTextColor(RGB(255, 0, 0));

// Set the background mode for text to transparent
// so background will show thru.
pDC->SetBkMode(TRANSPARENT);

// Return handle to our CBrush object
hbr = m_brush;
}

return hbr;
}

关于c++ - 更改 win32 的单选按钮文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31854015/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com