Win32 学习笔记 编辑控件文本显示垂直居中的方法

一般创建单行编辑控件后,文本显示都是靠上方显示的:
在这里插入图片描述
查了好多资料,最后得出单行编辑控件要想文本显示在垂直居中只有重绘了,
这就要控件子类化,

今天我在查看编辑控件消息是发现了.EM_SETRECT这个消息,

EM_SETRECT消息

设置多行编辑控件 的格式矩形 。 格式设置矩形是控件在其中绘制文本的限制矩形。 限制矩形与编辑控件窗口的大小无关。

此消息仅由多行编辑控件处理。 可以将此消息发送到编辑控件或富编辑控件。

所以就想,既然单行不行,就创建多行的样式嘛,干嘛非要创建单行呢
于是:

HINSTANCE hInstance = GetModuleHandle(NULL);

	HWND hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
		TEXT("Edit"), nullptr,
		WS_VISIBLE | WS_CHILD | ES_MULTILINE | ES_LEFT | ES_AUTOHSCROLL,
		10, 10, 200, 30,
		hWnd, (HMENU)1001,hInstance , 0);

这样创建出来还是单行编辑控件一样的外观嘛.
在这里插入图片描述
在发关EM_SETRECT消息

RECT rcEdit;
	GetClientRect(hEdit, &rcEdit); //获得编辑控件客服区大小
	OffsetRect(&rcEdit, 2, 4);	//向右偏移2,向下偏移4个像素
	SendMessage(hEdit, EM_SETRECT, 0, (LPARAM)&rcEdit);//设置文本显示的矩形区域

没设置的效果
在这里插入图片描述
设置后的效果
在这里插入图片描述
这样就得到文本垂直居中的效果

这样虽然得到想相的效果,但是有点就是在WM_SIZE中移动控件后,
控件重绘后又回到以前的显示位置,
所以要在控件移动后才重新设置文本显示矩形区域位置

HWND hEdit = GetDlgItem(hWnd, 1001);
	MoveWindow(hEdit, 10, 10, 300, 30, 1);
	
	RECT rcEdit;
	GetClientRect(hEdit, &rcEdit);
	OffsetRect(&rcEdit, 2, 4);
	SendMessage(hEdit, EM_SETRECT, 0, (LPARAM)&rcEdit);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值