首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >更改使用CreateWindow在vc++中创建的静态控件文本的背景色

更改使用CreateWindow在vc++中创建的静态控件文本的背景色
EN

Stack Overflow用户
提问于 2013-11-20 03:19:29
回答 2查看 1.3K关注 0票数 1

我正在VC++中处理一个开源项目,并希望更改静态控件的背景色。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hwndRenderMessage = CreateWindow(TEXT("STATIC"), Str("MainWindow.BeginMessage"),
    WS_CHILDWINDOW|WS_VISIBLE|WS_CLIPSIBLINGS|SS_CENTER,
    0, 0, 0, 0, hwndRenderFrame, NULL, hinstMain, NULL);

SendMessage(hwndRenderMessage, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);

此控件的父控件为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 hwndRenderFrame = CreateWindow(OBS_RENDERFRAME_CLASS, NULL,
    WS_CHILDWINDOW | WS_VISIBLE | WS_CLIPCHILDREN,
    0, 0, 0, 0,
    hwndMain, NULL, hinstMain, NULL);
if(!hwndRenderFrame)
    CrashError(TEXT("Could not create render frame"));

那么如何改变静态控件的背景色。

我搜索它并得到相同的答案使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case WM_CTLCOLORSTATIC:
{
HDC hdcStatic = (HDC) wParam;
SetTextColor(hdcStatic, RGB(0,0,0));
SetBkColor(hdcStatic, RGB(230,230,230));
return (INT_PTR)CreateSolidBrush(RGB(230,230,230));
}

但是文件中没有开关箱,那么该怎么办呢?事实上,我在c#上工作,但这是我第一次在vc++上工作

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-20 05:47:07

我从sourceforge下载了OBS源代码。

窗口Proc是位于WindowStuff.cpp中的OBS::RenderFrameProc。

在proc的底部(但在“返回”之前),添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
else if(message == WM_CTLCOLORSTATIC ) {
    // HERE YOUR CODE
}

编辑:更改按钮背景

首先,一个建议是:“不要那样做”。按钮是windows中非常重要和常见的组件,它们的外观和感觉在所有应用程序中都应该是一致的。用户可以从整体上对桌面进行定制,这包括“可访问性”问题和行为。想要用自己的“特殊方式”去做的应用程序只会带来问题。

第二,尝试下面的代码来更改“设置.”按钮背景到难看的绿色:在交换机(WParam)中的OBS::OBSProc中的WM_NOTIFY消息处理中添加一个大小写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
case ID_SETTINGS:
   if(nmh.code == NM_CUSTOMDRAW)
   {
      LPNMCUSTOMDRAW  lpcd = (LPNMCUSTOMDRAW)lParam;
      if (lpcd->dwDrawStage == CDDS_PREPAINT )
      {
         SetDCBrushColor(lpcd->hdc, RGB(0, 255, 0));
         SelectObject(lpcd->hdc, GetStockObject(DC_BRUSH));
         LONG lBorders = 0;
         LONG lElipse = 5;
         RoundRect(lpcd->hdc, lpcd->rc.left + lBorders, lpcd- rc.top + lBorders,
                   lpcd->rc.right - lBorders, lpcd->rc.bottom - lBorders, lElipse, lElipse);
         return CDRF_NOTIFYPOSTPAINT;
       }
    }
    break;             

另一种选择,具有更标准的边界:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
         SetDCBrushColor(lpcd->hdc, RGB(0, 255, 0));
         SetDCPenColor(lpcd->hdc, RGB(0, 255, 0));
         SelectObject(lpcd->hdc, GetStockObject(DC_BRUSH));
         SelectObject(lpcd->hdc, GetStockObject(DC_PEN));
         LONG lBorders = 3;

要完成,您可能需要检查lpcd的uItemState成员,以获得CDIS_HOT标志,并相应地更改颜色。

票数 1
EN

Stack Overflow用户

发布于 2013-11-20 04:01:14

