現在、MFCを使用するプロジェクトで、GDIのDrawText()で描画していたものを、
GDI+のDrawString()に置き換えられるか調べています。
試しにダイアログベースのテストアプリに以下のような描画ルーチンを入れてみました。
ダイアログ自体のサイズはプロジェクトを作成したときのままで、
GDI+の初期化などはアプリケーションクラスの中で行っています。
void CTestDlg::OnPaint()
{
	CPaintDC dc(this);
	CFont font;
	font.CreatePointFont(240, _T(MS Pゴシック), &dc);
	// GDI
	dc.SaveDC();
	dc.SelectObject(&font);
	dc.SetTextColor(RGB(0, 0, 0));
	dc.SetBkMode(TRANSPARENT);
	dc.DrawText(_T(あいうえおアイウエオ1234567890ABCDEFG), CRect(0, 0, 1000,
1000), DT_LEFT | DT_TOP);
	dc.RestoreDC(-1);
	// GDI+
	Graphics graphics(dc.m_hDC);
	graphics.SetPageUnit(UnitPixel);
	graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
	graphics.DrawString(_T(あいうえおアイウエオ1234567890ABCDEFG), -1,
	                    &Font(dc.m_hDC, (HFONT)font),
	                    RectF(0, 40, 1000, 1000),
	                    &StringFormat(),
	                    &SolidBrush(Color(0, 0, 0)));
}
描画自体は行えているのですが、
開始位置や文字間隔などが微妙に異なるようで、同じように描画されません。
左端の座標がまず異なり、DrawText()は「F」、DrawString()は「E」まで表示されます。
これらを可能な限り近づけられるようなパラメータは、GDI+にあるのでしょうか。
よろしくお願いいたします。
あまり詳しくありません。
 1.アンチエイリアスをかけない場合はどうでしょう。
 2.SaveDC()、RestoreDC()を削除してみたらどうでしょう。
すでに検証済みだったならすみません。
ご意見ありがとうございます。
> 1.アンチエイリアスをかけない場合はどうでしょう。
TextRenderingHintAntiAliasのオンオフで、描画位置が微妙に異なるようです。
ただし、上のGDIに近づくほどの差はなく、左端の開始位置も変わりませんでした。
> 2.SaveDC()、RestoreDC()を削除してみたらどうでしょう。
こちらは違いはありませんでした。
TextRenderingHintAntiAliasのオンオフだけで微妙に位置が変わるということは、
今までDrawText()で描いていたものを置き換えるという目的は難しいのでしょうか。
全てのフォントサイズにおいて、完全に同じ幅にするのは不可能かもしれません。
以下のページにその理由が記されています。
https://support.microsoft.com/en-us/kb/307208
情報ありがとうございます。
GDIのテキストと同じものをGDI+で描画するということは不可能なのですかね。
ちなみに、ネット上でいろいろ探してみたところ、
GDIのBeginPath()/EndPath()/GetPath()を使って、TextOut()やDrawText()のパスを作成
↓
そのパスの座標配列やバイト配列を、自前でGDI+のGraphicsPathに変換
↓
そのGraphicsPathを、SmoothingModeAntiAliasなどのモードで描画する
という手法がありました。
「自前でGDI+のGraphicsPathに変換」の部分がかなり力業ですが、
確かにこの方法だと、GDIのテキストの形状のまま、
GDI+でいろいろこだわった描画を行えるのでないかと思います。
ただこのやり方だと、テキストが多いと処理が遅くなりそうな気はしますし、
印刷処理でPDF化したときには、文字情報が失われてしまいますね。
MFCでフォントの設定で「FIXED_PITCH」を指定しないとだめだと思いますね。
MS ゴシックを使うと合わせやすいです。

 
  
  
  
  