簡體   English   中英

更改 SysLink 控件的顏色

[英]Change color of SysLink control

我正在為Autodesk 3ds Max編寫一個插件,這是一個原生的、僅限 Windows 的應用程序。 該插件是用 C++ 編寫的,並使用原始的 Win32 API 來構建其用戶界面,就像 3ds Max 插件應該做的那樣。

我想在插件的 UI 中顯示一個 HTML 鏈接,讓用戶從網絡下載插件的新版本。 SysLink 控件似乎可以完成這項工作。

難點在於:3ds Max 用戶界面的顏色是可配置的。 我希望我的插件成為一個好公民,所以我需要 SysLink 控件使用與其他靜態標簽相同的顏色。

不幸的是,現在 SysLink 控件的文本總是以藍色繪制,這在 3ds Max 的深色主題中效果不佳。 此外,看起來我無法向 3ds Max 詢問其調色板。

如何讓 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;
    }
    ...    
    }
...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM