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

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(使用前将#替换为@)

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

  • 当用户拖动列表视图项目时检测何时需要滚动

    介绍 我正在实现列表视图项目的重新排列 而不使用 OLE 拖放 PROBLEM 我已经成功解决了大部分任务 除了当用户想要将项目放置在当前不可见的位置时向上 向下滚动之外 问题 我可以使用以下消息向上 向下滚动列表视图 SendMessag
  • OpenGL 中连续暂停

    void keyPress unsigned char key int x int y int i switch key case f i 3 while i x pos 3 sleep 100 glutPostRedisplay 上面是在
  • 有没有办法将 fopen_s() 与 GCC 一起使用,或者至少创建一个 #define ?

    MSVC 编译器说fopen 已弃用 建议使用fopen s 有什么办法可以使用吗fopen s 并且仍然便携 任何想法 define 微软的 s函数是不可移植的 我通常使用等效的 C89 C99 函数并禁用弃用警告 define CRT
  • Windows 8 SDK 中的 DirectX

    Summary 是否应该从针对 Windows 8 的应用程序中删除 directX 包含文件 Details 我是 Windows 开发新手 我正在尝试使用 Visual Studio 2012 如果可能 在 Windows 8 上编译
  • 链接到大地址感知 DLL

    假设我有一个使用 LARGEADDRESSAWARE 链接器标志集构建的 DLL 现在我有一个动态链接到该 DLL 的应用程序 这是否会使我的应用程序具有大型地址意识 如果不是 那么为任何 DLL 设置此标志是否有意义 讨论here htt
  • 向 Windows 服务发送 Windows 消息

    有没有任何工具可以将 WM ENDSESSION 等 Windows 消息发送 模仿 到 Windows 服务 OR 如何使用 C 向进程发送 Windows 消息 我只懂C 编辑 目的 基本上我必须调试 Windows 服务来修复仅在系统
  • 为什么 SetCursorPos 将光标位置重置到显示屏的左侧?

    SetCursorPos https learn microsoft com en us windows win32 api winuser nf winuser setcursorpos将光标移动到指定的屏幕坐标 然而 它似乎有一个错误
  • 指向成员函数的指针的大小疯狂变化

    有一个非常微妙的问题 得到一个用 MS VS 2013 c 编译器编译的类 对于 32 位平台 大小为 4 个字节 函数指针的大小为 4 个字节 但是 当这个类使用相同的编译器编译但包含到不同的项目中以生成库时 也针对 32 位平台 则该类
  • 基于 MSVC 10 范围的 for 循环

    目前 在我们正在开发的一个大型 C 项目中 我们有一堆新样式的 for 循环 如下所示 for auto value values 到目前为止 我们一直只使用 gcc 4 6 进行编译 最近 一些代码库正在移植到 Windows 一些开发人
  • 使用API​​隐藏程序标题栏

    它可以使用 c 和 windows api 删除窗口控制台标题栏 如果是的话如何 请 这个简单的应用程序隐藏并显示其所在控制台的标题栏 它会立即将控制台标题更改为 guid 以查找窗口句柄 然后 它使用 ToggleTitleBar 使用找
  • unsigned char* 缓冲区到 System::Drawing::Bitmap

    我正在尝试创建一个工具 资产转换器 使用以下命令将字体光栅化为 XNA 游戏的纹理页面自由类型2 http www freetype org freetype2 index html engine 下面 第一张图片是FreeType2的直接
  • 从发布的文件中删除 PDB 引用

    在使用任何 IDE 调试和创建文件后 我总是会查看最终的二进制可执行文件或 DLL 现在我正在尝试 Visual C 2010 寻找最佳版本 没有垃圾或不必要的引用 因此 我创建了一个包含两个项目的新解决方案 一个可执行文件及其 DLL V
  • pip install ecos 错误,显示“需要 Microsoft Visual C++ 14.0”。 [复制]

    这个问题在这里已经有答案了 我正在尝试使用 pip install 在我的 anaconda 中安装 fancyimpute 但错误显示由于 需要 Microsoft Visual C 14 0 而无法安装 ecos 提供的链接已过期 有谁
  • 如何取消同步 WinHttp 请求?

    我的服务有一个线程可能正在执行WinHttpSendRequest当有人试图停止我的服务时 The WinHttpCloseHandle 文档 http msdn microsoft com en us library windows de
  • 使用 CreateRestrictedToken(LUA_TOKEN) 从提升的进程创建低/中进程

    我正在尝试从提升的进程创建中或低完整性进程 我知道还有其他类似的问题 但它们主要关注使用资源管理器或任务计划程序等解决方法 我想坚持使用CreateRestrictedToken CreateProcessAsUser 我认为一定可以以某种
  • 使用 cryptoapi CryptImportKey 导入公钥时出错

    我想将公钥 blob 导入到 CSP 但发生了错误 BYTE pbData 0xEB 0x2A 0x38 0x56 0x86 0x61 0x88 0x7F 0xA1 0x80 0xBD 0xDB 0x5C 0xAB 0xD5 0xF2 0x
  • 如何带参数调用外部程序?

    我想在我的代码中调用一个 Windows 程序 并使用代码本身确定的参数 我不想调用外部函数或方法 而是调用 WinXP 环境中的实际 exe 或批处理 脚本文件 C 或 C 将是首选语言 但如果使用任何其他语言更容易完成此操作 请告诉我
  • 具有自定义镶边的 WPF 窗口在右侧和底部有不需要的轮廓

    我使用 Microsoft Windows Shell dll 创建了带有自定义镶边的 WPF 窗口 这是代码
  • 创建具有特定权限的线程C++

    我有一个多线程应用程序 我想创建一个具有不同用户权限的线程 例如 多域管理员权限 但我找不到任何 Win32 APICreateThread要做到这一点 如何创建具有特定用户权限的线程 thanks 调用 CreateThread CREA
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C

随机推荐

  • 这个只有一个操作数的 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