CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

メイリオが他のフォントとくらべて小さく表示される件

投稿日:2015年9月26日 更新日:

左側がMS Pゴシックで、右側がメイリオ。
高さを同じ80pixcelで書いているのに、メイリオは3割型小さくなる。
メイリオサンプル
メイリオの場合、GetTextMetricsで取得できるtmInternalLeadingとtmDescentが
妙に大きいということがわかっている。
GetTextMetricsの詳細情報はこちら。
つまり上下方向の余白が広いってことだ。
上の文字描画結果を出すためのソースコードは以下の通り。(VC++)

<pre class="brush: c;">
void CTextOutTestView::OnDraw(CDC* pDC)
{
    CTextOutTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    if (!pDoc)
        return;
    // MS Pゴシック
    CFont font1;
    font1.CreateFont(80,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
        DEFAULT_PITCH,_T("MS Pゴシック"));
    CFont* pBack = pDC->SelectObject( &font1 );
    pDC->SetTextAlign( TA_LEFT | TA_BASELINE );
    pDC->TextOutW( 0, 100, _T("あ亜ay") );
    pDC->SelectObject( pBack );
    // メイリオ
    CFont font2;
    font2.CreateFont(80,0,0,0,FW_NORMAL,0,0,0,DEFAULT_CHARSET,
        OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,
        DEFAULT_PITCH,_T("メイリオ"));
    pBack = pDC->SelectObject( &font2 );
    pDC->SetTextAlign( TA_LEFT | TA_BASELINE );
    pDC->TextOutW( 250, 100, _T("あ亜ay") );
    pDC->SelectObject( pBack );
    // ベースライン
    pDC->MoveTo( 0, 100 );
    pDC->LineTo( 500, 100 );
}

カギになるのはCreateFontらしい。
CreatePointFontを使うと、MS Pゴシックとメイリオで同じくらいの大きさになる。
また、CreateFontでも高さにマイナス値を設定しても同じくらいになる。
以下の計算をした結果をCreateFontの第1引数にセットするということ。

::MulDiv(ptsize,-GetDeviceCaps(LOGPIXELSY),72)

つまり、文字高さはピクセルじゃなくてポイントで指定しろってことか。。。
この手の問題が世のアプリで多く出ているんじゃないかと思ったが、そうでもない。
ちなみにWordやExcelでは両フォントの大きさがほぼ同じになる。
まだ研究の余地がありそうだ。

-ソフト開発
-

執筆者:


comment

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。

関連記事

no image

イテレータ(Iterator)

あるコンポーネントで初めて出会いました。コンポーネントがバージョンアップされたときに、オブジェクト指向的な作りに一新されて、いろいろ変わったのですが中でもイテレータという訳の分からないものに遭遇して、 …

デュアルモニターでツールバーをドラッグすると枠非表示で残像が出る

デュアルモニター環境で、MFCで作ったアプリをメインモニター側に出して、アプリのツールーバー(CToolBar)をドラッグすると、枠がメインモニター側に表示されずに、サブモニター側に枠と残像が表示され …

no image

USBメモリを小容量に見せかける方法

USBメモリの大容量化が年々加速している。 おいらが最初に買ったのが10年くらい前で、128MBで1万円くらいだったか。 今では、4GBが500円で買える時代になっている。 個人で使うには容量が多いに …

zipcopy~圧縮してコピー~ができたのでアップしておく

【zipcopyの概要】 大きなファイルやフォルダをネットワーク越しにコピーする際、圧縮してからコピーすることで、ネットワークの帯域を少しで使わないようにすることを目的とする。以下3つの手順を自動的に …

no image

PDFiumでPDFを描画したりなんだりできるんだとさ

まずはこちらのネットニュースをご覧あれ。2014年に書かれたものでおもしろいことが書いてある。