Layered Window 分層窗體,透明窗體

2021-06-10 09:56:55 字數 2914 閱讀 8419

效果

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...