在有背景的對話方塊中,static控制項的透明顯示是乙個非常普通的問題。
常用的解決辦法可以通過過載onctlcolor函式設定背景透明,再返回乙個空畫刷來解決。
[cpp] view plaincopy
01.if(nctlcolor == ctlcolor_static )
02.但這種方法有乙個弊端:不能動態更新static控制項內容,否則輸出的文字會重疊。
對於動態更新問題的解決辦法就是將控制項背後的對話方塊貼到控制項上來,這樣就可以實現static控制項的動態更新了。
下面將詳敘通過ctransparentstatic類來實現static控制項動態的透明顯示的解決方案,其中在ctransparentstatic類的onpaint函式中實現了動態更新控制項背景(即將將控制項背後的對話方塊貼到控制項上來)。lfbjz.codeplex.com
1、在標頭檔案中為static控制項增加乙個變數(id為idc_static_elapsetime ),並使此變數型別為ctransparentstatic,而不是預設的cstatic
[cpp] view plaincopy
01.ctransparentstatic m_staeelapsetime;
2、在對話方塊的oninitdialog函式中設定此控制項的字型大小和顏色
[cpp] view plaincopy
01.m_staeelapsetime.setfont(&m_font1);
02.m_staeelapsetime.settextcolor(rgb(255,255,0)); //黃色
3、在onctlcolor函式中設定此控制項透明和顏色,並返回乙個空畫刷。
[cpp] view plaincopy
01.if( pwnd ->getdlgctrlid() == idc_static_elapsetime )
02.
注意,第三步必須有,否則動態顯示staeelapsetime控制項內容時,會先繪製windows預設的static控制項,造成控制項閃爍,自己試一下就知道了。
透明顯示原理及其實現
圖示顯示原理 其實,windows中隨處可見的圖示就是乙個透明點陣圖的典型例項。圖示是由兩個單獨的點陣圖組成的。第乙個點陣圖是由黑色 顏色位全為0 背景與彩色圖示圖案組成的,該位圖將與當前螢幕顯示通過異或 xor 操作結合起來,故稱其為xor點陣圖。第二個點陣圖是由白色 顏色位全為1 背景與黑色 顏...
MFC 設定static(標籤)控制項背景透明
1 設定控制項的屬性transparent 為true 2 過載onctlcolor函式 在該函式體中加入以下 if pwnd getdlgctrlid idc x idc device stat為static控制項的id 3 解決重影問題,新增重新整理區域性背景的函式,該函式主要用於單獨重新整理所...
MFC中Static控制項透明,重影,長度問題
做mfc程式設計,static控制項是會經常用到的了,而使static控制項背景透明,以及改變文字的內容 字型 顏色等屬性,都是會比較容易碰到的情況。王道做法當然是繼承cstatic然後過載onpaint 完全自己來畫,這樣能夠獲得最大的靈活性,但就是比較麻煩,像我這種比較懶的,就更喜歡用下面的懶方...