【问题标题】:How can we vertically align text in edit box?我们如何在编辑框中垂直对齐文本?
【发布时间】:2009-05-15 06:14:26
【问题描述】:

我创建了一个编辑框:

m_EditWnd.Create(m_hWnd, rect, NULL, ES_LEFT | ES_AUTOHSCROLL | WS_CHILD |
                                     WS_OVERLAPPED | WS_VISIBLE,
                 WS_EX_CLIENTEDGE | WS_EX_LEFT | WS_EX_LTRREADING);

水平对齐的样式有ES_CENTER,用于水平文本对齐,但是我们可以将文本垂直居中对齐吗?

【问题讨论】:

标签: c++ mfc


【解决方案1】:

我没有足够的声誉来发表评论,所以对于一个非常古老的问题,这里有一个可能有用的 sn-p!

如果您提供WS_BORDER 样式,则文本会根据要求自动垂直居中。由于 OP 使用的是WS_EX_CLIENTEDGE,因此无论如何都会绘制边框,因此添加这种样式应该不是问题。

但是,WS_BORDER | WS_EX_CLIENTEDGE 只能实现“部分”垂直居中。

使用WS_BORDER | WS_EX_STATICEDGE 实现了正确的垂直居中,但显然我们的视觉风格与客户端边缘风格略有不同。对我来说,我可以接受这个小小的权衡,而不是编写一个自定义编辑控件。

【讨论】:

  • 看起来像是对我的问题的回答。
  • 经过实验,我可以看到 WS_EX_STATICEDGE 正在改变边框外观,但它对垂直居中没有任何作用。
【解决方案2】:

我尝试了@Aidan Ryan 的解决方案,稍作调整以避免另一个与 UI 相关的问题。我将“SetWindowPos”移动到 OnNCPaint() 中,并且只调用一次该函数。

【讨论】:

    猜你喜欢
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    相关资源
    最近更新 更多