如何获取wxTextCtrl中当前字体下文本的像素wxSize用于初始化?
获取wxWidgets中文本显示所需的像素尺寸
- 直接利用控件自身方法计算
对于wxWindow派生的任意控件(如wxStaticText、wxButton等),可直接调用GetTextExtent()方法,它会基于控件当前选中的字体,返回文本完整显示所需的宽高像素值。示例代码:
wxString displayText = "要显示的目标文本"; int textWidth, textHeight; yourControl->GetTextExtent(displayText, &textWidth, &textHeight); wxSize requiredSize(textWidth, textHeight);
- 未创建控件时的初始化计算
如果处于控件初始化阶段、还未完成控件创建,可临时创建wxClientDC关联到父窗口,设置好目标字体后调用GetTextExtent():
wxString initText = "初始化显示文本"; wxFont targetFont = ...; // 你选中的字体对象 wxClientDC tempDC(parentWindow); tempDC.SetFont(targetFont); int w, h; tempDC.GetTextExtent(initText, &w, &h); wxSize textSize(w, h);
- 应用到
SetInitialSize和SetMinSize
拿到计算出的尺寸后,直接传入即可。若控件需要保留默认内边距(如按钮的边框留白),可在文本尺寸基础上添加对应padding值:
wxSize textSize = ...; // 计算得到的文本尺寸 wxSize controlSize = textSize + wxSize(12, 8); // 添加上下左右内边距 yourControl->SetInitialSize(controlSize); yourControl->SetMinSize(controlSize);
另外,部分控件(如wxStaticText)的GetBestSize()方法会自动基于当前文本和字体计算适配尺寸,直接调用yourControl->SetInitialSize(yourControl->GetBestSize())也能满足需求。
内容的提问来源于stack exchange,提问作者Rumburak
相关产品推荐
相关产品推荐

