和所有初學者一樣,剛開始接觸新的東西,總想把畫面做的漂亮些,可是在vc中很難做到,比如對話框中按鈕等控件的字體設置,就頗費了我一番功夫。
一。做成一個函數(shù),改變字體大小,方法如下:
1。在最開頭聲明一個全局的字體指針 CFont *my_font=new CFont();//注意初始化,不能為空
2。在需要改變字體的地方調用函數(shù):
set_font(60,my_font,"隸書"); //字體大小、指針、名稱
GetDlgItem(IDC_anniu)->SetFont(my_font);//改變字體
3。對與不同的字體,你需要設置不同的字體指針就可以了。
4。注意在退出時要刪除字體,否則多次調用出現(xiàn)問題
BOOL CMyDlg::DestroyWindow()
{
if (my_font) my_font->DeleteObject();
return CDialog::DestroyWindow();
}
5。 以下是函設置字體函數(shù)的詳細內容:
void set_font(int height,CFont *font,char *name)
{
// font=new CFont();//不在此,要在外部初始化,否則找不到指針
LOGFONT lf;
lf.lfHeight=20; lf.lfWidth= 0;
lf.lfEscapement=0; lf.lfOrientation= 0;
lf.lfWeight= 760; lf.lfItalic= 0;
lf.lfUnderline =0; lf.lfStrikeOut =0;
lf.lfCharSet =134; lf.lfOutPrecision =3;
lf.lfClipPrecision =2; lf.lfQuality= 1;
lf.lfPitchAndFamily =2; lstrcpy(lf.lfFaceName, "宋體");
lf.lfOutPrecision =OUT_TT_ONLY_PRECIS;//OUT_TT_PRECIS;
lf.lfHeight= height; //字體大小
lstrcpy(lf.lfFaceName, name);//名稱
if (font!=NULL)
{
font->DeleteObject();
font->CreateFontIndirect(&lf);
}
}
#define say(ch) AfxMessageBox(ch)//自己使用的提示函數(shù)
#define bt(ch) SetWindowText(ch)//自己使用的提示函數(shù)
二。改變字體顏色,要加入系統(tǒng)函數(shù)
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// return hbr;
switch(nCtlColor)
{
case CTLCOLOR_STATIC://靜態(tài)文本
TCHAR lpszClassName[255];
GetClassName(pWnd->m_hWnd, lpszClassName, 255);
if(_tcscmp(lpszClassName, TRACKBAR_CLASS) == 0)//類名是拉動條
return CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
else if (IDC_tishi==pWnd->GetDlgCtrlID())//指定的控件ID提示
{
pDC ->SetTextColor(RGB(255,100,100));//RGB(100,255,100)
return hbr;
}
else
{
pWnd->GetWindowText(ch,40);
if ( strcmp(ch,"測試數(shù)據(jù)")==0 )//指定的標題
{
pDC ->SetTextColor(RGB(255,0,200));
return hbr;
}
pDC->SetBkColor(RGB(255,255,255));
return hbr;//(HBRUSH) GetStockObject(HOLLOW_BRUSH);
}
}
break;
case CTLCOLOR_BTN://按鈕,好象不行
// pDC ->SetBkMode(OPAQUE);//背景不透明
// pDC->SetBkMode(TRANSPARENT);//背景透明
// say("button");
CString str;
//owen draw //注意,右擊按鈕屬性改為自繪式
pWnd->GetWindowText(str); //得到標題內容
RECT rect;
pWnd->GetClientRect(&rect);//得到矩形范圍大小
pDC->SelectStockObject(BLACK_PEN);
pDC->Rectangle(&rect);//黑筆畫外邊矩形
rect.left+=2;rect.top+=2;
rect.right-=2 ;rect.bottom-=2;
pDC->SelectStockObject(WHITE_PEN);
pDC->Rectangle(&rect);//白筆畫內矩形
pDC->SelectObject(font);//選擇字體,大小
pDC->SetTextColor(RGB(0,255,0)); //字體得前景顏色
pDC->SetBkColor(RGB(255,0,255)); //字體的背景顏色
pDC->DrawText(str, &rect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
return (HBRUSH) GetStockObject(HOLLOW_BRUSH);
break;
case CTLCOLOR_EDIT://編輯框
pDC ->SetTextColor(RGB(255,0,0));//文本顏色
pDC ->SetBkColor(RGB(255,255,255));//文本背景
break;
case CTLCOLOR_LISTBOX://列表框
// pDC ->SetTextColor(RGB(255,255,0));
// pDC ->SetBkColor(RGB(160,60,0));
break;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}