Windows API SetTextAlign之我所见

本文探讨Windows程序设计中,使用SetTextAlign控制文本对齐的原理和实践。通过实例分析,揭示了SetTextAlign如何影响文本输出,以及如何正确设置锚点实现文本对齐。通过实验,展示了不同设置下文本对齐的效果,加深了对SetTextAlign函数的理解。
摘要由CSDN通过智能技术生成

一、积重难返!

  • 无论你有没有意识到,在Windows程序设计中,在消息WM_PAINT中输出文本的时,在使用SetTextAlign函数来控制文本对齐的时候,总会有些别扭,说的更直白些是对SetTextAlign函数如何控制文本对齐的原理感到疑惑。有时候为了试图搞清楚其这种控制对齐的原理,我们不惜把SetTextAlign的参数改来改去,但却造成了更多的疑惑:为何第一行总和之后的行格式不一样?为何整整少了一列?为何我改了参数什么事情都没有发生?是我眼睛花了吗(没准这是事实,你可能很快就可以意识到)?
  • 于是我们决定跳过这个陷阱,暂且不管“文本对齐”这档子事,不过不久就会发现,在窗口的客户区对文本的输出操作实在过于频繁,每一次我们都得承受这种疑惑带来的苦恼,甚至让我们感到羞耻。终于我们打算直面这个问题,下面我们一起来找些灵感。

二、正式开始前的准备…

  • 我们首先需要引用一段经典的代码段来作为下面讨论的基础,下面这段代码引自大师Petzold的著作《Windows程序设计》4.2.10节的SYSMETS1.C源码:
//
// WinMain函数定义
// 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
   
	// 
	// 窗口类定义
	// 注册窗口类
	// 创建并更新窗口
	// 进入消息循环
	// 其他细节...
	//
	return msg.wParam;
}

//
// 窗口过程函数定义
//
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
   
	static int		cxChar, cxCaps, cyChar;
	HDC				hdc;
	int				i;
	PAINTSTRUCT		ps;
	TCHAR			szBuffer[10];
	TEXTMETRIC		tm;

	switch (message) {
   
	// 创建窗口(初始化)消息处理
	... 省略 ...
	
	// 绘制客户区消息处理
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);

		for (i = 0; i < NUMLINES
  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值