效果
1.窗體整體透明
,支援子控制項,支援onpaint()
//為窗體新增
ws_ex_layered屬性,
該屬性使窗體支援透明
modifystyleex
(0,ws_ex_layered
);效果
1.1
窗體整體透明
,子控制項也透明
//設定
alpha
值為150
byte
bytealpha
=150;
setlayeredwindowattributes
(0,bytealpha
,lwa_alpha);
效果
1.2
窗體整體透明
,子控制項不透明//在
onctlcolor
中將窗體背景刷為某種單色,比如
rgb(255,0,0)
//在onpaint中當然也可以 if
(nctlcolor
=idd)
return
m_brush
;//m_brush.createsolidbrush(rgb(255,0,255));
//設定窗體中所有單色區域都透明
setlayeredwindowattributes
(rgb
(255,0,255),0,
lwa_colorkey);
效果
2.窗體部分透明,但該窗體不支援子控制項,
不支援onpaint()
uses_conversion;
image
*_pimage
=image
::fromfile
(a2w
("f:\\desktop\\testtransparentwnd\\test.png"
));
//透明度由
png的
alpha
通道決定 //
如果加上
ws_ex_transparent
屬性,則滑鼠會穿透此窗體
modifystyleex
(0,ws_ex_layered
/*|ws_ex_transparent*/
);cdc
*pdcdst
=this
->
getdc
();cdc
dcsrc
;dcsrc
.createcompatibledc
(pdcdst);
cbitmap
bmp;
bmp.
createcompatiblebitmap
(pdcdst
,300,300);
dcsrc
.selectobject
(&bmp);
//用gdi+
顯示png
graphics
_graphics
(dcsrc
.m_hdc
);_graphics
.drawimage
(_pimage
,0,0,300,300);
blendfunction
_blend
;_blend
.blendop
=0;
_blend
.blendflags
=0;
_blend
.alphaformat
=1;
_blend
.sourceconstantalpha
=255; //
此時,滑鼠會穿透窗體中
alpha值為0
的區域
updatelayeredwindow
(pdcdst
,&cpoint
(0,0),&
csize
(300,300), &
dcsrc
,&cpoint
(0,0),
0,&_blend
,ulw_alpha
);bmp
.deleteobject
();
dcsrc
.deletedc
();
_graphics
.releasehdc
(dcsrc
.m_hdc);
this
->
releasedc
(pdcdst);
3.
既要窗體部分透明
(滑鼠能穿透窗體中
alpha值為0
的區域)
,還要能顯示控制項
解決方案:
建立兩個窗體,窗體
a使用效果
2的方法,作為背景窗體;窗體
b使用效果
1.2的方法,作為前景窗體,控制項都放在窗體
b上。在窗體a的
onmove
中,同步移動窗體b。
效果:
備註:
1.以上**只需在窗體初始化的時候(如
oninitdialog)
執行一次即可
2.ws_ex_layered
要求巨集_win32_winnt
>=
0x0500
3.以上程式需要
gdi+
支援
Layered Window 分層窗體,透明窗體
為窗體新增 ws ex layered屬性,該屬性使窗體支援透明 modifystyleex 0,ws ex layered 效果1.1 窗體整體透明,子控制項也透明 設定alpha 值為150 byte bytealpha 150 setlayeredwindowattributes 0,byte...
Layered Window 分層窗體,透明窗體
為窗體新增 ws ex layered屬性,該屬性使窗體支援透明 modifystyleex 0,ws ex layered 效果1.1 窗體整體透明,子控制項也透明 設定alpha 值為150 byte bytealpha 150 setlayeredwindowattributes 0,byte...
Layered Window 分層窗體,透明窗體
2011 10 04 07 53 22 分類 api vc 字型大小 訂閱 為窗體新增 ws ex layered屬性,該屬性使窗體支援透明 modifystyleex 0,ws ex layered 效果1.1 窗體整體透明,子控制項也透明 設定alpha 值為150 byte bytealpha...