你需要把这段代码放到窗口程序中。窗口过程如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LRESULT CALLBACK RenderMessageWndProc(HWND hWnd, UINT message, WPARAM wParam,
    LPARAM lParam)
{
    switch (message)
    {
    case WM_CTLCOLORSTATIC:
        // your code goes here
        return ....
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

您需要对您的窗口进行子类化,以便它使用这个WndProc。如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SetWindowLongPtr(hwndRenderMessage, GWLP_WNDPROC, (LONG_PTR)RenderMessageWndProc);

如果您不知道窗口过程是什么或子类是什么,那么您确实需要退一步学习一些基础知识。例如,Petzold的经典书籍编程Windows仍然是一个极好的起点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20094483

复制
相关文章
include用法PHP,php之include的使用[通俗易懂]
在 PHP 中,您能够在服务器执行 PHP 文件之前把该文件插入另一个 PHP 文件中。
全栈程序员站长
2022/07/29
2.6K0
include用法PHP,php之include的使用[通俗易懂]
PHP feof() 函数读文件的使用
如果服务器没有关闭由 fsockopen() 所打开的连接,feof() 会一直等待直到超时而返回TRUE。默认的超时限制是 60 秒,可以使用 stream_set_timeout() 来改变这个值。
Java架构师必看
2021/03/22
9250
PHP使用ArrayAccess实现配置文件的加载
提供像访问数组一样访问对象的能力的接口。 新建configs目录 新建contorller.php配置文件
友儿
2022/09/11
6000
php文件加载技术+php函数一部分
核心就是在当前1.php文件中通过一个函数把另一个文件2.php里面的代码在当前有那一个函数的文件1.php里面中执行。慢慢理解哈。 问题;那一个函数那么的神奇,到底是什么牛逼函数啊? 听我简短到来! 记住,写两个页面第一个1.php 第二个2.php
贵哥的编程之路
2020/10/28
9540
php文件加载技术+php函数一部分
PHP中的include和require
include() 函数可获得指定文件中的所有文本,并把文本拷贝到使用 include 函数的文件中。include语法:
用户7657330
2020/08/14
7600
php://input allow_url_include,DVWA设置PHP函数allow_url_include:已禁用
Click on the ‘Create / Reset Database’ button below to create or reset your database.
全栈程序员站长
2022/09/13
1.1K0
延迟加载图片的jQuery插件-Lazy Load Plugin for JQuery
Lazy Load是一个用Javascript写得jQuery插件。它可以使一个长网页中,不在当前视图中的图片延迟加载,以提高页面的载入速度。
EltonZheng
2021/01/26
3.7K0
php://input allow_url_include,php allow_url_include的应用和解释_PHP教程
因为这个原因,许多安全研究人员建议在php.ini配置中禁用指向allow_url_fopen。不幸的是,许多推荐这种方法的人,并没有意识到,这样会破坏很多的应用并且并不能保证100%的解决remote URL includes以及他带来的不安全性。
全栈程序员站长
2022/09/13
7130
php ffi是什么?,什么是PHP外部函数接口?
许多开发人员在PHP中使用外部函数接口。在这里,我们介绍了它是什么以及如何使用它。
高久峰
2023/06/20
4690
延迟加载图片的 jQuery 插件:Lazy Load
网站的速度非常重要,现在有很多网站优化的工具,如 Google 的 Page Speed,Yahoo 的 YSlow,对于网页图片,Yahoo 还提供 Smush.it 这个工具对图片进行批量压缩,但是对于图片非常多的网站,载入网页还是需要比较长的时间,这个时候我们可以使用 Lazy Load 这个 jQuery 插件来延迟加载图片。
Denis
2023/04/15
1.9K0
php 加载页面时间函数
/** * 加载时间 * @return bool */ function timer_start() { global $timestart; $mtime = explode( ' ', microtime() ); $timestart = $mtime[1] + $mtime[0]; return true; } timer_start(); function timer_stop( $display = 0, $precision = 3 ) { global $timestart, $timee
九霄道长
2021/03/02
3.6K0
内部函数与外部函数
函数是c语言程序中的最小单位,往往把一个函数或多个函数保存为一个文件,这个文件称为源文件。定义一个函数,这个函数就要被另外的函数所调用。但当一个源程序由多个源文件组成时,可以指定函数不能被其他文件调用,这样C语出又把函数分为两类:一个是内部函数,另一个是外部函数。
pigeon
2022/04/11
9820
PHP版的jQuery
个人认为,对于Web前端程序员和跟HTML和CSS打交道的人来说,jQuery是有史以来最伟大的发明。jQuery的出现使Web程序员的开发效率突飞猛进,不亚于工业革命给人类生产力带来的提升。 但问题在在于,只有前端程序员可以利用jQuery的强力,他们可以用它分析HTML,根据CCS类,HTML属性,CSS规则等各种选择器来查 询、获取、操作HTML里的任何一个元素。而作为后端(服务端)程序员来说,他们同样需要分析HTML内容,从HTML中提取符合要求的HTML片段、获 取某个符合条件的属性值等。 遇到这
wangxl
2018/03/08
1.3K0
PHP 文件相关函数
本文介绍了 PHP 文件的相关函数。本文只是部分列举,详情请查看官方文档。 官方文档:http://php.net/manual/zh/book.dir.php 官方文档:http://php.net/manual/zh/book.filesystem.php 执行命令所在路径 getcwd() 文件所在路径 __FILE__ 文件所在目录路径 新的 __DIR__ 旧的 dirname(__FILE__) 目录相关函数 resource opendir ( string $path [, resource
康怀帅
2018/02/28
1.4K0
7.6 内部函数和外部函数
2、对变量而言,声明与定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要建立存储空间的,另一种是不需要建立存储空间的。前者称为定义性声明,简称定义;后者称为引用性声明。
小林C语言
2019/07/12
1.1K0
【说站】PHP内部函数是什么
(2)在函数内部可以调用内部函数, 但是必须在内部函数定义之后调用,因为PHP解析器只会加载外部函数并不会执行外部函数,所以不知道外部函数中还有内部函数。
很酷的站长
2022/11/23
6020
6.8 内部函数和外部函数
解释:只能被本文件中其他函数所调用,在定义内部函数时,在函数名和函数类型的前面加static,所以内部函数又称静态函数
小林C语言
2019/08/19
7510
点击加载更多

相似问题

为什么Hibernate要两次选择相同的列?

13

MySQL两次选择相同的列

23

对列选择相同数目的随机行

53

为什么Hibernate选择相同的列4次?对映射有帮助吗?

10

jpa原生查询,选择相同的表两次问题(hibernate实现)

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文