我正在写一个插件欧特克 3ds Max http://www.autodesk.com/products/3ds-max/overview,一个仅限 Windows 的本机应用程序。该插件是用 C++ 编写的,并使用原始 Win32 API 来构建其用户界面,正如 3ds Max 插件应该做的那样。
我想在插件的 UI 中显示一个 HTML 链接,以便用户从网络下载该插件的新版本。这系统链接控制 https://msdn.microsoft.com/en-us/library/windows/desktop/bb760706%28v=vs.85%29.aspx似乎可以完成这项工作。
难点就在这里:3ds Max 用户界面的颜色是可配置的。我希望我的插件成为一个好公民,因此我需要 SysLink 控件使用与其他静态标签相同的颜色。
不幸的是,现在 SysLink 控件的文本始终以蓝色绘制,这与 3ds Max 的深色主题不太兼容。此外,我似乎无法向 3ds Max 询问其调色板。
如何使 SysLink 控件使用与其他静态标签相同的颜色?
Edit:
默认情况下,系统链接控制应如下所示:
请注意,静态部分是黑色的(与静态控件相同)。只有链接部分是蓝色的。在您的情况下,一切始终是蓝色的,背景颜色与对话框颜色匹配。因此,应用程序已经进行了自定义更改。
如果有正常的消息处理,那么下面的代码应该将所有内容更改为红色:
Use 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;
}
...
}
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)