如何以编程方式设置静态控件背景颜色

2024-01-06

我想更改函数内的标签背景颜色,我尝试了这段代码,但调用后没有任何变化changecolor功能

HWND hWndLabel;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:
        hWndLabel = CreateWindowEx(WS_EX_TRANSPARENT,
            L"STATIC", L"", WS_CHILD | WS_VISIBLE | SS_LEFT | WS_SYSMENU,
            75, 75, 70, 70, hWnd, (HMENU)labelId, hInst, NULL);
        break;

    case WM_DESTROY:
        PostQuitMessage(0);
        break;

    case WM_COMMAND:  // all events are handled here
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
    return 0;
}

DWORD WINAPI changecolor(){
    HDC hdc = GetDC(hWndLabel); // get context
    SetBkColor(hdc, RGB(0, 0, 230)); // Code Copied from the above answer by cpx.
    return 0;
}

我读到静态控件向其父级发送WM_CTLCOLORSTATIC在他们画自己之前的消息。代码是在CALLBACK函数,但是这段代码在哪里被调用(改变颜色)?我该如何调用SetTextColor在函数内

代码示例:

case WM_CTLCOLORSTATIC:
  if (the_button_was_clicked) {
    HDC hdc = reinterpret_cast<HDC>(wParam);
    SetTextColor(hdc, COLORREF(0xFF, 0x00, 0x00));
  }
  return ::GetSysColorBrush(COLOR_WINDOW);  // example color, adjust for your circumstance

尝试更多类似这样的事情:

HWND hWndLabel;
HBRUSH hBrushLabel;
COLORREF clrLabelText;
COLORREF clrLabelBkGnd;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:
        hWndLabel = CreateWindowEx(0, L"STATIC", L"", WS_CHILD | WS_VISIBLE | SS_LEFT,
            75, 75, 70, 70, hWnd, (HMENU)labelId, hInst, NULL);
        hBrushLabel = NULL;
        clrLabelText = GetSysColor(COLOR_WINDOWTEXT);
        clrLabelBkGnd = GetSysColor(COLOR_WINDOW);
        break;

    case WM_DESTROY:
        if (hBrushLabel) DeleteObject(hBrushLabel);
        PostQuitMessage(0);
        break;

    case WM_CTLCOLORSTATIC: {
        HDC hdc = reinterpret_cast<HDC>(wParam);
        SetTextColor(hdc, clrLabelText);
        SetBkColor(hdc, clrLabelBkGnd);
        if (!hBrushLabel) hBrushLabel = CreateSolidBrush(clrLabelBkGnd);
        return reinterpret_cast<LRESULT>(hBrushLabel);
    }

    case WM_COMMAND:  // all events are handled here
        break;

    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
        break;
    }
    return 0;
}

DWORD WINAPI changecolor()
{
    if (hBrushLabel) {
        DeleteObject(hBrushLabel);
        hBrushLabel = NULL;
    }
    clrLabelText = RGB(0xFF, 0x00, 0x00);
    clrLabelBkGnd = RGB(0, 0, 230);
    InvalidateRect(hWndLabel, NULL, TRUE);
    return 0;
}

中也有一个类似的例子WM_CTLCOLORSTATIC文档 https://msdn.microsoft.com/en-us/library/windows/desktop/bb787524.aspx.

下面的 C++ 示例演示如何设置静态控件的文本前景色和背景色以响应 WM_CTLCOLORSTATIC 消息。 hbrBkgnd 变量是一个静态 HBRUSH 变量,初始化为 NULL,并在调用 WM_CTLCOLORSTATIC 之间存储背景画笔。当不再需要画笔时,通常是在关联的对话框被销毁时,必须通过调用 DeleteObject 函数来销毁画笔。

