MFC 多视频播放界面模板--(一)静态文本绘制边框

MFC使用static静态文本控件绘制边框

编译环境 VS2010

1、创建MFC工程,选择基于对话框,为了程序方便,先去除Unicode库

在这里插入图片描述

2、在界面拖出4个静态文本控件,分别用于上、下、左、右四条线

在这里插入图片描述

3、添加CMyStatic类,基于MFC窗体而不是C++,选择基类CStatic

在这里插入图片描述

4、编写CMyStatic类

CMyStatic.h

#pragma once


// CMyStatic

//字体对齐
#define STATIC_ALIGN_LEFT  0
#define STATIC_ALIGN_CENTE 1
#define STATIC_ALIGN_RIGHT 2

class CMyStatic : public CStatic
{
	DECLARE_DYNAMIC(CMyStatic)

public:
	CMyStatic();
	virtual ~CMyStatic();
public:
	afx_msg void OnPaint();

private:
	BOOL m_bBkTransparent;	//透明背景
	BOOL m_bFirst;			
	COLORREF m_BkColor;		//背景颜色
	CString m_strText;		//文本信息
	unsigned int m_uiAlign; //对齐方式

public:
	void SetText(char *ascText);
	void SetBkColor(COLORREF colorBk);
	void SetBkTransparent(BOOL bBkTransparent);

protected:
	DECLARE_MESSAGE_MAP()
};

CMyStatic.cpp

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

#include "stdafx.h"
#include "Videoframe_1.h"
#include "MyStatic.h"


// CMyStatic

IMPLEMENT_DYNAMIC(CMyStatic, CStatic)

CMyStatic::CMyStatic()
{
	m_strText = _T("");
	m_bBkTransparent = TRUE;//默认透明
	m_BkColor = RGB(255, 255, 255);//白色背景
	m_uiAlign = STATIC_ALIGN_LEFT;
	m_bFirst = FALSE;;
}

CMyStatic::~CMyStatic()
{
}


BEGIN_MESSAGE_MAP(CMyStatic, CStatic)
	ON_WM_PAINT()
END_MESSAGE_MAP()



// CMyStatic 消息处理程序

void CMyStatic::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此处添加消息处理程序代码
	// 不为绘图消息调用 CStatic::OnPaint()

	// 取得位置
	CRect rect;
	GetClientRect(rect);

	//字体
	CFont *pDlgFont = GetFont();
	CFont *pCurFont = dc.SelectObject(pDlgFont);

	//设置背景颜色
	if(m_bBkTransparent)
	{
		dc.SetBkMode(TRANSPARENT);
	}
	else
	{        
		dc.FillSolidRect(rect, m_BkColor);
	}

	//判断输出文字
	if(m_strText.GetLength() == 0)
	{
		GetWindowText(m_strText);
	}
	//输出文字
	switch(m_uiAlign)
	{
	case STATIC_ALIGN_LEFT:
		dc.DrawText(m_strText, rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
		break;

	case STATIC_ALIGN_CENTE:
		dc.DrawText(m_strText, rect, DT_CENTER | DT_SINGLELINE | DT_VCENTER);
		break;

	case STATIC_ALIGN_RIGHT:
		dc.DrawText(m_strText, rect, DT_RIGHT | DT_SINGLELINE | DT_VCENTER);
		break;

	default:
		dc.DrawText(m_strText, rect, DT_LEFT | DT_SINGLELINE | DT_VCENTER);
		break;
	}
	// 清除字体
	dc.SelectObject(pCurFont);
}

//设置文本内容
void CMyStatic::SetText(char *ascText)
{
	CString strText(ascText);
	m_strText = strText;
	m_bFirst = TRUE;
	Invalidate();
}

//设置背景颜色
void CMyStatic::SetBkColor(COLORREF colorBk)
{
	m_BkColor = colorBk;
	m_bFirst = TRUE;
	Invalidate();
}
//设置背景透明
void CMyStatic::SetBkTransparent(BOOL bBkTransparent)
{
	m_bBkTransparent = bBkTransparent;
}
5、在窗体界面创建Static静态文本关联变量(注:修改Static的控件ID)

在这里插入图片描述

	CMyStatic m_staLineBottom;
	CMyStatic m_staLineLeft;
	CMyStatic m_staLineRight;
	CMyStatic m_staLineTop;
