最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

窗口透明丨窗口透明度設(shè)置控件透明以及窗體透明源碼

2023-07-28 10:06 作者:libilibivaga  | 我要投稿

透明窗口(窗口上面文字圖片等內(nèi)容不透明)的實(shí)現(xiàn)(使用SetLayeredWindowAttributes API函數(shù))

SetLayeredWindowAttributes的實(shí)現(xiàn)必須將窗口設(shè)置為WS_EX_LAYERED的擴(kuò)展風(fēng)格。? ?然而,只有WS_POPUP窗口才能設(shè)置WS_EX_LAYERED的擴(kuò)展風(fēng)格。這就意味著只能夠在POPUP的窗口中實(shí)現(xiàn)透明窗口,而在WS_CHILD風(fēng)格的窗口中是不能夠?qū)崿F(xiàn)的。


當(dāng)初我就是試了半天發(fā)現(xiàn)不行的。


SetLayeredWindowAttributes的原型如下:


BOOL SetLayeredWindowAttributes(? ? ? ? ? HWND hwnd,

COLORREF crKey,

BYTE bAlpha,

DWORD dwFlags

);

第一個(gè)參數(shù)就是要設(shè)置的窗口的句柄,第二個(gè)就是要設(shè)置的一個(gè)透明色,第三個(gè)是要設(shè)置的透明度,bAlpha的范圍是 0-255,如果是0,那么完全透明,如果是255,是完全不透明。 第四個(gè)參數(shù),就是設(shè)置是按照透明色來(lái)透明,還是按照bAlpha來(lái)透明?;蛘邇蓚€(gè)都設(shè)置。? ? ?如果 dwFlags 設(shè)置了LWA_COLORKEY,那么crKey就起作用,窗口中所有的crKey顏色區(qū)域就會(huì)全部透明,如果dwFlags設(shè)置了LWA_ALPHA,那么bAlpha就會(huì)起作用,整個(gè)窗口就會(huì)按照bAlpha的值來(lái)透明。也可以這兩個(gè)一起設(shè)置來(lái)同時(shí)實(shí)現(xiàn)這兩個(gè)效果。


比如下面的代碼:


SetLayeredWindowAttributes(m_hWnd,RGB(255,0,255),


(BYTE)220,LWA_ALPHA|LWA_COLORKEY);


將會(huì)把窗口的所有的洋紅色區(qū)域全透,然后剩下的區(qū)域半透明。


切記,不能夠分別設(shè)置,比如像下面這么設(shè)置是達(dá)不到要求的:


SetLayeredWindowAttributes(m_hWnd,


RGB(255,0,255),0,LWA_COLORKEY);


SetLayeredWindowAttributes(m_hWnd,0,(BYTE)220,LWA_ALPHA);


下面我們來(lái)實(shí)現(xiàn)一個(gè)半透明的tip窗口:


1.? ? ? ? 由于我們的窗口是要實(shí)現(xiàn)一個(gè)tip,這個(gè)窗口是個(gè)非規(guī)則窗口,所有需要貼圖來(lái)實(shí)現(xiàn)邊框等,所有需要洋紅色全透,其他部分半透的效果。在OnCreat或者OnInitDialog中使用下面的代碼就可以實(shí)現(xiàn)了:


SetLayeredWindowAttributes(m_hWnd,RGB(255,0,255),


(BYTE)220,LWA_ALPHA|LWA_COLORKEY);


2.? ? ? ? ?然后,我們需要窗口整體半透,但是上面的文字內(nèi)容等不能透明,這個(gè)問(wèn)題不能解決,所有只能夠在這個(gè)窗口上面再套上一個(gè)POPUP的upWindow窗口,背景刷上一種純顏色,比如


RGB(0,255,0),然后OnCreat或者OnInitDialog用SetLayeredWindowAttributes設(shè)置窗口全透明,顯示的內(nèi)容都繪制在這個(gè)upWindow,這樣就看起來(lái)實(shí)現(xiàn)了窗口半透明,但是上面的文字不透明的效果。


代碼如下:


SetLayeredWindowAttributes(m_hWnd,RGB(0,255,0),0,LWA_COLORKEY);


在upWindow的OnPaint中寫(xiě)上如下代碼:


CRect rc;


GetClientRect(&rc);


dc.FillSolidRect(rc,RGB(0,255,0);


這樣就實(shí)現(xiàn)了我們需要的效果了。


下圖就是我實(shí)現(xiàn)的效果:


微博博主:當(dāng)時(shí)我就沒(méi)憋住 ?


度娘搜:窗口透明丨窗口透明度設(shè)置控件透明以及窗體透明源碼

窗口透明丨窗口透明度設(shè)置控件透明以及窗體透明源碼的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
三门县| 息烽县| 万宁市| 新余市| 兴城市| 襄樊市| 承德县| 黄龙县| 万山特区| 沙河市| 池州市| 正宁县| 河南省| 赞皇县| 奉新县| 仪陇县| 郴州市| 池州市| 南乐县| 西丰县| 建宁县| 长治县| 琼海市| 罗江县| 临沧市| 高密市| 来凤县| 象州县| 淳化县| 高邑县| 峨眉山市| 福清市| 朝阳县| 台北县| 石屏县| 万山特区| 四子王旗| 油尖旺区| 余江县| 综艺| 拉孜县|