MFC中修改静态文本框中文字的字体、颜色

假设有一个静态文本框控件,其ID为:IDC_STATIC_XSDJ,且关联一个control类的CStatic类型的变量m_static_xsdj。

设置字体时自然要用到CFont类,下面介绍两种方法,两种方法都要先在头文件中添加一个变量CFont newFont,切记要声明称类的成员变量,不能是局部变量

方法一:

在OnInitDialog()函数中添加代码:

1 newFont.CreatePointFont(160,L"楷体");
2 m_static_xsdj.SetFont(&newFont);

至于代码中的参数问题,自己百度或者参考MSDN吧。

这种方法要自己指定字体,但更多的情况是我们希望在原有字体上进行修改,这就是方法二:

思路是:首先获取原有字体,然后获取其对应的LOGFONT结构体,接着修改该LOGFONT结构体,最后利用修改后的结构体,创建一个新的字体。

方法二:

 

给出代码,依然是写到OnInitDialog 中

CFont* font;
font=m_static_xsdj.GetFont();//获取CFont对象
LOGFONT lf;
font->GetLogFont(&lf);//获取LOGFONT结构体
lf.lfHeight=-26;    //修改字体大小
lf.lfItalic=TRUE;        //倾斜
lf.lfWeight=400;   //修改字体的粗细
newFont.CreateFontIndirectW(&lf);//创建一个新的字体
m_static_xsdj.SetFont(&newFont);

下面是修改静态文本框控件中文本颜色、文本背景颜色、和控件背景颜色。

首先应当明确的是,在那个函数中下手(写代码),答案是OnCtlColor()函数中,这个函数是用于响应WM_CTLCOLOR消息的,当控件需要重绘时会发出这个消息(姑且这么简单理解吧).

说以下这个函数的函数原型:

1 HBRUSH CDlgXSDJ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
2 {
3     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
4     return hbr;
5 }

三个参数:pDC表示与当前控件相关联的设备上下文,pWnd是当前控件的指针,nCtlColor 表示控件的类型,返回值是一个HBRUSH句柄,该句柄用户重绘控件的背景色。

然后说一下SetTextColor()、SetBkColor()、和SetBkMode()三个函数

SetTextColor()函数很明显是设置文本颜色的,而SetBkColor()函数不是用来设置控件背景颜色的,而是用来设置文本背景颜色的(就是包含文本的矩形)、SetBkMode()是用来设定文字背景模式的,参数只有两个选择OPAQUE、TRANSPARENT表示是否透明。

那么控件的背景颜色怎么设置呢?答案是通过返回的HBRUSH句柄。

下面给出一个代码,和运行效果

 1 HBRUSH CDlgXSDJ::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
 2 {
 3     HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
 4     if( IDC_STATIC_XSDJ  ==  pWnd->GetDlgCtrlID())//判断发出消息的空间是否是该静态文本框
 5     {
 6         pDC->SetTextColor(RGB(255,0,0));//设置文本颜色为红色
 7         pDC->SetBkMode(OPAQUE);//设置文本背景模式为透明
 8         pDC->SetBkColor(RGB(0,0,255));//设置文本背景为蓝色
 9         hbr=CreateSolidBrush(RGB(0,255,0));//控件的背景色为绿色
10     }
11     return hbr;//返回用于重绘控件背景的画刷
12 }

转载于:https://www.cnblogs.com/qingergege/p/5147988.html

MFC(Microsoft Foundation Classes),改变一个窗口所有静态文本框字体大小通常涉及到遍历窗口的所有子控件,并检查它们是否是静态文本框(通常是`CStatic`类的实例),然后为这些控件设置新的字体。以下是使用C++在MFC应用程序改变静态文本框字体大小的一种方法: 1. 使用`EnumChildWindows`函数遍历所有子窗口。 2. 对于每个子窗口,使用`IsKindOf`函数检查它是否是`CStatic`类的实例。 3. 如果是,使用`CStatic::SetFont`函数设置新的字体。 这里是一个示例代码片段: ```cpp void ChangeStaticFontSize(HWND hWndParent) { // 创建一个新字体,这里以Arial字体为例,大小为18 LOGFONT lf; memset(&lf, 0, sizeof(LOGFONT)); lf.lfHeight = -MulDiv(18, GetDeviceCaps(GetDC(hWndParent), LOGPIXELSY), 72); // 18 point font size lstrcpy(lf.lfFaceName, _T("Arial")); // 创建字体对象 CFont newFont; newFont.CreateFontIndirect(&lf); // 遍历父窗口的所有子窗口 EnumChildWindows(hWndParent, ChangeFontSizeEnumProc, (LPARAM)&newFont); } // 回调函数,用于枚举子窗口并改变字体大小 BOOL CALLBACK ChangeFontSizeEnumProc(HWND hWnd, LPARAM lParam) { // 获取字体对象 CFont* pFont = (CFont*)lParam; // 检查是否是CStatic控件 if (CWnd::FromHandle(hWnd)->IsKindOf(RUNTIME_CLASS(CStatic))) { // 将新字体应用到静态文本框 CStatic* pStatic = (CStatic*)CWnd::FromHandle(hWnd); pStatic->SetFont(pFont); } return TRUE; // 继续枚举 } ``` 在这段代码,`ChangeStaticFontSize`函数负责创建新字体并开始枚举过程。`ChangeFontSizeEnumProc`是一个回调函数,它会被`EnumChildWindows`调用,用于实际地改变找到的`CStatic`控件的字体大小。 要实际使用这段代码,你需要在一个合适的时机调用`ChangeStaticFontSize`函数,通常是在窗口初始化或响应某些用户操作(如按钮点击)后。注意,此代码假设你已经有一个父窗口句柄`hWndParent`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值