MFC静态编辑框如何改变字体的大小

MFC静态编辑框如何改变字体的大小
MFC静态编辑框如何改变字体的大小

MFC编辑框如何改变字体的大小

方法一:

步骤一:在Dlg类中增加一个类成员变量: CFont m_editFont;

注意:这里Font对象必须是类成员变量,不能是局部变量,否则会出现只改变了光标的大小,而不能改变字体的大小。

步骤二:在OnInitDialog方法中增加下列语句:

m_editFont.CreatePointFont(180, "宋体");

m_editPlace.SetFont(&m_editFont); // 设置新字体

方法二:

在OnInitDialog方法中增加下列语句也可以实现:

CFont* ptf=m_editPlace.GetFont(); // 得到原来的字体

LOGFONT lf;

ptf->GetLogFont(&lf);

lf.lfHeight = 20; // 改变字体高度

strcpy (lf.lfFaceName, "隶书"); // 改变字体名称

m_editFont.CreateFontIndirect(&lf);

m_editPlace.SetFont(&m_editFont); // 设置新字体

注意:If是个新的结构体变量,GetLogFont函数是实现将ptf中的LOGFONT结构体变量拷贝给If了,所以改变If不等于是改变ptf中的LOGFONT变量。所以下面必须加这两句来创建新的字体对象

m_editFont.CreateFontIndirect(&lf);

m_editPlace.SetFont(&m_editFont); // 设置新字体

CFont font;

LOGFONT lf;

memset(&lf, 0, sizeof(LOGFONT)); // zero out structure

lf.lfHeight = 12; // request a 12-pixel-height

font

strcpy(lf.lfFaceName, "Arial "); // request a face name "Arial "

VERIFY(font.CreateFontIndirect(&lf)); // create the font

GetDlgItem(XXX)-> SetFont(&font);

下面的例子中,先取得编辑框本身的字体,然后改变其大小(需要注意的是,这种方法下,编辑框本身的字体如果不是TrueType型的话,字体大小的变化不是“连续”的,某些大小值的设定有可能不起作用):

CY ourDlg中增加成员变量CFont m_font; //这个绝对不能使临时变量

BOOL CY ourDlg::OnInitDialog()

{

CDialog::OnInitDialog();

// TODO: Add extra initialization here

CWnd *pEdit = GetDlgItem(IDC_EDIT1);

CFont *pfont = pEdit-> GetFont();

LOGFONT logfont;

pfont-> GetLogFont(&logfont);

logfont.lfHeight = -18;

m_font.CreateFontIndirect(&logfont);

pEdit-> SetFont(&m_font);

return TRUE; // return TRUE unless you set

the focus to a control

// EXCEPTION: OCX Pro perty Pages should return FALSE

}

void CY ourDlg::OnDestroy()

{

CDialog::OnDestroy();

// TODO: Add your message handler code here

m_font.DeleteObject();

}

在OnInitDialog里:

CFont *pSignNameFont;

pSignNameFont = new CFont;

pSignNameFont-> CreateFont(30,20,0,0,150,

FALSE,FALSE,0,

ANSI_CHARSET, OUT_DEFAULT_P RECIS,

CLIP_DEFAULT_PRECIS, DEFAULT _QUALITY,

DEFAULT_PITCH | FF_SWISS, "宋体(TrueType) ");

GetDlgItem(IDC_EDIT2)-> SetFont(pSignNameFont);

LOGFONT lf;

//定义字体结构

lf.lfWeight=10; //字体磅数=10

lf.lfHeight=56; //字体高度56

lf.lfWidth=20; //字体宽度20

lf.lfUnderline=FALSE; //无下划线

lf.lfStrikeOut=FALSE; //无删除线

lf.lfItalic=FALSE; //非斜体

lf.lfEscapement=0;

lf.lfCharSet=DEFAULT_CHARSET; //使用缺省字符集

strcpy(lf.lfFaceName, "宋体"); //字体名=@system

CFont myFont; //定义字体对象

myFont.CreateFontIndirect(&lf); //创建逻辑字体

然后在你需要改的情况下

....-> SetFont(&myFont);

如何更改static控件的字体大小

(2010-04-26 22:21:07)

转载

标签:

分类:C/C++学习

杂谈

你用的如果VC是5.0,5.0要从光盘上拷几个dll

