如何从DwmGetColorizationColor获取COLORREF

问题描述 投票:0回答:1

我是个新手,我不知道该怎么做。我正在用 C++ 为我正在用另一种语言开发的游戏制作一个 DLL。我对 C++ 一无所知,而且自己也几乎没有接触过它。我需要它来返回 Windows 个性化颜色。 reddit 上的某人优雅地给了我一些有效的源代码,但它只返回了 ACTIVE_BORDER 颜色,这与用户可以在 Windows 8+ 中轻松更改的颜色不同,这正是我所关注的。我已将其修改为与 DwmGetColorizationColor 一起使用,但现在的问题是它不使用我需要的 COLORREF。任何可以帮助我的人将不胜感激。

这是我的来源:

#include <windows.h>
#include <dwmapi.h>
#include <gdiplus.h>
#define DLLEXPORT extern "C" __declspec(dllexport)
#pragma comment(lib, "Dwmapi")

DLLEXPORT double GetCol(void) {
    DWORD color = 0;
    BOOL opaque = FALSE;
    HRESULT hr = DwmGetColorizationColor(&color, &opaque);
    return color;
};
c++ dll dllexport dwm
1个回答
1
投票

返回的颜色格式为

0xAArrggbb

而 Windows

COLORREF

0x00bbggrr

您需要将退回的

DWORD
部分移动到 COLORREF 中。

COLORREF c = 
   ((color and 0x00ff0000) shr 16) //red
   or
   ((color and 0x0000ff00)) //green
   or
   ((color and 0x000000ff) shl 16);
© www.soinside.com 2019 - 2024. All rights reserved.