C++怎么获取系统主题颜色?

我想取到win8边框的颜色,C++怎么做?开发环境VS2012
我要获取的就是这个颜色。(vista以上系统)

我有一个编程书里有说这一点,可我搞不懂,我把文件传给你吧
typedef struct { UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HINSTANCE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm;} WNDCLASSEX, *PWNDCLASSEX; 成员介绍 cbSize 值为sizeof(WNDCLASSEX),在调用GetClassInfoEx前必须要先设置它值。
style 窗口类的样式,它的值可以是窗口样式值的任意组合。
可以有以下的值
lpfnWndProc 指向窗口处理函数(回调函数)。处理窗口事件,像单击鼠标会怎样,右击鼠标会怎样,都是由此函数控制的。
cbClsExtra 为窗口类的额外信息做记录,系统初始化为0。
cbWndExtra 记录窗口实例的额外信息,系统初始为0.如果程序使用WNDCLASSEX注册一个从资源文件里创建的对话框,则此参数必须设置为DLGWINDOWEXTRA
hIcon 窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。
hCursor 窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠标样式。
hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值
COLOR_ACTIVEBORDER
COLOR_ACTIVECAPTION
COLOR_APPWORKSPACE
COLOR_BACKGROUND
COLOR_BTNFACE
COLOR_BTNSHADOW
COLOR_BTNTEXT
COLOR_CAPTIONTEXT
COLOR_GRAYTEXT
COLOR_HIGHLIGHT
COLOR_HIGHLIGHTTEXT
COLOR_INACTIVEBORDER
COLOR_INACTIVECAPTION
COLOR_MENU
COLOR_MENUTEXT
COLOR_SCROLLBAR
COLOR_WINDOW
COLOR_WINDOWFRAME
COLOR_WINDOWTEXT
lpszMenuName 指向一个以NULL结尾的字符床,同目录资源的名字一样。如果使用整型id表示菜单,可以用MAKEINTRESOURCE定义一个宏。如果它的值为NULL,那么该类创建的窗口将都没有默认的菜单。
lpszClassName 窗口类的名字,字符串类型。
hIconSm 小图标的句柄,在任务栏显示的图标,可以和上面的那个一样。

定义一个WNDCLASSEX类型变量后,在给变量成员初始化后,我们就可以用
RegisterWindowEx(&wndclassex)来注册这个窗口类了。

这个注册过程,就和我们平常创建一个项目一样,都要先注册才能创建 。

创建窗口
这一步很简单,就是利用CreateWindowEx()函数来创建就是了。
CreateWindowEx函数的原型如下:
HWND CreateWindowEx(

DWORD dwExStyle, LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam); 参数说明 dwExStyle:指定窗口的扩展风格。该参数可以是下列值:
WS_EX_ACCEPTFILES:指定以该风格创建的窗口接受一个拖拽文件。
   WS_EX_APPWINDOW:当窗口可见时,将一个顶层窗口放置到任务条上。
   WS_EX_CLIENTEDGE:指定窗口有一个带阴影的边界。
   WS_EX_CONTEXTHELP:在窗口的标题条包含一个问号标志。

WS_EX_CONTROLPARENT:允许用户使用Tab键在窗口的子窗口间搜索。
   WS_EX_DLGMODALFRAME:创建一个带双边的窗口;该窗口可以在dwStyle中指定WS_CAPTION风格来创建一个标题栏。
   WS_EX_LEFT:窗口具有左对齐属性,这是缺省设置的。
   WS_EX_LEFTSCROLLBAR:如果外壳语言是如Hebrew,Arabic,或其他支持reading order alignment的语言,则标题条(如果存在)则在客户区的左部分。若是其他语言,在该风格被忽略并且不作为错误处理。
   WS_EX_LTRREADING:窗口文本以LEFT到RIGHT(自左向右)属性的顺序显示。这是缺省设置的。
   WS_EX_MDICHILD:创建一个MD子窗口。
  WS_EX_NOPATARENTNOTIFY:指明以这个风格创建的窗口在被创建和销毁时不向父窗口发送WM_PARENTNOTFY消息。
WS_EX_OVERLAPPED:WS_EX_CLIENTEDGEWS_EX_WINDOWEDGE的组合。
WS_EX_PALETTEWINDOW:WS_EX_WINDOWEDGE, WS_EX_TOOLWINDOW和WS_WX_TOPMOST风格的组合WS_EX_RIGHT:窗口具有普通的右对齐属性,这依赖于窗口类。

WS_EX_RIGHTSCROLLBAR:垂直滚动条在窗口的右边界。这是缺省设置的。
   WS_EX_RTLREADING:如果外壳语言是如Hebrew,Arabic,或其他支持读顺序对齐(reading order alignment)的语言,则窗口文本是一自左向右)RIGHT到LEFT顺序的读出顺序。

WS_EX_STATICEDGE:为不接受用户输入的项创建一个3一维边界风格
  WS_EX_TOOLWIDOW:创建工具窗口,即窗口是一个游动的工具条。

