讓單行編輯框文字垂直居中,可以有多種方法:
(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...