VC 編輯框垂直居中和字型顏色設定

2021-06-17 18:19:50 字數 2016 閱讀 5125

讓單行編輯框文字垂直居中,可以有多種方法:

(1)將文字框樣式重設為多行文字框,然後通過訊息

em_setrect

設定,這比較簡單和快速;

(2)重繪編輯框的區域,特別是頂部區域,擴大它,讓區域的擴充套件襯托出文字的居中;

(3)直接改變字型和編輯框高度,讓他們相適應,也可以顯示出文字框垂直居中效果;

(4)完全重繪編輯框,這樣的自定製是最好的了,但這個工作繁重;

(5)把編輯框中可輸入文字的區域移到編輯框區域的垂直中部,這樣也可以達到目的。

每種方法各有優劣,本文介紹的是最後一種方法,雖取巧,但這也算得上是真正意義上

的垂直居中。

重寫了類,繼承自cedit,可以使vc編輯框文字垂直居中,另外也實現了顏色和背景色的設定,效果如下:

有了這個類,其他的很多效果就可以自己去擴充套件了。擴充套件類響應了兩個訊息,wm_nccalcsize用來改變編輯框文字區域的位置,=wm_ctlcolor用來設定編輯框的顯示特性。

該效果的實現主要是在wm_nccalcsize訊息的響應函式onnccalcsize中,根據所設定的字型計算文字高寬畫素值,然後再設定引數lpncsp->rgrc[0].top的值。**如下:

void cvedit::onnccalcsize(bool bcalcvalidrects, nccalcsize_params* lpncsp)

// 用來計算的樣本資料

cstring cstest = _t("編輯框vcenteralign");

size sz;

// 建立dc,設定參照計算的字型

cdc* pdc = getdc();

cfont* poldfont = pdc->selectobject(m_pfont);

// 計算 m_font 字型的字元高寬

gettextextentpoint32(pdc->getsafehdc(), cstest, cstest.getlength(), &sz);

pdc->selectobject(poldfont);

// 編輯框的上下左右邊框,預設各為2畫素,下面的高度計算中需要減去上下邊框高度

int nframe = 2*2;

// 編輯框預設可編輯區頂部也有1個畫素邊框

int ntexttopframe = 1;

double dtemp = (lpncsp->rgrc[0].bottom-lpncsp->rgrc[0].top-sz.cy-nframe)/2.0 ;

if(dtemp>(int)dtemp)

dtemp = (double)( (int)dtemp+1 );

int nborder = (int)dtemp -ntexttopframe;

if(nborder<0)

nborder = 0;

lpncsp->rgrc[0].top += nborder;

//lpncsp[0].rgrc->bottom = lpncsp[0].rgrc->top + sz.cy + nborder;

cedit::onnccalcsize(bcalcvalidrects, lpncsp);

}

不過當設定了字型後,需要更新視窗才能觸發 wm_nccalcsize 訊息,在重建字型的函式中(在設定字型函式中被呼叫),用了movewindow來觸發它,值得注意的是,此時視窗尺寸必須有變化才行。

void cvedit::setfonthelper()

通過上面的操作後,便可以讓編輯框文字輸出的左上角座標定位到編輯框垂直中部,但此時編輯框的背景已分離成了幾塊,所以需要重繪背景,drawbkandframe函式作此工作,邊框也可以再次繪製,例中未繪。

此類還提供了設定字型樣式的介面,包括加粗、傾斜、下劃線,這些簡單的擴充套件不再解釋,可參考源**。

單行編輯框文字垂直居中(包含計算字型高度)

單行編輯框文字垂直居中 包含計算字型高度 1.屬性設為多行,不接收換行,然後計算中間位置,使用setrect設定到文字位置 注意onsize還要處理 可在create oncreate presubclass裡處理 2.響應wm nccalcsize修改客戶區居中,通過獲取字型高度計算 cpp vi...

MFC改變編輯框背景 字型 顏色等

1。長度限制 oninitdialog 中 m edit1.setlimittext 8 m edit1為編輯框的成員變數 或者cedit pedt cedit getdlgitem idc edit1 pedt setlimittext 8 限制編輯框輸入長度為8位元組 2。漢字判斷 方法一 cs...

VC 之控制項之改變編輯框內字型顏色

新增組框 單選按鈕 編輯框 新增類內變數colour 新增m edit m csedit變數 新增wm ctlcolor訊息的響應函式 新增單選按鈕的響應函式 於初始化函式內 新增編輯框之 三 hbrush cmydlg onctlcolor cdc pdc,cwnd pwnd,uint nctlc...