在從Button派生的自定義控件中,ButtonRenderer.DrawButton()繪製處於各種狀態的按鈕。ButtonRenderer使用不同於16位中的按鈕的背景顏色
當Windows中的顯示設置設置爲32位的顏色深度時,一切都很好,但一旦它設置爲16位,顏色與常規的WinForms按鈕之一不匹配,在我的用戶界面中,這並不是我想要的。
我已經使用這樣的最小示例代碼複製了這個。
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Rectangle rect = new Rectangle(10, 10, 250, 120);
ButtonRenderer.DrawButton(e.Graphics, rect, PushButtonState.Normal);
rect = new Rectangle(300, 300, 250, 120);
ControlPaint.DrawButton(e.Graphics, rect, ButtonState.Normal);
}
這給這個...
我敢肯定,你都會注意兩個「按鈕」由DrawButton方法繪製的具有比標準按鈕顏色要略淺,和窗體背景(我沒有改變,並保持默認爲「控制」)... 如果你足夠的縮放,你可以看到它是正確的背景顏色和另一個更亮的顏色交替像素.. 。
我發現了這個問題,因爲我們的用戶正在使用遠程桌面(RDP)連接到我們的應用程序。強制遠程桌面設置爲32位解決了這個問題,但我認爲它會對性能產生影響,並且我們的一些用戶正在海外工作,而且在相對較慢的寬帶鏈路上工作......因此,強制執行32位是我寧願避免的選項。 它也發生在PC前面,通過將顯示設置設置爲16位顏色。
你有什麼想法嗎?是ButtonRenderer和ControlPaint類的某種錯誤,還是有辦法解決這個問題? (我使用.Net 4.0)。
只是爲了簡化 - ButtonRenderer.DrawButton在內部調用ControlPaint.DrawButton使它們等價調用。 –
@JohnArlen - 如果用戶啓用了Windows主題(如XP的Luna等),ButtonRenderer調用在ControlPaint調用繪製時繪製考慮Windows主題,而不考慮主題(即看起來像經典)。 –