我正在为以下项目编写插件Autodesk 3ds Max,,一个本机的、仅适用于Windows的应用程序。该插件是用C++编写的,并使用原始的Win32应用编程接口来构建其用户界面,正如3ds Max插件所应该做的那样。
我想在插件的UI中显示一个HTML链接,让用户从web上下载新版本的插件。The The TheSysLink control似乎能胜任这项工作。
这就是困难所在:3ds Max用户界面的颜色是可配置的。我希望我的插件是一个好公民,所以我需要SysLink控件使用与其他静态标签相同的颜色。
遗憾的是,现在SysLink控件的文本始终以蓝色绘制,这与3ds Max的深色主题不太匹配。此外,它看起来不像我可以要求3ds Max的调色板。
如何使SysLink控件使用与其他静态标签相同的颜色?
发布于 2015-12-02 07:11:50
编辑:
这是syslink控件默认情况下的样子:
注意,静态部分是黑色的(与静态控件相同)。只有链接部分是蓝色的。在您的示例中,所有内容都是蓝色的,并且背景颜色与对话框颜色相匹配。因此,应用程序已经进行了自定义更改。
如果有正常的消息处理,则下面的代码应将所有内容更改为红色:
使用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;
}
...
}
...
}
https://stackoverflow.com/questions/34031600
复制相似问题