純GDI完美實現半透明不規則視窗

2021-06-09 16:52:13 字數 599 閱讀 2919

以前在研究半透明不規則視窗的時候,用的是gdi的textout/drawtext繪製字型,但繪製出的字型是透明的,

現在我完全放棄了gdi的textout()、bitblt()的方式,而用setdibitstodevice()代替,就是直接貼畫素到dc裡。

今天嘗試用setdibitstodevice()+updatelayeredwindow()實現半透明不規則視窗,結果非常順利!

貼出來,共享給需要的朋友.

另外,本程式還附帶了乙個使用mmx彙編優化的32位alpha混合函式(57行,有詳盡注釋),需要的朋友可以直接copy了。

ps:關於字型的繪製

我建議大家用getglyphoutline()手動提取字形畫素去繪製,因為textout這類繪製函式功能有限,只適合初級軟體使用,而要想畫出豐富多彩的介面,比如字型alpha漸變,就必須自己操作畫素,所以getglyphoutline()才是專業級的,而且相容性好,可以抽象出來提供給ddraw、d3d、opengl等使用

截圖:

這是加入gui系統後的效果:

原貼:

GDI 實現不規則窗體

先來看一下實現的效果,下圖中那個娃娃就是我們要實現的不規則窗體啦 使用gdi 還需要進行初始化 在應用初始化時,啟動gdi 在程式退出時,關閉gdi png是實現不規則窗體的關鍵,因為它本身就是帶透明效果的,把這種格式的作為窗體本身就是不規則的。首先我們需要載入這張,在這裡我沒有將其作為資源新增到專...

半透明不規則Toast提示窗體,定時自動消失

專案中我們進場會用到toast提示窗體,也就是常用到的半透明的不規則的提示小介面,會在指定時間自己消失掉,具體實現如下 include include toastwidget.h include ui toastwidget.h toastwidget toastwidget qwidget par...

QT實現不規則窗體和透明窗體

不規則窗體的實現有兩種方式 一種是設定窗體的掩碼影象 另一種是設定窗體背景透明,然後重寫其繪圖函式,將背景圖繪製上去。第一種方式 首先要準備兩張影象,一張是要顯示的影象,另一張是第一張圖的掩碼影象,黑色部分是你的窗體要顯示的部分,如圖 具體實現的關鍵 如下 irregularform1 irregu...