dポイントプレゼントキャンペーン実施中!

リッチエディットの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行単位の高さが取得できれば何とかなると思うのですが、よい方法はございますでしょうか。

A 回答 (1件)

全部の文字を独自に描画してるんでしたら、SetTextAlignでTA_BASELINEやTA_BOTTOMに配置位置を指定すれば

いいのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!