文字列の幅と高さのピクセル数を取得する

Visual C++プログラミングのメモ

【Visual C++ 2008】【MFC】

 ダイアログのコントロールに表示する文字列の、幅と高さのピクセル数(ドット数)を取得する方法。 ダイアログクラス(CDialogの派生)に実装する。


// 引数dataはUnicode文字列
// CSizeクラスにてサイズ返却
CSize CXxxxDlg::xxxx(const wchar_t *data)
{
    CSize size;
    size.cx = 0;
    size.cy = 0;

    // デバイスコンテキスト取得
    CDC *pDC = GetDC();

    // ダイアログのフォント取得
    CFont *pFont = GetFont();
    LOGFONT logfont;
    pFont->GetLogFont(&logfont);

    // logfont.lfFaceNameにフォント名が格納されている
    //
    //
    //

    // ダイアログのフォントをデバイスコンテキストに設定
    CFont font;
    font.CreateFontIndirect(&logfont);
    CFont *pFontOld = pDC->SelectObject(&font);

    // 文字列のサイズ取得
    size = pDC->GetOutputTextExtent(data);

    // size.cxに幅ピクセル数、size.cyに高さピクセル数が格納されている
    //
    //
    //

    // デバイスコンテキストを元に戻す
    pDC->SelectObject(pFontOld);

    // デバイスコンテキスト解放
    ReleaseDC(pDC);

    return size;
}

(メモ)

  • 取得したデバイスコンテキストは、使用後、必ず元に戻して解放する
  • MSDNライブラリの「CDC」「CFont」「CWnd::GetDC」「CWnd::GetFont」「CWnd::ReleaseDC」を参照のこと