【MFC基础】01静态文本框Static Text

属性设置

编辑框的属性主要在 Styles 选项卡中设置。重要属性有:

 Multiline :定义该编辑框为多行文本框。
 Number :限定输入的字符只能是数字字符。
 Border :为控件创建边界。
 Read-only :编辑框成为只读的,禁止用户编辑。

常用方法

一、向Static文本添加文本有几下几种方法:

方法1:

CString s("test");
//GetDlgItem()返回的是一个控件句柄,利用这个句柄来访问这个控件
//与之相匹配的是GetDlgItem(IDC_STATIC)->GetWindowTextW(s);
GetDlgItem(IDC_STATIC)->SetWindowTextW(s);

方法2:

//与之相对应的是GetDlgItemText();
SetDlgItemText(IDC_STATIC, _T("test"));  

方法3:

//与之对应的是GetDlgItemInt()
SetDlgItemInt(IDC_STATIC, 10086);

方法4:
把控件和整型变量相关联,注意一下,静态文本框IDC_STATIC是不能直接添加变量的,要把ID改为其它的才行.步骤是右键单击该控件->添加变量

m_intl = 10086;   //控件的整型变量
UpdateData(FALSE);//更新文本框显示新内容

方法5:
把控件和控件变量相关联,添加方法和4差不多

//与之相对应的是m_Static.GetWindowText()
m_Static.SetWindowText(_T("test"));

方法6:

TCHAR buf[] = _T("test");
//向文本框发送消息
::SendMessage(GetDlgItem(IDC_TEXT)->m_hWnd, WM_SETTEXT, sizeof(buf), (LPARAM)buf);

方法7:

TCHAR buf[] = _T("test");
//不用句柄,直接有控件ID就能发送消息
SendDlgItemMessage(IDC_TEXT, WM_SETTEXT, sizeof(buf), (LPARAM)buf);

二、修改静态文本框中文字的颜色、大小、字体

1、如果是要修改文字的颜色,重载OnCtlColor()函数,并在里面修改文字的颜色

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
	// TODO:  在此更改 DC 的任何特性
	int n = pWnd->GetDlgCtrlID();
	if (n == IDC_STATIC_XXX)					//这里的ID就是你自己要设置透明的静态文本框ID
	{
		 pDC->SetTextColor(RGB(255, 0, 0));		//这里的RGB(255, 0, 0)就是你自己要设置的字体颜色
		 return HBRUSH(GetStockObject(HOLLOW_BRUSH));
	}
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}

2、如果是要修改文字的大小、字体,那么需要分2步
(1).在对话框的头文件中,创建CFont m_font,这是对话框的类成员变量;
(2).在OnInitDialog()函数中给m_font创建字体,并用静态文本框的控件设置该创建的字体

XXXDlg对话框头文件:
#pragma once
 
// CXXXDlg 对话框
class CXXXDlg : public CDialogEx
{
// 构造
public:
	CTestDlg(CWnd* pParent = NULL);	// 标准构造函数
// 对话框数据
	enum { IDD = IDD_TEST_DIALOG };
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持
 
// 实现
protected:
	HICON m_hIcon;
	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	CFont m_font;				// 待创建的字体
	CStatic m_static_xxx;		// 为静态文本框控件添加的Control类型的变量(注意:最好统一用ClassWizard来给控件添加变量)
};

XXXDlg对话框源文件的OnInitDialog()函数:
BOOL CXXXDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();
 
	// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标
 
	// TODO: 在此添加额外的初始化代码
	m_font.CreatePointFont(100, _T("楷体"), NULL);		// 100即为文字的大小,_T("楷体")即为文字的字体
	m_static_xxx.SetFont(m_font);						// 设置字体
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

三、对静态文本框的背景实现透明处理:

首先,重载对话框的OnCtlColor()函数,也就是负责控件的颜色绘制
然后,如下所示,指定ID相对应的控件的背景模式为透明

HBRUSH CXXXDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
 
	// TODO:  在此更改 DC 的任何特性
	int n = pWnd->GetDlgCtrlID();
	if (n == IDC_STATIC_XXX)		//这里的ID就是你自己要设置透明的静态文本框ID
	{
		 pDC->SetBkMode(TRANSPARENT);
		 return HBRUSH(GetStockObject(HOLLOW_BRUSH));
	}
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}

四、显示bmp图片文件

//创建CStatic控件

CStatic myStatic;
myStatic.Create(L"", WS_CHILD | WS_VISIBLE | SS_BITMAP |SS_CENTERIMAGE ,CRect(70,145,350,330), this, 10004);

//加载图片

HBITMAP hBitMap = (HBITMAP)::LoadImage(NULL, L"C:\\1.bmp",IMAGE_BITMAP,0,0,LR_VGACOLOR | LR_LOADFROMFILE );
myStatic.SetBitmap(hBitMap);
  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperJun12345

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值