如果是6.0,也许要设置一下。在"工作区"相应的对话宽点右键,属性中有"语言"项,选择"Chinese(P.R.C)"就可以了。

更改字体,首先改变你的static控件的ID,然后

GetDlgItem(IDC_YOURSTATIC)->SetFont(&font);

不支持汉字,可能是没有拷贝appwzchs.dll

[附:控件字体颜色修改相关]

很多人定义了基于MFC的程序项目,当设计界面使用控件时,却不知道如何对各控件进行字体与颜色的设计;其实这些修改是需要动手添加代码的,这方面的修改在控件属性里是没有现成的,这不同于.net定义的项目,它的是有直接属性修改的。

1、改变对话框的底色

在对话框的类中添加一个private : CBrush m_brush;的成员变量。在类的构造函数中添加如下代码:

m_brush.CreateSolidBrush(RGB(0,0,255)); //初始化为蓝色

为对话框添加一个WM_CTLCOLOR消息响应函数,专门为控件着色的消息响应函数,代码如下:

HBRUSH CSettingDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)

{

HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

//return hbr;

return m_brush;

}

当然,.h文件里也要对函数进行预定义的;此时,该对话框的背景色已经全为蓝色了。

2、如果我们要设置某一个对话框控件的底色和文字颜色时只要将上面return m_brush;改为:

if (pWnd->GetDlgCtrlID()==IDC_LINE_STYLE)

{

pDC->SetTextColor(RGB(0,255,0));

//pDC->SetBkMode(TRANSPARENT);

pDC->SetBkColor(RGB(255,0,0));

return m_brush;

}

return hbr;

注意如果要设置单行EDIT的文字背景色,需要使用SetBkColor设置,而SetBkMode即使为透明,文字的背景仍为系统的默认色。按钮控件好像不能实现,大家可以试试,是不是按钮真的不能实现这些颜色变化。

3、利用上面的原理,在对话框控件响应OnPaint消息时,将一个静态文本显示所设置字体的文字。添加一个静态文本框,改名为IDC_TEXT。添加一个字体成员变量private: CFont m_font;在对话框的构造函数中对字体进行初始化:m_font.CreatePointFont(200,"华文行楷");在2的return hbr;之前加入如下代码:

if (pWnd->GetDlgCtrlID()==IDC_TEXT)

{

pDC->SelectObject(&m_font);

}

注意,因为OnPaint消息响应函数是在控件被绘制之前触发的,它所返回的HBRUSH画刷句柄,便携带了我们所设置的这些属性。此时,静态文本框的字体就变为你所需要的那种字体了。

4、如果要改变OK按钮的文字颜色,靠上面的方式是不行的。我们需要创建一个新的从CButton类继承的CTestBtn类,并添加一个类的DrawItem的虚函数,类与虚函数都可以用向导来定义,加入以下代码:

// TODO: Add your code to draw the specified item

UINT uStyle = DFCS_BUTTONPUSH;

// This code only works with buttons.

ASSERT(lpDrawItemStruct->CtlType == ODT_BUTTON);

// If drawing selected, add the pushed style to DrawFrameControl.

if (lpDrawItemStruct->itemState & ODS_SELECTED)

uStyle |= DFCS_PUSHED;

// Draw the button frame.

::DrawFrameControl(lpDrawItemStruct->hDC, &lpDrawItemStruct->rcItem,DFC_BUTTON, uStyle);

// Get the button's text.

CString strText;

GetWindowText(strText);

// Draw the button text using the text color red.

COLORREF crOldColor = ::SetTextColor(lpDrawItemStruct->hDC, RGB(255,0,0));

::DrawText(lpDrawItemStruct->hDC, strText,

strText.GetLength(),&lpDrawItemStruct->rcItem,

DT_SINGLELINE|DT_VCENTER|DT_CENTER);

::SetTextColor(lpDrawItemStruct->hDC, crOldColor);

然后,右键选择OK按钮,用向导创建一个关联的成员变量m_btnTest,从新创建的CTestBtn 类继承。在OK按钮的属性页-〉Styles-〉Owner Draw选中,否则OK按钮仍然继承默认的CButton类。

需要上色的按钮分别都要建关联成员变量与设置Owner Draw属性;另外,如果要设不同的颜色,则分别在代码中修改。

相关主题
相关文档
最新文档