获取给定文本

时间:2016-02-27 17:58:39

标签: windows winapi controls

我需要能够根据我的文本和最大宽度来确定编辑框的大小。 有类似的问题和答案,建议GetTextExtentPoint32DrawTextEx

GetTextExtentPoint32不支持多行编辑控件,因此不适合。

DrawTextEx有点作品,但有时候编辑框比必要的大,而且,更糟糕的是,有时候它太小了。

然后有EM_GETRECTEM_GETMARGINS。我不确定是否应该使用其中之一,或者两者兼而有之。

计算尺寸的最准确方法是什么?它应该更复杂......我宁愿不去阅读Wine或ReactOS的源代码。

感谢。

修改

这是我的代码和一个具体的例子:

bool AutoSizeEditControl(CEdit window, LPCTSTR lpszString, int *pnWidth, int *pnHeight, int nMaxWidth = INT_MAX)
{
    CFontHandle pEdtFont = window.GetFont();
    if(!pEdtFont)
        return false;

    CClientDC oDC{ window };
    CFontHandle pOldFont = oDC.SelectFont(pEdtFont);

    CRect rc{ 0, 0, nMaxWidth, 0 };
    oDC.DrawTextEx((LPTSTR)lpszString, -1, &rc, DT_CALCRECT | DT_EDITCONTROL | DT_WORDBREAK);

    oDC.SelectFont(pOldFont);

    ::AdjustWindowRectEx(&rc, window.GetStyle(), (!(window.GetStyle() & WS_CHILD) && (window.GetMenu() != NULL)), window.GetExStyle());

    UINT nLeftMargin, nRightMargin;
    window.GetMargins(nLeftMargin, nRightMargin);

    if(pnWidth)
        *pnWidth = rc.Width() + nLeftMargin + nRightMargin;

    if(pnHeight)
        *pnHeight = rc.Height();

    return true;
}

我用nMaxWidth = 143和以下文字(下方)调用它,得到nHeight = 153,nWidth = 95.但是这些数字对于文本来说太小了适合,在两个轴上。

文字(两行):

Shopping
https://encrypted.google.com/search?q=winapi+resize+edit+control+to+text+size&source=lnms&tbm=shop&sa=X&ved=0ahUKEwiMyNaWxZjLAhUiLZoKHQcoDqUQ_AUICigE

修改2

我发现DrawTextEx和退出控件的自动换行算法不同。例如,编辑控件包含在?上,DrawTextEx没有。可以做些什么呢?

0 个答案:

没有答案