我正在使用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 );
然后,您可以沿着右边界线绘制插入符号。