6、在初始化窗体函数InitDialog,初始化值
BOOL CVideoframe_1Dlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

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

	// TODO: 在此添加额外的初始化代码


	m_staLineLeft.SetBkTransparent(FALSE);
	m_staLineRight.SetBkTransparent(FALSE);
	m_staLineBottom.SetBkTransparent(FALSE);
	m_staLineTop.SetBkTransparent(FALSE);

	m_staLineLeft.SetBkColor(RGB(128, 0, 0));
	m_staLineRight.SetBkColor(RGB(128, 0, 0));
	m_staLineTop.SetBkColor(RGB(128, 0, 0));
	m_staLineBottom.SetBkColor(RGB(128, 0, 0));

	m_staLineLeft.SetText("");
	m_staLineRight.SetText("");
	m_staLineTop.SetText("");
	m_staLineBottom.SetText("");
	//在类中创建此函数
	MoveFrame();
	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CVideoframe_1Dlg::MoveFrame()
{
	//横杠	大小
	_SI siPenWidth = 2;

	//先判断是第几行第几列
	_UI uiWndIndex = 0;		//窗口索引
	_UI uiColIndex = 0;		//纵向
	_UI uiRowIndex = 0;		//横向
	_SI siWndWidth = 160;	//窗体宽
	_SI siWndHeight = 90;	//窗体高度
	_SI siWndLeft = 100;	//X坐标
	_SI siWndTop = 100;		//Y坐标

	m_staLineLeft.MoveWindow(siWndLeft - siPenWidth, 
		siWndTop,  
		siPenWidth, 
		siWndHeight + (siPenWidth*2));

	m_staLineTop.MoveWindow(siWndLeft - siPenWidth,
		siWndTop - siPenWidth,
		siWndWidth + siPenWidth,
		siPenWidth);

	m_staLineRight.MoveWindow(siWndLeft + siWndWidth - siPenWidth ,
		siWndTop,
		siPenWidth,
		siWndHeight + (siPenWidth * 2));

	m_staLineBottom.MoveWindow(siWndLeft - siPenWidth,
		siWndTop + siWndHeight + (siPenWidth*2),
		siWndWidth + siPenWidth,
		siPenWidth);

}
7、最终效果

在这里插入图片描述

目录篇章

源代码在码云Gitee:
https://gitee.com/hi_feng/Videoframe_1

MFC自定义界面HUI,高效简单,含详细注释和示例。 HUI包括基本控件、按钮、标签、编辑框、表格、悬停提示等,可组合出更多功能。资源占用少,效率高,能在低端机上运行,流畅不闪烁,完全满足工控等各种专业软件实现个性化要求。 本资源是“http://download.csdn.net/detail/hhhh63/6961889”的正式发布版。包括3个项目,Hui、HuiDemo1和HuiDemo2。 一、Hui项目 本项目是DLL项目,包括完整的界面库,使用双缓存,局部重画等技术,性能优异。为保证在不同的MFC版本中使用,本次上传提供了这部分的源码,一般不要对其改动。 二、HuiDemo1 简单的应用示例,包括窗口分割,控制面板和主显示区等,展示控件各方向停靠、自动充满、全屏切换、记忆窗口位置和大小、选项设置和保存注册表等功能,用户可直接以此为基础开发新项目。如需扩展其它功能,可从HuiDemo2查找复制相应代码。 三、HuiDemo2 除HuiDemo1的所有功能外,还包括界面库的全部功能和其它实用扩展功能,左中右三栏式分布,左右固定宽度,中间栏大小可变。 1、左边是属性栏,固定宽度,上边是时钟,下边是鼠标信息,当鼠标移到中间的图像区时显示鼠标位置和图像值。 2、中间是图像区,演示如何动态生存索引图像,从下向上移动,自适应大小,长宽比不变,点右边的调色板按钮改变颜色,点保存按钮把当前图像保存到桌面。 3、右边上边是控制栏,在中间的图像区中画各种几何图形,并计算几何图形包围的图像数据的最大值,最小值和平均值。 4、右边下边是表格演示,显示Windows文件夹下的文件列表,自动充满窗口区,随窗口大小改变显示项数,保证界面美观,最下面是搜索和定位功能。 四、运行环境,VC2010或更高版本。 欢迎大家下载并提意见,本资源版权归作者所有,分享供大家研究学心,不得用于商业用途,如有特殊要求请与本人联系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值