設定されているマッピングモードで文字列の幅、高さの取得

[戻る]
くろ 2002/06/27(木) 21:42:41
いつもお世話になっております。
また質問させてください。

現在、スタティックコントロールを動的に作成するPGを作っています。
文字列に合わせてコントロール幅、高さを変更したいのですがうまくいきません。
文字列よりかなり小さい範囲で描画されてしまいます。

SetMapModeで0.1mm単位にマッピングして座標変換する前はテキストの文字列と幅、高さが
正しく表示されていました。
しかし画面に0.1mm単位で表示したいのでSetMapModeははずせません。

原因はGetTextExtentで取得した文字の幅、高さが0.1mm単位に変換されていないから
だと思うのですが、GetTextExtentのヘルプを見たところ
「現在のクリッピング領域は、GetTextExtent が返す幅と高さに影響しません。」
と記述されていました。
設定されているマッピングモードで文字の幅と高さを取得できる関数はないのでしょうか。

また、全く別の方法で実現できることに気づいていないのかもしれません。
なにか良い解決方法をご存知の方、いらっしゃいましたらよろしくお願いします。

過去ログも参照してみたのですが該当のものはなかったように思われます。



// スタティックテキスト作成
void CDrawView::CreateStaticText()
{
    int n = memDC.SetMapMode(MM_LOMETRIC);        // マッピングモー
ド:0.1mm
    
    long lFontSize = 100;
    CString strFontName = "MS ゴシック";

    // フォントの大きさより幅、高さを取得
    _TCHAR szBuff[MAX_PATH];
    strcpy(szBuff, "abcdefg");        // ←文字は変動します。

    CDC* pDC = GetDC();
    CFont font;
    font.CreatePointFont(lFontSize, strFontName, pDC);

    CSize sz;
    CFont *pOldFont = pDC->SelectObject(&font);
    sz = pDC->GetTextExtent(szBuff);

    // 座標設定
    long lPosX = 100;
    long lPosY = 100;
    CRect rct;
    rct.top = lPosY;
    rct.left = lPosX;
    rct.right = rct.left + sz.cx;
    rct.bottom = rct.top + sz.cy;

    memDC.LPtoDP(&rct);
    memDC.SetMapMode(n);                    
    // 元に戻す

    if (rct.top < 0)
        rct.top = rct.top * -1;
    if (rct.bottom < 0)
        rct.bottom = rct.bottom * -1;
    if (rct.left < 0)
        rct.left = rct.left * -1;
    if (rct.right < 0)
        rct.right = rct.right * -1;

    // スタイルの設定
    DWORD dwStyle = SS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_TABSTOP ;

    // コントロール作成
    CStatic* pStc = new CStatic;
    pStc->Create("szBuff", dwStyle, rct, this, 10000);
}

dairygoods 2002/06/28(金) 09:50:10
> CDC* pDC = GetDC();
> CFont font;
> font.CreatePointFont(lFontSize, strFontName, pDC);

フォントを作るときのDCのマップモードが変更されて
いないように見えますが、大丈夫でしょうか?

不良PG [E-Mail] 2002/06/28(金) 10:34:01
まるちぽすとだね〜

http://n76cd-01p05.ppp11.odn.ad.jp/cgi.cgi?05677

くろ 2002/06/28(金) 13:01:53
[[解決]]
はい、向こうの掲示板でも叩かれてしまいました。
すみませんでした…
以降気をつけます。

dairygoods 2002/06/28(金) 13:52:48
[解決]が付いちゃってますけど、解決したんでしょうか?

くろ 2002/06/28(金) 16:25:32
[[解決]]
dairygoodsさん、回答いただきありがとうございます。
解決しました。
dairygoodsさんに指摘していただいた通りです。
デバイスコンテキストの指定先が間違っていたのですね。
報告が遅くなってすみませんでした。

古いスレッドには追加発言できません。