MFC基本控件-静态文本的使用

发布于:2023-01-20 ⋅ 阅读:(530) ⋅ 点赞:(0)

        MFC的基本空控件可以帮助大家快速做出一个可视化界面, 下面我将使用一个常见的采集表, 为大家说明常用基本控件的使用方法。 首先从最简单的静态文本开始。

        环境:VS2019

目录

一.基本使用

二.链接使用

三.风格设置

首先新建一个风格类的实例化对象

第二步在主窗口的cpp文件中初始化

 设置字体颜色


        静态文本一般用于标识信息, 和代码中的注释类似。下面请看基本使用的举例:

一.基本使用

        首先在窗口上放置了六个控件, 默认为“static”的就是静态文本, 左键单击就可以修改默认值, 如图:

        这就是静态文本的基本使用, 用来标识后面需要输入的内容。

二.链接使用

        如果只是用来标识,那未免有点单调, 我们有时还希望文本是个超链接, 可以帮我们链接到网页。我们添加一个为"www.baidu.com"的静态文本, 右击选择类向导, 如图:

        我们的思路是添加一个类, 继承原本的CStatic类, 在继承的类中实现我们的链接功能,如图选择添加MFC类:

         取号类名, 基类选择CStatic, 继承原本的静态文本类, 如图:

         下面是代码实现, 我会在其中添加注释, 方便理解:

#pragma once
// CMyStatic
//这里是CMyStatic.h 继承类的头文件
class CMyStatic : public CStatic
{
	DECLARE_DYNAMIC(CMyStatic)

public:
	CMyStatic();
	virtual ~CMyStatic();

	void ClickLink(bool setLink);//自己写一个链接函数

protected:
	DECLARE_MESSAGE_MAP()
};

         我们再次来到类向导, 在CMyStatic类的的消息中找到左键单击消息,双击,点击应用和确定, 如图:

         此时你会在CMyStatic.cpp中得到一个左键单击的处理函数,, 下面是CMyStatic.cpp文件的代码:

// CMyStatic.cpp: 实现文件
//

#include "pch.h"
#include "class05.h"
#include "CMyStatic.h"


// CMyStatic

IMPLEMENT_DYNAMIC(CMyStatic, CStatic)

CMyStatic::CMyStatic()
{

}

CMyStatic::~CMyStatic()
{
}

//我们定义了一个setLink类型的bool变量, 使得我们可以修改文字是否可以被点击
void CMyStatic::ClickLink(bool setLink)
{
	if (setLink == true)
	{
		ModifyStyle(0,//窗口风格修改, 从0修改为SS_NOTIFY
			SS_NOTIFY);//窗口可以被点击
	}
	else
	{
		ModifyStyle(SS_NOTIFY,
			0);
	}
}


BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()



// CMyStatic 消息处理程序
void CMyStatic::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CString str; //定义一个宽字节字符
	GetWindowText(str); //获取窗口文字, 这里获取的是静态文本文字

	ShellExecute(NULL, L"open", str, NULL, NULL,
		SW_NORMAL);//normal表示正常大小
	CStatic::OnLButtonDown(nFlags, point);
}

        接下来, 将链接文本实例化为一个类对象, 首先修改Id(记住一定要改id),右下角修改默认Id:

        然后再右击文本点击添加变量。这里我已经添加过,所以是灰色的,给变量取名为"baiduLInk_Static" 如图:

        变量会被实例化在主窗口的头文件中, 将继承类的头文件导入再把CStatic改为新的类名, 请看代码:

// class05Dlg.h: 头文件
//

#pragma once
#include"CMyStatic.h"//包含新类型的头文件

// Cclass05Dlg 对话框
class Cclass05Dlg : public CDialogEx
{
// 构造
public:
	Cclass05Dlg(CWnd* pParent = nullptr);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum { IDD = IDD_CLASS05_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	 
	 CMyStatic baiduLInk_Static;//实例化对象, 改类型名
};

        最后在主窗口的cpp文件中, 在OnInitDialog函数中初始化参量, 将setLink设置为真, 代码如下:

// Cclass05Dlg 消息处理程序

BOOL Cclass05Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	baiduLInk_Static.ClickLink(true);

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

三.风格设置

        接下来是静态文本的风格设置, 比如颜色, 大小等等, 话不多说直接上代码:

首先新建一个风格类的实例化对象

第二步在主窗口的cpp文件中初始化

BOOL Cclass05Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != nullptr)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	baiduLInk_Static.ClickLink(true);

	//初始化风格
	CFont* font;
	font = baiduLInk_Static.GetFont();//获取链接文本的字体对象
	LOGFONT lf;
	font->GetLogFont(&lf);//获取logfont结构体
	lf.lfHeight = 26;//大小
	lf.lfWeight = 500;//粗细
	lf.lfUnderline = true;
	lf.lfItalic = true;//斜体
	newFont.CreateFontIndirectW(&lf);//创建新字体
	baiduLInk_Static.SetFont(&newFont);//设置文本字体
	

	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

效果如图:

 设置字体颜色

在主窗口的类向导中找到WM_CTLCOLOR消息 , 这是绘制控件消息:

将消息双击生成处理函数,代码如下:

HBRUSH Cclass05Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
	HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);

	// TODO:  在此更改 DC 的任何特性
	if (pWnd->GetDlgCtrlID() == IDC_STATIC_Link)
	{
		pDC->SetTextColor(RGB(255, 0, 0));//颜色
		pDC->SetBkColor(TRANSPARENT);//透明背景
	}
	// TODO:  如果默认的不是所需画笔,则返回另一个画笔
	return hbr;
}

总结:

        以上就是MFC静态文本的基本使用方法, 有问题欢迎交流。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到