gpt4 book ai didi

c++ - 在窗口中垂直居中多行文本,纯 winapi 和 c++

转载 作者:行者123 更新时间:2023-11-28 03:14:33 25 4
gpt4 key购买 nike

我有一个窗口需要根据需要重绘多行文本,文本可以是可变长度的。那么该怎么做呢?

这是我目前拥有的,但它不起作用。

               RECT rc;

GetWindowRect ( hwnd, &rc );



int rectHeight = DrawText( hMemDc, text.c_str(), text.size(), &rc, DT_CALCRECT ); // Get formating rectangle height


int windowHight = rc.bottom - rc.top;
int windowWidth = rc.right - rc.left;


int yTop = rc.top + ( ( windowHight - rectHeight ) / 2 );
int yBottom = yTop + rectHeight;

int xLeft = rc.left + 20;
int xRight = rc.right - 20;


rc.top = yTop;
rc.bottom = yBottom;
rc.left = xLeft;
rc.right = xRight;


DrawText( hMemDc, text.c_str(), text.size(), &rc, DT_LEFT | DT_WORDBREAK );

最佳答案

您的代码中有两个问题。首先,您需要在 DT_CALCRECT 调用中指定 DT_WORDBREAK,否则它不会换行文本以适应可用宽度。

int rectHeight = DrawText( hMemDc, text.c_str(), text.size(), &rc,
DT_CALCRECT|DT_WORDBREAK );

其次,DT_CALCRECT 调用将用计算出的矩形覆盖 rc 变量,因此您的窗口高度将是错误的,您的居中将不起作用。在调用 DT_CALCRECT 之前保存 rc 变量,或者之后再次调用 GetWindowRect

GetWindowRect ( hwnd, &rc );

关于c++ - 在窗口中垂直居中多行文本,纯 winapi 和 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17337586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com