亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C# WinForms,具有半透明背景的工具提示

C# WinForms,具有半透明背景的工具提示

C#
郎朗坤 2021-10-31 19:31:24
我正在開發這個小型 WinForm 應用程序,并決定使用具有半透明背景的自定義繪制工具提示。所以我開始將OwnerDrawToolTip 上的屬性設置為True,為Draw和Popup事件創建事件處理程序(請參閱下面的示例代碼。注釋版本也不起作用)。private void toolTip_Popup(object sender, PopupEventArgs e){    e.ToolTipSize = new Size(400, 400);}private void toolTip_Draw(object sender, DrawToolTipEventArgs e){    //e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(120, Color.Red)), new Rectangle(e.Bounds.Location, e.Bounds.Size));    e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(120, Color.Red)), new Rectangle(0, 0, 400, 400));}現在,當第一次顯示特定控件的工具提示時,一切都按預期工作。請參閱下面的圖片(400x400 工具提示,半透明紅色背景)。但是當我第二次將鼠標懸停在同一個控件上時,工具提示失去了它的半透明性。見下圖。為什么呢?
查看完整描述

3 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

第一次將鼠標懸停在控件上時,將使用透明色 (ARGB.120) 創建一個新的工具提示實例。當您在工具提示外單擊時,是完全釋放工具提示對象還是您只是將實例設置為不可見?

當您第二次將鼠標懸停在實例上時,如果舊的工具提示對象沒有被釋放,則有可能再次調用相同的對象。因此,現在當您在現有工具提示上使用 color = ARGB.120 執行 Graphics.FillRectangle() 時,您只是在其上疊加了另一層 ARGB.120 顏色,這將使其進一步變暗,因為顏色級別已更改。

因此,當您在第一次調用工具提示后單擊工具提示之外時,您可能需要處理工具提示對象(或 e.Graphics 對象,如果這不影響應用程序的其他部分)并每隔一段時間創建新的工具提示對象將鼠標懸停在控件上的時間。


查看完整回答
反對 回復 2021-10-31
?
慕無忌1623718

TA貢獻1744條經驗 獲得超4個贊

需要告訴 Windows 需要重新繪制彈出窗口下方的窗口。這是通過“分層窗口”樣式完成的。通過分層,內容以 z 順序繪制,透明度混合工作。如果沒有分層,只有頂部窗口會被發送重繪,并且它會在 DC 屏幕緩沖區中無意義的剩余數據之上進行繪制。

您可以嘗試p/invokingSetLayeredWindowAttributes

我強烈建議閱讀有關分層 Windows 的 MSDN 文檔: 這里這里


查看完整回答
反對 回復 2021-10-31
  • 3 回答
  • 0 關注
  • 473 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號