CStatic的透明背景方法

2021-09-07 00:22:17 字數 861 閱讀 7553

如果在乙個有顏色的窗體中建立乙個cstatic的物件x,而且該x要改變它的文字內容,那麼就有乙個x背景是預設窗體背景的問題,而不是那個顏色窗體的背景,這是因為,在setwindowtext時會onerasebkgnd擦除x原來的介面的背景,然後呼叫預設的onpaint畫上window預設的窗體顏色。

解決辦法有兩個:

方法1

接受on_wm_ctlcolor訊息,該訊息攔截了畫窗體以及窗體上控制項的背景顏色的操作

實現如下:

hbrush crdialog::onctlcolor(cdc* pdc, cwnd* pwnd, uint nctlcolor)

return hbr; }

方法2

思路是:建立乙個csatic的類cstaticex、, 包含乙個cdc的成員m_memdc,把窗體的背景作為m_memdc的初始化,在cstaticex的onerasebkgnd內bitblt m_memdc則,這是x的背景為窗體的背景了

// 在onpaint內初始化m_memdc

void cstaticex::onpaint()

// 寫cstatic文字

cstring strwintext;

getwindowtext(strwintext);

dc.selectobject(&font);

dc.settextcolor(rgb(255,255,255));

dc.setbkmode(transparent);

dc.textout(0,0,strwintext);}

bool cstaticex::onerasebkgnd(cdc* pdc)

使用GIMP建立透明背景的方法

gimp是乙個跨平台的影象編輯器,您可以更改其 源 並分發 您的更改。無論您是平面設計師,攝影師,插畫家還是科學家,gimp都能為您提供完善的工具來完成您的工作。借助許多自定義選項和第三方外掛程式,您可以使用gimp進一步提高工作效率。步驟 2 然後導航到 層 透明度 新增alpha通道 為影象新增...

背景透明的ListBox(C WinForm)

不知道大家有沒有遇到過這種問題,c 中希望搞乙個背景透明的listbox,且文字居中,卻發現vs裡面自帶的listbox控制項不支援背景透明,怎麼辦?我們可以做乙個自定義控制項,過載裡面的onpaint函式,使listbox支援背景透明 實現背景透明的listbox,且文字居中 編寫人 塗劍凱 pu...

背景透明的ListBox(C WinForm)

不知道大家有沒有遇到過這種問題,c 中希望搞乙個背景透明的listbox,且文字居中,卻發現vs裡面自帶的listbox控制項不支援背景透明,怎麼辦?我們可以做乙個自定義控制項,過載裡面的onpaint函式,使listbox支援背景透明 實現背景透明的listbox,且文字居中 編寫人 塗劍凱 pu...