許せない心理テスト

私が作成中の .NET C++プログラムはフォント指定を他のC#アプリから受取っており、そのフォント指定に基づいて文字を表示することになっております
受け取るフォント情報はC#のフォントダイアログにより選択されたものです
具体的には
(1) M S 明朝, 9.75pt, style=Italic
(2) HGPゴシックM, 20.25pt, style=Bold
などといった文字列です

私が作成するC++ではこれらの指定に基づいてCreateFontするのでしょうが、上記のC#フォント指定と下記のC++ CreateFontパラメータでは差があり過ぎて、どのようにしたら良いのか分かりません

font.CreateFont(
20.25, // フォントの高さ(大きさ)。
0, // フォントの幅。
0, // 0でOK。
0, // 同じく角度
FW_DONTCARE, // 文字の太さ
FALSE, // イタリックならTRUEを指定
FALSE, // 下線ならTRUE
FALSE, // 取り消し線ならTRUE
SHIFTJIS_CHARSET, // フォントの文字セット
OUT_DEFAULT_PRECIS, // 出力精度の設定
CLIP_DEFAULT_PRECIS, // クリッピング精度
DRAFT_QUALITY, // フォントの出力品質
DEFAULT_PITCH, // フォントのピッチとファミリを指定
L("HGPゴシックM") // フォントのタイプフェイス名の指定
);

C#のフォントダイアログからの情報を簡単にC++のCreateFontのパラメータを作り出す方法はありますか?
またC#から受け取る情報が基本的に間違っており、別の情報があるのではないかと心配です

宜しくご指導願います

A 回答 (3件)

CreateFontの引数 nHeightを ポイントのまま渡しているなら 期待通りの結果が得られないと思います



MulDivなどを使って
nHeight = -MulDiv( 20.25, GetDeviceCap(hDC,LOGPIXELSY),72)
などで求めたものを使ってみましょう
    • good
    • 0
この回答へのお礼

ありがとうございます

色々な面からご指導頂き感謝しております

少々時間を頂いて勉強させてもらいます

ありがとうございました

お礼日時:2013/01/20 10:48

#1さんがおっしゃっているようにSystem::Drawing::Font::ToHFontでHFONTが取得できるので、GetObject() メソッドを使用してLOGFONT構造体でフォントデータが取得できるはずです。



そのLOGFONT構造体のデータを渡してあげればデータの差異などを考えることもなくなると思います。

参考URL:http://msdn.microsoft.com/ja-jp/library/dd144904 …
    • good
    • 0
この回答へのお礼

ありがとうございます

LOGFONT構造体のデータの受渡しでトライしてみます

でも細かい点が不明で不安です

今後も宜しくお願い申しあげます

お礼日時:2013/01/20 10:44

そもそもFontDialogのFontプロパティのオブジェクトインスタンスをそのままもらってはいけないのですか。


CFontが作りたいのであれば,System::Drawing::Font::ToHFontでHFONTを取得後,
CFont::FromHandleで作れるわけですし。
# C++ CreateFontをMFCのCFont::CreateFontと読み替えています。
    • good
    • 0
この回答へのお礼

ありがとうございます

フォント情報の受渡しがRegistry渡しと規定されております
ですから文字列が渡されているのです

RegistryではFontプロパティのオブジェクトインスタンスは渡せません

何とかなりませんか・・・・・・

ありがとうございました

お礼日時:2013/01/18 06:17

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


おすすめ情報