在静态控件中,为啥文本周围有一个紧密的矩形?

Posted

技术标签:

【中文标题】在静态控件中,为啥文本周围有一个紧密的矩形?【英文标题】:In a static control,why is there a tight rectangle surrounding the text?在静态控件中,为什么文本周围有一个紧密的矩形? 【发布时间】:2020-04-26 08:24:15 【问题描述】:

我使用静态控件在窗口中书写。通常,我保持背景颜色为白色,并在 WM_CTLCOLORSTATIC 消息中设置静态控件的颜色就足够了(以黑色书写,背景为白色)。 现在,为了提供更现代的视觉效果,我尝试在窗口和静态控件上使用 DKGRAY 颜色,并用白色书写:

case WM_CTLCOLORSTATIC:
    HDC hdcStatic = (HDC)wParam;
    SetTextColor(hdcStatic, RGB(255, 255, 255));
    SetBkColor(hdcStatic, DKGRAY_BRUSH);
    return (INT_PTR)GetStockObject(DKGRAY_BRUSH);

它几乎可以正常工作: - 文字颜色为白色:好 - 静态控件的背景是深灰色:好 - 但是文本写在一个紧凑的黑色矩形内:围绕文本的这个紧凑的矩形是什么????它从何而来 ?我怎样才能改变它的颜色?

有关信息,这里是在主窗口的 WM_CREATE 消息中创建静态控件的示例:

    hsStatic1 = CreateWindowEx(0, L"STATIC", L"Fichier :", WS_CHILD | WS_VISIBLE, 15, 5, 60, 20, hWnd, (HMENU)ID_STATIC1, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), nullptr);

谢谢。

【问题讨论】:

您可以尝试添加:SetBkMode(hdcStatic, TRANSPARENT); 【参考方案1】:

DKGRAY_BRUSHGetStockObject 的魔法值,它不是您可以传递给SetBkColor() 的RGB 颜色。

您需要识别 DKGRAY_BRUSH 的 RGB 值并在调用 SetBkColor() 时使用它,或者选择要使用的特定 RGB 值并使用 CreateSolidBrush 创建您自己的画笔。

【讨论】:

谢谢! DKGRAY_BRUSH 似乎是 RGB(64, 64, 64)。它适用于: SetBkColor(hdcStatic, RGB(64, 64, 64)); hbrBkgnd = CreateSolidBrush(RGB(64, 64, 64));返回 (INT_PTR)hbrBkgnd; @Finelizzyx 确保只创建一次实心画笔,而不是每次收到WM_CTLCOLORSTATIC 消息时,否则会导致 GDI 资源泄漏。 @fin:你为什么不用GetStockObject来刷机?这样做意味着您不必担心清理或泄漏。您可以致电GetObject 获取LOGBRUSH,该COLORREF 可以方便地与SetBkColor 一起使用。

以上是关于在静态控件中,为啥文本周围有一个紧密的矩形?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止静态控件中的文本被剪切?

为啥我的文本在 wxPython 中没有正确对齐?

将静态文本框绑定到复选框

MFC静态文本控件怎么设置字体

MFC控件编程之 按钮编辑框.静态文本的使用

如何更改静态文本控件(winapi)的字体?