case WM_CTLCOLORSTATIC:
    {
    HDC hdcStatic = (HDC) wParam;
    SetTextColor(hdcStatic, RGB(255,255,255));
    SetBkColor(hdcStatic, RGB(0,0,0));

    if (hbrBkgnd == NULL)
    {
        hbrBkgnd = CreateSolidBrush(RGB(0,0,0));
    }
    return (INT_PTR)hbrBkgnd;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式设置静态控件背景颜色 的相关文章

  • DLL 中的 XP 风格组合框

    我需要使用 C 和 WIN32 API 无 MFC 在 DLL 中创建 XP 风格的组合框 我设法在 DLL 中创建控件 不是以 XP 风格 我设法在带有清单的 exe 中创建 XP 样式组合框 但它在 DLL 中不起作用 为了让您的 DL
  • 使用 Windows 电源管理 API 调暗显示器

    我正在尝试做一些看起来很简单的事情 我只想让我的程序能够在某些条件下调整显示器亮度 于是 我向窗户望去电源管理API http msdn microsoft com en us library aa373163 28v vs 85 29 a
  • 使用createremotethread注入dll

    createremotethread如何在进程内执行dll 它使用的参数之一是 loadlibraryA 所以我得到了它在进程中执行 loadlibrary 函数的部分 然后它应该将上下文切换到内核模式 dll 是否由具有 loadlibr
  • 在 C# 中查看非托管 dll 上的导出表

    我目前正在尝试创建一个 C 应用程序 该应用程序将允许我查看非托管 DLL 中的导出表 我的问题是 一旦我获得了所需的所有指针 我不知道如何循环访问 API 为我提供的信息 这是我现在所拥有的 using System using Syst
  • 在 win32 API 应用程序中实现全球化/多语言功能

    我用 Visual C 开发了一个窗口应用程序 Win32 API 我必须在此应用程序中添加多语言功能 任何人都可以指导我如何完成这项任务 Windows 上多语言应用程序的基础是 资源 的使用 资源是附加在可执行文件末尾的块 它仅包含数据
  • 编译过程

    谁能解释一下编译是如何工作的 我似乎无法弄清楚编译是如何工作的 更具体地说 这是一个例子 我正在尝试在 MSVC 6 中编写一些代码来加载 Lua 状态 我已经 设置库的附加目录并将文件包含到正确的目录中 使用 extern C 因为 Lu
  • C# 4.0 动态对象和 WinAPI 接口,如 IShellItem(无需在 C# 源代码中定义它们)

    是否可以 使用 C 4 0 中的新动态关键字 使用接口 如 IShellItem 或其他 WinAPI 接口 而无需在 C 源代码中定义它们 或者至少不定义接口成员 我正在尝试类似的事情 const string IShellItemGui
  • 新显卡上的 nvoglv32.dll 中的绘制调用崩溃

    几天前 由于一些硬件更改 我设置了计算机并安装了新的 Windows 8 副本 其中 我将显卡从 Radeon HD 7870 更改为 Nvidia GTX 660 再次设置 Visual Studio 11 后 我从 Github 下载了
  • 如何使用 win32com.client api 访问 MS Word 的脚注

    我正在尝试使用 win32com client api 访问 MS Word 文件的脚注 我已经用谷歌搜索过 但没能找到合适的方法 我使用 python docx 来实现上述目的 但我发现当前版本的 python docx 无法访问 MS
  • 如何更新 C++ dll 而无需将 exe 与 lib 文件重新链接?

    首先 我指的是 Windows 环境和 VC 编译器 我想要做的是重建 Vc dll 并保持与已链接到 lib 的 exe 的兼容性 而无需重建 exe 或使用 LoadLibrary 动态加载 dll 换句话说 有没有办法向 dll 添加
  • std::deque 的内存开销到底是怎么回事?

    我正在研究一种使用外部排序算法std queue并且必须仔细限制其内存使用 我注意到在合并阶段 使用了几个std queues 固定长度 我的内存使用量增加到我预期的大约 2 5 倍 自从std queue默认情况下使用std deque作
  • 移动/调整窗口大小时闪烁

    我开发了一个显示 jpeg 图像的应用程序 它可以显示 4 个图像 屏幕的每个象限各一个 为此 它使用了 4 个窗口 窗口没有边框 框架 也没有标题栏 当加载新图像时 窗口大小会根据新图像进行调整 然后显示该图像 尤其是当窗户做得较大时 经
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • 更换 I 过滤器

    我目前正在使用 IFilters 从各种文件 word excel tiff pdf 等 中提取文本 据我所知 IFilter 已在 Windows 8 中停止使用 是否有人对如何在不安装本机应用程序的情况下提取文本有任何建议 如果有什么用
  • 如何在 Visual C++ 中读取版本资源

    我在 C 项目的资源中有一个版本资源 其中包含版本号 版权和构建详细信息 有没有一种简单的方法可以在运行时访问它来填充我的帮助 关于对话框 因为我目前正在维护此信息的单独常量值 理想情况下 该解决方案应适用于 Windows CE mobi
  • Windows 目录永远不会包含临时文件的非 ASCII 字符?

    在 Windows 上使用 MinGW 7 3 0 由于 Windows 限制 Hunspell 无法从包含非 ASCII 字符的位置加载字典文件 我已经尝试了所有方法 1 现在我将文件复制到没有 ASCII 字符的路径 然后再将其交给 H
  • 非实例化模板成员的编译时错误而不是链接时错误

    我有模板类ItemContainer这实际上是整个容器系列的外观 具有不同的功能 如排序 索引 分组等 实施细节隐藏在cpp 使用 pimpl 习惯用法和显式实例化的文件 模板仅使用定义容器实际行为的众所周知的有限实现类集进行实例化 主模板
  • 从子线程绘制到窗口

    我的应用程序从工作线程绘制图形已有 10 多年了 而且我从未遇到过任何问题 工作线程吸引到我的HWND 由主线程创建 如下所示 hdc GetDC hwnd SetDIBitsToDevice or StretchDIBits Releas
  • 我的 win32 程序应该在哪里保存其文件?

    我们的 win32 应用程序 用 C 编写 已经存在了 10 多年 并且尚未更新以遵循文件保存位置方面的 良好实践 应用程序默认安装在 C AppName 文件夹中 并将应用程序生成的文件 配置文件 下载的文件和保存的用户文档保存在该文件夹
  • 可以在滚动条上绘画吗?

    是否可以在 TMemo TListbox 等标准控件的滚动条上进行绘制 我所需要的只是在滚动条上绘制一些基本形状 并且我试图避免从 stratch 实现整个滚动内容 有什么指点吗 蒂亚 确实有可能 你可能想看一下WM NCPAINT消息 这

随机推荐

  • 这个只有一个操作数的 x86-64 addq 指令是什么意思? (摘自CSAPP书籍第三版)

    在下面的说明中 addq 是如何工作的 它只有一个操作数 书上声称它递增 rdx 但 rdx 不在这条指令中 我感到很困惑 这是来自 计算机系统 程序员的视角 一书 第三版 正如 Jester 在评论中指出的那样 这确实是一个错误 我实际上
  • 如何在带引号的表达式中转义扩展路径名扩展模式?

    除了基本的 and 模式 Bash shell 提供了扩展的模式匹配运算符 例如 pattern list 匹配除给定模式之一之外的所有模式 这extglob需要设置 shell 选项才能使用它们 一个例子 mkdir test cd te
  • 根据项目特定情况设置函数默认值 R

    通常 我使用相同的功能设置 我想知道除了在路径中拥有一个本质上是函数包装器的新对象之外 是否还有一种方法来设置默认参数 例如 paste 有它的sep参数设置为空格 我写累了 sep 一遍又一遍 那么有没有办法 暂时 用我选择的默认值替换该
  • 如何从 SVN 的修订版本中删除 1 个文件?

    我的一位同事在 SVN 中签入了一些文件 其中一个文件中有密码 密码已从文件中删除 并签入了新版本 但如果我们查看修订历史记录并转到该修订版本 密码显然仍在存储库中 我们使用 TortoiseSVN 作为客户端 那么如何安全地从 SVN 存
  • Apple iTunes Connect Analytics:归因提供商和营销活动 ID 值传递给应用程序委托

    新的 iTunes Connect 现在具有分析功能 您可以在 URL 中指定提供商 pid ID 和活动 ID cid 例如 您可以将这些值传递到应用程序中以用于各种目的吗 即使经过检查 我也找不到任何表明这一点的内容 didFinish
  • CamelCasePropertyNamesContractResolver 在 MapHttpRoute 之后不工作

    我正在尝试在我的 Net API 项目中实现 JSON 驼峰式大小写 在我的启动类中 我添加了以下几行 config Formatters JsonFormatter SerializerSettings ContractResolver
  • ASP.NET MVC 中的模型绑定嵌套集合

    我正在使用史蒂夫 桑德森的BeginCollectionItem 帮助器 http blog stevensanderson com 2010 01 28 editing a variable length list aspnet mvc
  • Rails 3 - 如何从 link_to 创建新记录

    我正在尝试创建一个 标签 功能 允许用户 标记 他们感兴趣的项目 这是我的模型 class tag belongs to user belongs to item end 对应的DB表有必要的 user id and item id字段 在
  • 通过WebService发送电子邮件

    我在Windows上开发了应用程序 现在我需要通过 Web 服务发送一封电子邮件 包括附件功能 我怎样才能做到这一点 我还需要在 n 天之前通知电子邮件 n 天是由用户控制的功能 如果有任何意见请告诉我 Thanks public bool
  • 如何使用另一个位图作为掩码在位图上绘图?

    我想要draw在位图上使用另一个位图作为掩码 蒙版是一个黑色位图 其中有一个透明对象 我希望这个透明部分填充任意颜色并添加到我的原始图像中 如何才能做到这一点 蓝色 我必须按照 Christian 的描述更换面具 然后 可以很容易地产生想要
  • GLSL:无法获取制服位置

    我的问题是 我无法获得某些制服的位置 而其他制服的位置我却没有问题 例如 我的 VS 制服称为 MVP 和 模特 并且 MVP 位置没有问题 但我没有对称使用的 模特 位置 以同样的方式 我无法从 FS 中的 Light 结构中获取字段的位
  • DOM 突变事件库?

    当内容添加到网页时 我需要触发一个操作 更新可以具有不同的性质 例如 AJAX 延迟脚本 用户操作 并且不受我的控制 我想使用 DOM 突变事件 但它们并非在所有浏览器中都可用 是否有跨浏览器库提供后备计划 另外 我很想知道 Interne
  • 如何动态加载AttachProvider(attach.dll)

    我在用着com sun tools attach来自jdk的tools jar并且它需要一个指定的java library path环境指向attach dll在启动时正确实例化提供程序 例如WindowsAttachProvider 由于
  • 在 Android 上实现多级选项菜单的最佳实践?

    我目前正在将 iPhone 应用程序移植到 Android 上 iPhone 应用程序在屏幕底部有一个自定义的全局导航菜单 当将其移植到 Android 时 建议将此自定义菜单替换为通用选项菜单 通过设备上的选项键调用 以提供该菜单更原生的
  • Google Drive API 权限不足:请求的身份验证范围不足

    我成功完成了此处的快速入门演示 https developers google com drive api v3 quickstart python https developers google com drive api v3 quic
  • Newtonsoft.json 序列化和反序列化基本/继承,其中类来自共享项目

    所以我有两个像下面这样的课程 它们都位于同一名称空间和同一共享项目中 public class Person public string Name get set public class EmployedPerson Person pub
  • 为什么 macvim 不总是使用 ruby​​ 1.9.3?

    我已经安装了yadr 点文件 https github com skwp dotfiles 一组vim ruby等插件 我的文件中有以下 Ruby 代码行foo rb foo bar 注意我使用 ruby 1 9 3 语法进行符号赋值 定义
  • 无法将任何第三方模块与 AWS Lambdas 一起使用

    我正在开发一个使用模块 异步 请求等 的 lambda Unable to import module index Error at Function Module resolveFilename module js 338 15 at F
  • 在 PHP 中使用空格连接字符串的最佳方法

    我需要连接不确定数量的字符串 并且我希望在两个相邻字符串之间有一个空格 像这样a b c d e f 另外 我不需要任何前导或尾随空格 在 PHP 中执行此操作的最佳方法是什么 你的意思是 str implode array a b c d
  • 如何以编程方式设置静态控件背景颜色

    我想更改函数内的标签背景颜色 我尝试了这段代码 但调用后没有任何变化changecolor功能 HWND hWndLabel LRESULT CALLBACK WndProc HWND hWnd UINT message WPARAM wP