首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改SysLink控件的颜色

更改SysLink控件的颜色
EN

Stack Overflow用户
提问于 2015-12-02 06:41:55
回答 1查看 917关注 0票数 5

我正在为以下项目编写插件Autodesk 3ds Max,,一个本机的、仅适用于Windows的应用程序。该插件是用C++编写的,并使用原始的Win32应用编程接口来构建其用户界面,正如3ds Max插件所应该做的那样。

我想在插件的UI中显示一个HTML链接,让用户从web上下载新版本的插件。The The TheSysLink control似乎能胜任这项工作。

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

遗憾的是,现在SysLink控件的文本始终以蓝色绘制,这与3ds Max的深色主题不太匹配。此外,它看起来不像我可以要求3ds Max的调色板。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-02 07:11:50

编辑:

这是syslink控件默认情况下的样子:

注意,静态部分是黑色的(与静态控件相同)。只有链接部分是蓝色的。在您的示例中,所有内容都是蓝色的,并且背景颜色与对话框颜色相匹配。因此,应用程序已经进行了自定义更改。

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


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

代码语言:javascript
运行
复制
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;
    }
    ...    
    }
...
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34031600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档