和所有初学者一样,刚开始接触新的东西,总想把画面做的漂亮些,可是在vc中很难做到,比如对话框中按钮等控件的字体设置,就颇费了我一番功夫。
一。做成一个函数,改变字体大小,方法如下:
1。在最开头声明一个全局的字体指针 CFont *my_font=new CFont();//注意初始化,不能为空
2。在需要改变字体的地方调用函数:
set_font(60,my_font,"隶书"); //字体大小、指针、名称
GetDlgItem(IDC_anniu)->SetFont(my_font);//改变字体
3。对与不同的字体,你需要设置不同的字体指针就可以了。
4。注意在退出时要删除字体,否则多次调用出现问题
BOOL CMyDlg::DestroyWindow()
{
if (my_font) my_font->DeleteObject();
return CDialog::DestroyWindow();
}
5。 以下是函设置字体函数的详细内容:
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)//自己使用的提示函数
#define bt(ch) SetWindowText(ch)//自己使用的提示函数
二。改变字体颜色,要加入系统函数
HBRUSH CMyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// return hbr;
switch(nCtlColor)
{
case CTLCOLOR_STATIC://静态文本
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,"测试数据")==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;
}