[英]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.