- 締切済み
リッチエディットの独自描画で文字の位置をそろえたい
リッチエディットのWM_PAINT命令をフックすることで、改行文字を視覚化するプログラムを組んでいるのですが、GetCharPos命令で取得した文字位置の座標は左上隅のものなので、一般のテキスト文字と描画した文字がうまく横並びになりません。また、GetTextExtentでフォントの高さを取得することで、水平位置を調整しようと思ったのですが、フォントの高さとリッチエディットの一行単位の高さが異なるためか、以下のコード例(MFCにて作成)でもやはりきれいに揃いません(文字数制限のため、一部コードを省いています)。 void CRichEditEx::OnDrawFormatChar() { CString strText; GetWindowText(strText); CPoint ptCharL; CClientDC dc(this); //m_foFormatCharは //SetDefaultCharFormat()で登録したフォントと //サイズ・フォント名ともに同一 CFont* pfoOld = dc.SelectObject(&m_foFormatChar); CSize sizChar = dc.GetTextExtent(_T("W")); CRect rectClient; GetRect(&rectClient); int i, iPos = 0; while(iPos != -1){ iPos = strText.Find(_T('\n'), iPos); if(iPos != -1){ ptCharL = GetCharPos(iPos); if(ptCharL.y > rectClient.bottom) break; if(rectClient.PtInRect(ptCharL)){ dc.DrawText(_T("N"), CRect(ptCharL, ptCharL + sizChar), DT_SINGLELINE | DT_VCENTER); } } } フォントの上下余白を含めた高さ、あるいは、リッチテキストの1行単位の高さが取得できれば何とかなると思うのですが、よい方法はございますでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- taka_tetsu
- ベストアンサー率65% (1020/1553)
全部の文字を独自に描画してるんでしたら、SetTextAlignでTA_BASELINEやTA_BOTTOMに配置位置を指定すればいいのでは?