gpt4 book ai didi

c++ - 更改 SysLink 控件的颜色

转载 作者:太空狗 更新时间:2023-10-29 20:56:15 24 4
gpt4 key购买 nike

我正在为 Autodesk 3ds Max 写一个插件,一个 native 的、仅限 Windows 的应用程序。该插件是用 C++ 编写的,并使用原始 Win32 API 构建其用户界面,就像 3ds Max 插件应该做的那样。

我想在插件的 UI 中显示一个 HTML 链接,让用户可以从 Web 下载新版本的插件。 SysLink control似乎可以完成这项工作。

难点在于:3ds Max 用户界面的颜色是可配置的。我希望我的插件成为一个好公民,所以我需要 SysLink 控件使用与其他静态标签相同的颜色。

不幸的是,现在 SysLink 控件的文本总是以蓝色绘制,这与 3ds Max 的深色主题效果不佳。而且,看起来我不能向 3ds Max 询问它的调色板。

如何让 SysLink 控件使用与其他静态标签相同的颜色?

The plugin's user interface with the light theme The plugin's user interface with the dark theme

最佳答案

编辑:

默认情况下,系统链接控件应该是这样的:

syslinkControl

注意静态部分是黑色的(与静态控件相同)。只有链接部分是蓝色的。在你的情况下,一切都是蓝色的,背景颜色与对话框颜色相匹配。因此应用程序已经进行了自定义更改。

如果有正常的消息处理,那么下面的代码应该将所有内容更改为红色:


使用WM_CTLCOLORSTATIC,但您必须告诉 syslink 控件接受颜色更改:

LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{

case WM_CTLCOLORSTATIC:
{
HDC hdc = (HDC)wp;
SetTextColor(hdc, RGB(255, 0, 0));
SetBkColor(hdc, GetSysColor(COLOR_BTNFACE));
return (LRESULT)GetSysColorBrush(COLOR_BTNFACE);
}

case WM_INITDIALOG:
{
...
LITEM item = { 0 };
item.iLink = 0;
item.mask = LIF_ITEMINDEX | LIF_STATE;
item.state = LIS_DEFAULTCOLORS;
item.stateMask = LIS_DEFAULTCOLORS;
SendMessage(hsyslink, LM_SETITEM, 0, (LPARAM)&item);
...
return TRUE;
}
...
}
...
}

关于c++ - 更改 SysLink 控件的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34031600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com