使用VC自繪美化通用控制項

2021-04-17 04:23:07 字數 1653 閱讀 5617

在vc60中新建乙個對話方塊工程,新增乙個新類,根據你要美化的控制項選擇對應的基類,如我要美化static控制項,就選擇cstatic做為基類,新類名為cstaticex。

在新類中新增兩個類成員變數,乙個為控制項的背景色,乙個為文字的顏色:

private:

colorref m_backcolor;

colorref m_textcolor;

在建構函式中對這兩個變數進行初始化,我初始化為黑底白字

m_backcolor=rgb(0,0,0);

m_textcolor=rgb(255,255,255);

為cstaticex加入wm_paint訊息,在wm_paint訊息處理函式onpaint中加入美化控制項的**

cpaintdc dc(this); // device context for painting

cdc memdc;

cbrush m_brush,*m_oldbrush;

cbitmap bitmap;

crect rect;

cstring strwindowtext;

int x,y;

csize size;

//得到區域

getclientrect(&rect);

//得到文字

this->getwindowtext(strwindowtext);

//建立相容的記憶體位圖控制代碼

memdc.createcompatibledc(&dc); 

bitmap.createcompatiblebitmap(&dc, rect.width(), rect.height());

memdc.selectobject( &bitmap );

//得到文字尺寸

size=memdc.gettextextent(strwindowtext);

//建立畫刷,畫背景色

m_brush.createsolidbrush(m_backcolor);

m_oldbrush=memdc.selectobject(&m_brush);

memdc.fillrect(&rect,&m_brush);

memdc.selectobject(m_oldbrush);

m_brush.deleteobject();

//文字

y=rect.top;

x=rect.right/2-size.cx/2 ;

memdc.setbkcolor(m_backcolor);

memdc.settextcolor(m_textcolor);

memdc.textout(x,y,strwindowtext);  

//畫圖

dc.bitblt(rect.left, rect.top, rect.width(), rect.height(), &memdc, rect.left, rect.top, srccopy);

}在對話方塊上新增乙個static控制項,命名為idc_statictest,為其新增乙個成員變數cstatic m_statictest;

將cstaticex類的標頭檔案新增到對話方塊類的標頭檔案中;

將cstatic m_statictest

更改為cstaticex m_statictest;

編譯,執行就可以看到效果了!

自繪GroupBox控制項

下面顯示的是效果圖 然後是 其中有一些解釋 using system using system.collections.generic using system.componentmodel using system.diagnostics using system.text using syste...

MFC自繪控制項

1.c 中drawitem 函式不被呼叫的問題 自繪乙個cmybutton的時候,在drawitem 中改變了button的顏色,但是在程式執行時,drawitem 函式並沒有被執行,原因在於按鈕的型別並不是bs ownerdraw,所以我們需要把它改為 所有者繪製 解決方法 可以過載乙個presu...

MFC Button控制項自繪

vc下的介面著實難看 有時候我們不得不自己進行控制項的繪製 以前 一直不理解最近再次看了學了一遍終於明白了一點 與大家分享下.需要源 的q我 尋找一起學vc的朋友 比如說我們要改變乙個編輯框的背景 我們響應wm ctlcolor函式 進行onctlcolor進行修改但是對與 button控制項就不行...