我正在使用Direct2D从文本布局开始渲染文本

HRESULT hr = m_spWriteFactory->CreateTextLayout(
        m_wsText.c_str( ),
        m_wsText.length( ),
        m_spWriteTextFormat.Get( ),
        m_rect.right - m_rect.left - m_spacing.right - m_spacing.left,
        m_rect.bottom - m_rect.top - m_spacing.top - m_spacing.bottom,
        &m_spTextLayout
        );

然后将其渲染为位图,以后再与Direct3D一起使用
m_sp2DDeviceContext->DrawTextLayout(
                D2D1::Point2F( m_spacing.left, m_spacing.top ),
                m_spTextLayout.Get( ),
                m_spTextBrush.Get( )
                );

我想画一条简单的细线作为插入符号。我知道如何绘制线条以及如何使其显示/消失。

问题:如何获取插入符号线的起点和终点坐标?

简化:如果假设文本仅包含一行要容易得多,那就可以了。但是,当然可以理解一个更通用的解决方案。

最佳答案

您可以通过IDWriteTextLayout::GetMetrics获得布局的边界矩形。

    DWRITE_TEXT_METRICS textMetrics;
    textLayout->GetMetrics(&textMetrics);

你的矩形是
    D2D1::RectF( textMetrics.left,
                 textMetrics.top,
                 textMetrics.left + textMetrics.width,
                 textMetrics.top + textMetrics.height );

然后,您可以沿着右边界线绘制插入符号。

10-08 05:21