用過金山詞霸的朋友,一定會為其半透明的翻譯提示視窗而稱奇。究竟這種視窗是如何做出來的呢?下面我們將來**這種半透明的視窗的製作方法。
一、 原理
---- 首先,我們先從透明視窗說起,其實透明視窗就是可以透過視窗看到它背景。所以,我們可以將視窗後面的背景圖象,顯示在視窗前面,就可實現透明視窗的效果了。至於半透明的效果,是在透明的基礎上,加上一層濾鏡,使看到的背景模糊一點而已。所以,在拿到背景圖象後,先在該圖象加上一層濾鏡(把圖象弄模糊),然後再顯示在視窗上,就能達到半透明的效果。
---- 我們可歸納出實現半透明視窗的步驟:在視窗顯示前其獲取背景圖 → 對背景圖象進行濾鏡效果處理 → 將處理過的背景圖象顯示在視窗前面。
---- (1) 獲取背景圖象
---- 要獲取背景圖,先用getdc(0)函式獲取整個螢幕裝置場景(dc),再用copyrect函式拷貝視窗的背景到指定的tbitmap,該tbitmap就是我們所要的圖象了。其中函式getdc(0)取得的dc可用tcanvas.handle儲存;而copyrect是tcancas類的成員函式,作用是從一canvas中拷貝一指定區域(rect)到另一canvas的指定區域。
---- (2)對背景圖進行濾鏡效果處理
---- 用迴圈的方法遍歷圖象的每一點,將各點的某些頻段的光波濾除。其實,濾鏡種類繁多,所以的演算法亦很多,讀者們可參考相關資料,選擇您滿意的方法。本文的濾鏡是灰色的,實現方法見translucentbmp(bmp:tbitmap;acolor:tcolor;atransparent:longint)。其中,引數bmp是要處理的圖象,acolor是濾鏡的顏色,atransparent是透明度。
半透明 MFC實現父視窗不透明,子視窗半透明效果
cpp view plain copy onerasebkgnd cdc pdc 描述 根據msdn所述,子視窗的半透屬性是跟隨父視窗的。也就是說在子視窗中用setlayeredwindowattributes方法完成透明是不可行的。如果子視窗設定成overlap或者popup格式,雖然可用setl...
如何用VB製作半透明窗體?
函式setlayeredwindowattributes 使用這個函式,可以輕鬆的實現半透明窗體。按照微軟的要求,透明窗體窗體在建立時應使用ws ex layered引數 用createwindowex 或者在建立後設定該引數 用setwindowlong 我選用後者。全部函式 常量宣告如下 pri...
Qt視窗設定半透明
1.從mainwindows繼承的視窗 直接用setwindowopacity 0.9 引數為透明度,範圍0 1。2.程式中彈出的視窗,繼承自qdialog,要使用無邊框視窗設定了framelesswindowhint屬性,但是發現framelesswindowhint屬性和透明度函式有衝突,無法設...