和所有初学者一样,刚开始接触新的东西,总想把画面做的漂亮些,可是在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; } |
|