EVC中透明控制項的實現

2021-05-22 14:47:39 字數 1432 閱讀 8641

本文從建立乙個工程開始詳細說明如何用

evc實現

wince

應用程式下的透明控制項(這裡實現按鈕和static)。

1.新建乙個

mfc對話方塊工程取名

transbutton 2.在

resourceview

處插入一背景

idb_bitmap1

3.在對話方塊中拉

4個控制項:兩個按鈕,兩個

static

4.增加

transbuttondlg.h

檔案中增加如下

3個類成員

hbrush getbkbrush( hwnd hwnd, uint nid, hbitmap hbmbk );

hbitmap m_hbmbkgnd; //

對話方塊背景

hbrush m_hbrctl[2]; //

控制項背景畫刷5.在

transbuttondlg.cpp

中增加getbkbrush()

的實現hbrush ctransbuttondlg::getbkbrush( hwnd hwnd, uint nid, hbitmap hbmbk )

return hbrushctrl;}6.

在oninitdialog()

中增加下面一段擷取控制項所在部分的:

m_hbmbkgnd=::loadbitmap(afxgetinstancehandle(),makeintresource(idb_bitmap1) );

if( m_hbmbkgnd )

7.增加

wm_paint

的處理函式,並在函式中增加畫背景的部分

(onpaint()函式)

:cdc memdc;

cbitmap bmbkgnd;

bmbkgnd.attach( m_hbmbkgnd );

memdc.createcompatibledc(&dc);

cbitmap *poldbm = memdc.selectobject( &bmbkgnd );

bitmap bm;

bmbkgnd.getobject(sizeof(bm), &bm);

dc.bitblt(0, 0, bm.bmwidth, bm.bmheight, &memdc, 0, 0, srccopy );

memdc.selectobject( poldbm );

bmbkgnd.detach();

8.增加

wm_ctlcolor

的處理函式,並在其中增加畫控制項背景的部分:

if(pwnd->getdlgctrlid()   ==   idc_button_test1 )

else if(pwnd->getdlgctrlid()   ==   idc_static_test1)

9.編譯鏈結

10.

透明控制項的製作

最簡單的方法是對映wm erasebkgnd訊息,在訊息處理函式中直接return true 這種方法通過不擦除背景實現,故經常會有其他問題,比如文字從帶下劃線都無下劃線的變化中,因為下劃線不擦除,故始終有下劃線.以下提供一種貼圖的方式實現,即將控制項所在位置的背景截圖,然後貼在控制項表面上,在按鈕...

WinForm中控制項與背景透明

要實現c winform中的控制項與背景的透明,可以通過設定控制項的backcolor屬性為transparent,同時設定其父控制項。因為在c 中,控制項的透明指對父窗體透明。如果不設定parent屬性,那麼控制項將只對form透明,顯示的時候都會把form的背景色 預設為control 重刷一遍...

C 實現透明背景的垂直Label控制項

本文描述如何在c 中建立乙個透明背景色的垂直label使用者控制項。該使用者控制項允許你從底部或頂部開始繪製文字。本文是vertical label control in vb.net的延續。其實,更準確的說,我是把他的工作翻譯到c 中,並新增了從下向上顯示文字的功能。另外,支援背景透明。使用 本文...