首先要做的就是在createwindowex()時加入ws_ex_layered風格。之後呼叫setlayeredwindowattributes()。該函式原型如下:
bool winapi setlayeredwindowattributes(lwa_colorkey有效時引數指定的lwa_alpha 有效時對視窗整體使用半顏色被視為透明透明效果,阿爾法值由引數指定。_in_ hwnd hwnd, //視窗控制代碼
_in_ colorref crkey, //設定色彩通道的相對分量 使用rgb巨集
_in_ byte balpha, //阿爾法值,0-225之間
_in_ dword dwflags //lwa_alpha或lwa_colorkey,或二者都有
);/*
*lwa_alpha :使用阿爾法值顯示透明效果
lwa_colorkey:使用rgb通道過濾顏色
*/
左側是lwa_colorkey,可以看到在視窗 右側是 lwa_alpha可以看到整體呈現半透明,而且
上畫的rgb=(255,0,255)的圓形被視 在視窗上繪製的圓形也是半透明的。(也注意到對圓型
為透明 視窗其座標還是按矩形的左上角算的)
兩種效果可以同時使用效果,其效果就是乙個半透明的黑色月亮。
可以使用updatalayeredwindow()函式更新layered window。比如重新設定其透明度,位置,大小,形狀等。該函式會更新整個視窗。不需要擔心被遮擋的視窗的更新問題,系統會處理好的。(對乙個layered視窗系統總是儲存其下面的影象,並自動更新,這意味著占用更多記憶體,所以不需要時通過setwindowlong()刪除ws_layered風格。這在下面還會說)
對透明的部分(比如上面左圖月牙缺掉的部分或者對右圖設定阿爾法值為0)點選滑鼠時,滑鼠訊息會透過視窗,也就是layered視窗在此處不接受滑鼠訊息。這很符合所看即所得的設計理念,使用者感覺看不到的地方就是沒有,他們不必理解什麼阿爾法混合。
如果不再需要透明效果,盡早去掉layered屬性可以提高效能,標準的做法如下:
//最後說一點,如果視窗已經建立好了也有其他的辦法,呼叫setwindowlong(),重新設定視窗風格即可。但是對乙個已經顯示在螢幕上的視窗修改其風格為ws_ex_layered時會發現該視窗不見了,此時呼叫updatalayeredwindow()或setlayeredwindowattributes()後會出現你想要的樣子。remove ws_ex_layered from this window styles
setwindowlong(hwnd,
gwl_exstyle,
getwindowlong(hwnd, gwl_exstyle) & ~ws_ex_layered);
//ask the window and its children to repaint
redrawwindow(hwnd,
null,
null,
rdw_erase | rdw_invalidate | rdw_frame | rdw_allchildren);
另外:一旦setlayeredwindowattributes被呼叫了, 之後對updatelayeredwindow的呼叫都會失敗直到重新改變了視窗的layered屬性。
Cesium popup窗 氣泡窗 提示窗外掛程式
首先向關注我的各位小夥伴說一聲對不起,好久沒有更新csdn了,最近因為自己也在看opengl的一些學習資料和cesium的原始碼,所以耽擱了,在此也向對小夥伴們說一聲對不起。因為二維地圖的外掛程式大部分都帶氣泡窗,但是三維裡不帶,所以得重新寫。我這裡是參照leaflet的氣泡風格寫的。第一種 是乙個...
不同組織的窗寬窗位
頭顱,腦組織 窗寬設定為80 hu 100 hu,窗位為30 hu 40 hu,垂體及蝶鞍區病 變窗寬宜設在200 hu 250 hu,窗位45 hu 50 hu,腦出血患者可改變 窗寬位80 hu 140 hu,窗位30 hu 50 hu,腦梗死患者 常用窄窗60 hu,能提高病灶的檢出率,清楚顯...
c語言 滑窗法 滑窗演算法
滑窗演算法 與跳窗演算法 類似,滑窗 moving window 演算法也是通過限制各個時間視窗內所能接 收的最大信元數對業務量進行控制。區別是,在滑窗演算法中,時間視窗不是向前跳,而 是每過乙個信元時間向前滑動一次,滑動的長度是乙個信元的時間。以下是幾種 upc演算法。信元一旦被 upc判定是違約...