WS_EX_TOPMOST:指明以该风格创建的窗口应放置在所有非最高层窗口的上面并且停留在其L,即使窗口未被激活。使用函数SetWindowPos来设置和移去这个风格。
   WS_EX_TRANSPARENT:指定以这个风格创建的窗口在窗口下的同属窗口已重画时,该窗口才可以重画。
  由于其下的同属富日已被重画,该窗口是透明的。

IpClassName: 窗口类的名字。
lpWindowName:指向一个指定窗口名的空结束的字符串指针。其实就是窗口的名字。
dwStyle:指定创建窗口的风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。
x:窗口的横坐标。
y:窗口的竖坐标。
nWidth:窗口的宽度。
nHeight:窗口的高度。
hMenu:菜单句柄,或依据窗口风格指明一个子窗口标识。
hlnstance:与窗口相关联的模块事例的句柄。
lpParam:指向一个值的指针,该值传递给窗口 WM_CREATE消息
返回值:如果函数成功,返回值为新窗口的句柄:如果函数失败,返回值为NULL。若想获得更多错误信息,请调用GetLastError函数。

显示窗口
显示窗口就是更简单的事情了。
连个函数轻松搞定,第一个函数就是ShowWindow(),原型如下:
BOOL ShowWindow(

HWND hWnd,//当前的窗口句柄 int nCmdShow //可见状态 ); 因为CreateWindowEx函数创建的窗口是在内存中的,并没有显示到显示器上,用ShowWindow()函数,设定窗口的可见状态,并把数据从内存中移动到显卡上,以便显示。 第二个函数就是UpdateWindow();追问

嗯。i@yenkn.com

追答

我没这个网,我补充了

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-10

可以用这个 API

DWMAPI DwmGetColorizationColor(
  DWORD *pcrColorization,
  BOOL  *pfOpaqueBlend
);

有专门说明这个 API 的博客 CSDN

以下摘自Microsoft doc

Parameters

pcrColorization

A pointer to a value that, when this function returns successfully,
receives the current color used for glass composition. The color format
of the value is 0xAARRGGBB.

pfOpaqueBlend

A pointer to a value that, when this function returns successfully, indicates whether the color is an opaque blend. TRUE if the color is an opaque blend; otherwise, FALSE.

Return Value

If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.

第2个回答  推荐于2016-10-13
winuser.h头文件中有所有系统颜色的宏定义,不妨在这里找您要的颜色:

/*
* Color Types
*/
#define CTLCOLOR_MSGBOX 0
#define CTLCOLOR_EDIT 1
#define CTLCOLOR_LISTBOX 2
#define CTLCOLOR_BTN 3
#define CTLCOLOR_DLG 4
#define CTLCOLOR_SCROLLBAR 5
#define CTLCOLOR_STATIC 6
#define CTLCOLOR_MAX 7
#define COLOR_SCROLLBAR 0
#define COLOR_BACKGROUND 1
#define COLOR_ACTIVECAPTION 2
#define COLOR_INACTIVECAPTION 3
#define COLOR_MENU 4
#define COLOR_WINDOW 5
#define COLOR_WINDOWFRAME 6
#define COLOR_MENUTEXT 7
#define COLOR_WINDOWTEXT 8
#define COLOR_CAPTIONTEXT 9
#define COLOR_ACTIVEBORDER 10
#define COLOR_INACTIVEBORDER 11
#define COLOR_APPWORKSPACE 12
#define COLOR_HIGHLIGHT 13
#define COLOR_HIGHLIGHTTEXT 14
#define COLOR_BTNFACE 15
#define COLOR_BTNSHADOW 16
#define COLOR_GRAYTEXT 17
#define COLOR_BTNTEXT 18
#define COLOR_INACTIVECAPTIONTEXT 19
#define COLOR_BTNHIGHLIGHT 20
#if(WINVER >= 0x0400)
#define COLOR_3DDKSHADOW 21
#define COLOR_3DLIGHT 22
#define COLOR_INFOTEXT 23
#define COLOR_INFOBK 24
#endif /* WINVER >= 0x0400 */
#if(WINVER >= 0x0500)
#define COLOR_HOTLIGHT 26
#define COLOR_GRADIENTACTIVECAPTION 27
#define COLOR_GRADIENTINACTIVECAPTION 28
#endif /* WINVER >= 0x0500 */
#if(WINVER >= 0x0400)
#define COLOR_DESKTOP COLOR_BACKGROUND
#define COLOR_3DFACE COLOR_BTNFACE
#define COLOR_3DSHADOW COLOR_BTNSHADOW
#define COLOR_3DHIGHLIGHT COLOR_BTNHIGHLIGHT
#define COLOR_3DHILIGHT COLOR_BTNHIGHLIGHT
#define COLOR_BTNHILIGHT COLOR_BTNHIGHLIGHT
#endif /* WINVER >= 0x0400 */

调用DWORD GetSysColor(int nIndex);函数,可以返回颜色的RGB值。追问

你假如是vista以上系统的话,右键个性化-颜色 有很多颜色选,我要获取的就是那个颜色。

追答

没用过vista不好意思,你不妨记录下它的RBG值直接写到程序里啊

本回答被提问者和网友采纳
第3个回答  2018-10-03
我也一直在找这个问题的方法,现在终于找到答案了。使用DwmGetColorizationParameters函数可以实现楼主的需求,函数的使用方法请参照微软MSDN。另外WM_DWMCOLORIZATIONCOLORCHANGED消息可以响应主题颜色改变。
需要注意的是,DwmGetColorizationParameters获取到的颜色不是COLORREF类型,而是0xAARRGGBB,需要做一个简单的转换。

C++怎么获取系统主题颜色?
hIcon 窗口类的图标,为资源句柄,如果设置为NULL,系统将为窗口提供一个默认的图标。hCursor 窗口类的鼠标样式,为鼠标样式资源的句柄,如果设置为NULL,系统提供一个默认的鼠标样式。hbrBackground 窗口类的背景刷,为背景刷句柄,也可以为系统颜色值,如果颜色值已给出,则必须转化为以下的HBRUSH的值 ...

devC++怎么设置背景颜色呢?
5、首先在编辑器属性界面中,切换到语法选项卡,然后选择Space选项。6、然后点击背景下面的下拉框,选择一个自己喜欢的背景颜色。7、接着回到编辑器主界面,你就会看到编辑器的背景已经改变了。8、另外也可以通过更改预设的主题类型来改变编辑器的背景颜色。这就是DevC++怎么设置背景颜色的解决步骤。

如何设置Dev c++ 编写代码时的背景界面为黑色?
1、首先打开dev软件,然后点击工具-编辑器设置。2、这就是编辑器设置的对话框,点击语法。3、语法选项卡可以设置代码的各种颜色样式等。4、点击space,然后把背景设置成黑色,然后确定。5、设置成功后,背景就成功便成黑色。

Visual Studio Code(VSCode)的下载安装、扩展商店、颜色主题
Visual Studio Code (VSCode)的下载、安装、扩展商店、以及颜色主题设置是初学者快速上手的重要步骤。首先,访问官网code.visualstudio.com,选择对应操作系统(如Windows 10 64位)的下载链接。下载时需注意,Windows提供User Installer和System Installer,System版本适合多用户环境。下载完成后,安装时建议勾...

我的VS2013的默认窗口如下图,将默认的,怎么修改为常规的
工具-导入和导出设置-重置所有设置-保留我当前的设置-visual C++ 等待完成 然后窗口-重置窗口布局,然后就得到你想要的了

一个C\/C++程序员专属VSCode主题
以下是该主题与Microsoft C\/C++插件以及clangd插件搭配使用的截图示例。用户只需在VSCode插件市场搜索“C\/C++ Theme”即可获取并安装。对于有兴趣参与主题设计和优化的开发者,主题的开发工作量并不低,因此欢迎更多开发者加入。开发者可以访问仓库地址“ccpp_theme”进行贡献和协作,共同推动主题的发展。

大家好!有个有关数控线切割的知识我不知道怎么改了,如图我做了个第一...
也就是说,你能得到的选择是:Windows,Windows或Widnows。当然,有一些工具能将VB程序转变成Java。使用Visual Basic编写的游戏:一些。有很多使用VB编写的共享游戏,还有一些是商业性的。资料:微软的VB页面有一些信息。7、JavaJava是由Sun最初设计用于嵌入程序的可移植性“小C++”。在网页上运行小程序的想法着实吸引了不...

基于SpaceVim开箱即用C\/C++ IDE
首先,SpaceVim的颜色主题模块提供了多种主题供选择。为了适应C++源码的特点,调整了语法高亮与颜色主题。通过设置环境变量DARKBG,可随机启用或指定使用特定主题,例如设置DARKBG=gruvbox使用gruvbox主题。字体集NerdCodePro被集成到配置中,该字体集内含三种字体,分别用于regular、bold和italic风格,为代码阅读...

vscode配置c\/c++环境
设置颜色主题 (1)打开编辑器 windows\/linux:file—>perferences---> color theme macOS:code —>perferences---> color theme (2)使用方向键上下移动,选择不同的主题预览 (3)选择一个颜色主题,按下enter键,马上生效 设置文件图标主题 (1)打开编辑器 windows...

发布-订阅(Publish-Subscribe)C++实现
MessageCentrer.cpp作为实现的主体,实现前述功能,构建了整个发布-订阅系统的实际运行逻辑。实现阶段,首先定义了主题数据结构,以便系统能识别并处理特定消息类型。接着,设计并实现了发布者与订阅者的接口,使得系统能灵活地接收与发送消息。最后,通过编写测试用例,验证了系统的功能正确性与稳定性,确保...

相似回答