在使用 OnCtlColor 函数改变对话框中 Edit 控件中文字字体颜色时,可能出现颜色不生效的情况有以下几种可能的原因:

  1. 对话框中的 Edit 控件没有设置为只读(Read Only)。如果 Edit 控件是可编辑的,需要将其设置为只读,以便在 OnCtlColor 函数中修改字体颜色。 例如,在 OnInitDialog 函数中添加以下代码:
GetDlgItem(IDC_EDIT1)->SetReadOnly(TRUE);
  1. 未正确处理 OnCtlColor 函数中的消息。在使用 OnCtlColor 函数时,需要正确处理消息并返回绘制时所需的画刷对象。以下是一个示例代码:
HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
    HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

    if (nCtlColor == CTLCOLOR_EDIT)
    {
        // 设置字体颜色
        pDC->SetTextColor(RGB(255, 0, 0));

        // 设置背景颜色
        pDC->SetBkColor(RGB(255, 255, 255));

        // 返回画刷对象
        hbr = (HBRUSH)GetStockObject(WHITE_BRUSH);
    }

    return hbr;
}
  1. 在对话框的 DoDataExchange 函数中,未将 Edit 控件与对应的成员变量绑定。在使用 OnCtlColor 函数时,需要确保 Edit 控件与对应的成员变量绑定,以便在对话框中正确获取和设置 Edit 控件的内容。 例如,在 DoDataExchange 函数中添加以下代码:
DDX_Text(pDX, IDC_EDIT1, m_strText);

如果上述方法仍然无法解决问题,可能需要检查其他代码是否与字体颜色设置冲突或覆盖了 OnCtlColor 函数的设置。可以尝试在其他相关代码中进行调试和排查。

Edit 控件字体颜色设置无效?OnCtlColor 函数应用技巧

原文地址: https://www.cveoy.top/t/topic/btaE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录