看板 C_Sharp 關於我們 聯絡資訊
謝蒙先進一直寫出好文章,讓我們這些後輩所獲良多 目前小弟也有部份程式會用到透明圖,在參考這篇文章後有些問題 我將問題直接穿插在原文中,請指導一下,謝謝 : 高效能的原理就是"千萬""千萬"不要呼叫任何refresh(), update()... : 底層是你的UI的snapshot,也就是全部壓成一張圖(多線程分段載入效果好!). 請問一下所謂的底層可以是指Form或UserControl的BackgroundImage嗎? 另外這裡所指的多線程"分段載入"是類似下面的作法? Form_Load(object sender, EventArgs e) { ThreadPool.QueueUserWorkItem(new WaitCallback(loadBackgroundImage)); } void loadBackgroundImage(object stateInfo) { //load Image } : 上面疊一層Layer, 完全透明(設transparent key) 這裡的Layer我選用PictureBox,並將Dock設定為Full,BackColor設為任意一個顏色 然後將Form的TransparentKey設為該PictureBox的BackColor 這樣我發覺執行後整張表單都變成透明的了 : 用來收使用者的事件e.g., click,keypress... : 再去做對應的回饋效果e.g.,按下去有光暈效果. : 回饋效果做法_func(){ : runtime產生一張畫布,bitmap大小是你要做出效果的區域e.g.,按鈕A的範圍. : 這邊說區域的意思是,可包含數個按鈕. : 當收到click事件, 將光暈的圖, 用createGraphics()方法畫到bitmap裡面. 請問一下這裡的CreateGraphics是用哪個Control去Create的 : 同樣的將所有要更新畫面的圖都畫到bitmap裡面. : 然後將bitmap畫到底層, : 最後記得要dispose那張bitmap, 才不會有memory leak喔~ 咪啾 : } : //希望對你有幫助 : --- : 引用某人的話: 你只要xxx的從左邊拉一個UI過來就是失敗! : 我不認同,因為開發過程將UI對齊之後紀錄座標是很重要的. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.72.96 ※ 編輯: peiga 來自: 220.137.72.96 (06/23 07:56)
horngsh:bitmap1.CreateGraphics()? 06/23 13:48
Kelunyang:題外話,我發現WPF Form可以支援透明底圖XD 06/23 16:13