MFC文本输出学习

cpp 复制代码
void CTxttstView::OnDraw(CDC* pDC)
{
	CTxttstDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	CString str1;
	
	pDC->SetBkColor(RGB(0,0,0));
	pDC->TextOut(50, 50, "一段文字");
	pDC->SetBkColor(RGB(255,255,255));
	pDC->TextOut(150, 50, "一段文字");
	pDC->SetBkColor(RGB(0,128,0));
	pDC->TextOut(250, 50, "一段文字");
	pDC->SetBkColor(RGB(0,160,0));
	pDC->TextOut(450, 50, "测试一段文字测试AAAAAAA");


	pDC->SetBkColor(RGB(0,180,0));
	pDC->TextOut(50, 80, "一段文字2", 4);

	pDC->SetTextAlign(TA_LEFT);
	pDC->SetBkColor(RGB(0,180,0));
	pDC->TextOut(50, 110, "一段文字3");

	CRect r1(50,150,200,200);
	pDC->Rectangle(r1);
	pDC->DrawText("一段文字d", r1, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
	
	CRect r2(50,210,200,260);
	pDC->Rectangle(r2);
	pDC->DrawText("一段文字d", r2, DT_SINGLELINE | DT_LEFT | DT_VCENTER);

	CRect r3(50,270,200,320);
	pDC->Rectangle(r3);
	pDC->DrawText("一段文字d", r3, DT_SINGLELINE | DT_RIGHT | DT_VCENTER);

	int iArray[] = {100,200,300,400,500};
	pDC->TabbedTextOut(10,340,TEXT("测试\t中文\t你好\t汉字\t在这\t里!"),-1,5,iArray,0);
	pDC->TextOut(10, 360, TEXT("测试\t中文\t你好\t汉字\t在这\t里!"));
	int iArray2[] = {10,20,30,40,50};
	pDC->TabbedTextOut(10,380,TEXT("测试\t中文\t你好\t汉字\t在这\t里!"),-1,5,iArray2,0);
	
}

获取了CDC类指针之后可以设置一些属性,再输出文字;

SetBkColor(RGB(0,0,0)),这样设置文本输出背景色;对于TextOut来说设置背景的区域和输出文字的区域一样大小;

TextOut一般用前3个参数,x坐标、y坐标、输出的文字,也可以使用第4个参数,输出多少个字符;pDC->TextOut(50, 80, "一段文字2", 4),一个汉字是2个字符,这只输出了"一段";

SetTextAlign,设置文本对齐方式,对于TextOut没有什么效果;

DrawText在一个矩形内输出文字,第一个参数是要输出的文字,第二个参数是一个矩形,第三个参数是文字对齐等一些属性;图中的矩形是额外画的,为了看到DrawText效果;第二个参数如果是用CRect类定义的,CRect r1(50,150,200,200) 这样,直接传递r1就可;

TabbedTextOut 函数在指定位置写入字符串,将制表符扩展到制表位位置数组中指定的值;

我还不太理解此函数;

pDC->TabbedTextOut(10,340,TEXT("测试\t中文\t你好\t汉字\t在这\t里!"),-1,5,iArray,0);

头2个参数是x和y坐标,第三个参数是要输出的文字,可以包含制表符\t;后一个参数是要输出的文字长度,-1表示全部输出;此函数需要一个整型数组作为参数,再后一个参数是数组中的值数,再后一个参数是数组的指针;

根据文档,数组是制表位位置(以逻辑单元为单位)的数组; 制表位必须按升序排列,最小的 x 值应该是数组中的第一项;

最后一个参数是展开制表符的起始位置的 x 坐标(以逻辑单元为单位);

从效果看制表符对TextOut无效;传2个不同数组的效果如图;

另外还有一个ExtTextOut函数是在TextOut的基础上增加了字符间距、背景颜色和裁剪框进行控制;有时间再看;

相关推荐
码匠许师傅2 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
小小龙学IT4 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
知无不研5 小时前
lambda表达式的使用(3)
开发语言·c++·lambda
C++ 老炮儿的技术栈7 小时前
基于Qt实现轻量化本地音乐播放器
开发语言·c++·qt·c·播放器·音乐
qz_Serene9 小时前
C++:类和对象(上)
开发语言·c++
郝学胜-神的一滴10 小时前
干货版《算法导论》17:二叉树核心原理、遍历逻辑与高阶实操全解
数据结构·c++·python·算法·计算机·编程
hetao173383711 小时前
2026-08-09~08-14 hetao1733837 的刷题记录
c++·算法
间歇性努力持续性发呆的野生快乐选手13 小时前
栈的性质(进栈,出栈,访问)
数据结构·c++
旖旎夜光14 小时前
LeetCode 904:水果成篮(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
hansang_IR14 小时前
【题解】P14468 [COCI 2025/2026 #1] 和谐 / Harmonija(线段树 DDP 版本)
c++·算法·动态dp