多功能標籤CLabelEx

2021-03-31 08:56:30 字數 1689 閱讀 3035

多功能標籤clabelex

引言

做使用者介面的時候經常要用到一些靜態文字控制項,顯示一些文字資訊,但是 mfc 提供的 cstatic類的功能過於簡單,無法滿足高階需求。為此我從 cstatic 派生了乙個類 clabelex,擴充套件了cstatic。第一次投稿,水平不足請大家見諒。我從 vckbase.*** 學到了很多很多東西 ,該是我回報的時候了。

一、功能簡介

新增的功能主要有:

4、邊框和背景

可以設定/取消邊框,指定邊框顏色;設定背景色,並填充整個標籤

二、實現原理

1、其實就是在onpaint()裡畫出各種效果:

void clabelex::onpaint() 

///貼背景圖

if(m_bclicked && m_clickedbgbm.getsafehandle()!=null)

else if(m_bover && m_mouseoverbgbm.getsafehandle()!=null)//滑鼠經過的時候

else if(m_bgbm.getsafehandle()!=null)

///貼標籤

if(m_bclicked && m_clickedlabelbm.getsafehandle()!=null)

else if(m_bover && m_mouseoverlabelbm.getsafehandle()!=null)

else if(m_labelbm.getsafehandle()!=null)

else

///輸出文字

textmetric tm;

dc.gettextmetrics(&tm);

cstring strtext;

this->getwindowtext(strtext);

ntexttop=rect.top+(rect.height()-tm.tmheight)/2;

if(strtext.getlength()>0)

///畫下劃線

if(m_bunderline)

}

注:對字型加下劃線我沒有使用直接設定字型下劃線的方法,因為我覺得那樣不好看,呵呵

2、感應滑鼠用的方法如下所示:

在mousemove裡setcapture()和releasecapture();

void clabelex::onmousemove(uint nflags, cpoint point) 

if(m_bhighlight) //自動高亮

redrawwindow();

releasecapture();

return;

}

}

else // cursor has just moved over control

if(m_bhighlight)

redrawwindow();

setcapture();

::setcursor(m_hhandcur);

}

cstatic::onmousemove(nflags, point);

}

:這種方法簡單方便,但是有乙個問題,看附帶的工程,單擊label1彈出乙個對話方塊後label1無法恢復原狀。我一直沒解決這個問題.若誰知道請告知我 querw@sina.***

多功能閥知識

何謂多功能水幫浦控制閥?水幫浦有什麼執行特性需要閥門來控制?水幫浦控制閥能否實現這些控制?以及它與傳統的閘閥 蝶閥 止回閥以及勻速 雙速緩閉 的水力控制止回閥在原理 功能等方面有什麼質的不同,筆者在本文中以活塞式多功能水幫浦控 制閥 下稱控制閥 為例,通過對其結構 主要功能 工作原理的剖析,提出對上...

多功能鍊錶

此鍊錶具有stringbuffer,hashtab,list,vector 的功能 ifndef list define list include stdbool.h struct item struct list define push fl empty 0 define push fl data...

多功能輸入法

多功能輸入法 前端介面模組設計與實現 摘要隨著輸入法的發展,輸入法的外觀變得越來越美麗。由於使用者的使用習慣各不相同,為了滿足大多數的人的使用習慣,輸入法發展了新的方式,這方式不但增強了輸入法前端介面,而且憑藉photoshop的強大影象處理技術,為輸入法外觀增添了很多元素。本 主要介紹狀態視窗 編...