フォント指定の受渡し法について知りたい

このQ&Aのポイント
  • 私が作成中の .NET C++プログラムはフォント指定を他のC#アプリから受取っており、そのフォント指定に基づいて文字を表示することになっています。
  • C#のフォントダイアログからの情報を簡単にC++のCreateFontのパラメータを作り出す方法はありますか?またC#から受け取る情報が基本的に間違っており、別の情報があるのではないかと心配です。
  • フォント指定の受渡し法について詳しい方、アドバイスをお願いします!
回答を見る
  • ベストアンサー

フォント指定の受渡し法?

私が作成中の .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#から受け取る情報が基本的に間違っており、別の情報があるのではないかと心配です 宜しくご指導願います

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

CreateFontの引数 nHeightを ポイントのまま渡しているなら 期待通りの結果が得られないと思います MulDivなどを使って nHeight = -MulDiv( 20.25, GetDeviceCap(hDC,LOGPIXELSY),72) などで求めたものを使ってみましょう

sato-may
質問者

お礼

ありがとうございます 色々な面からご指導頂き感謝しております 少々時間を頂いて勉強させてもらいます ありがとうございました

その他の回答 (2)

  • FAY
  • ベストアンサー率49% (95/193)
回答No.2

#1さんがおっしゃっているようにSystem::Drawing::Font::ToHFontでHFONTが取得できるので、GetObject() メソッドを使用してLOGFONT構造体でフォントデータが取得できるはずです。 そのLOGFONT構造体のデータを渡してあげればデータの差異などを考えることもなくなると思います。

参考URL:
http://msdn.microsoft.com/ja-jp/library/dd144904(v=vs.85).aspx
sato-may
質問者

お礼

ありがとうございます LOGFONT構造体のデータの受渡しでトライしてみます でも細かい点が不明で不安です 今後も宜しくお願い申しあげます

回答No.1

そもそもFontDialogのFontプロパティのオブジェクトインスタンスをそのままもらってはいけないのですか。 CFontが作りたいのであれば,System::Drawing::Font::ToHFontでHFONTを取得後, CFont::FromHandleで作れるわけですし。 # C++ CreateFontをMFCのCFont::CreateFontと読み替えています。

sato-may
質問者

お礼

ありがとうございます フォント情報の受渡しがRegistry渡しと規定されております ですから文字列が渡されているのです RegistryではFontプロパティのオブジェクトインスタンスは渡せません 何とかなりませんか・・・・・・ ありがとうございました

関連するQ&A

  • Edit_SetTextでのフォント指定についての質問です。

    Edit_SetTextでのフォント指定についての質問です。 Windowsのプログラム作成で、hEdit = CreateWindow(。。。)で作ったウインドにEdit_SetText(hEdit, "文字")で文字を書く処理を作っておりますが、この文字のフォントを変えるのに苦戦しております。 ちなみに、hFont = CreateFont(20, 0, 0, 0, FW_BOLD, TRUE, TRUE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS ,DEFAULT_QUALITY ,VARIABLE_PITCH | FF_ROMAN, "MS ゴシック"); SetWindowFont(hEdit, hFont, false); を試しましたが、フォントの高さの値は効いているのですがフォントが変わりません。 どなたか、ご存知の方おりましたらご教示お願いしたく、宜しくお願いします。

  • エディットボックスのフォントを変えたい

    MFCで作ったダイアログ上の他のコントロールはいじらずに、 エディットボックスのフォントだけを大きく変えたいのですが、 行間が変わらない為か、文字の下のほうが切れてしまいます。 色々試してみていますが、どうしても出来ません。 元のダイアログのフォントは12ptです。 OnInitDialog関数内で、 CFont m_font;(メンバ変数)に以下を設定し、 m_font.CreateFont( 20, 0, 0, 0, FW_SEMIBOLD, FALSE, FALSE, 0, SHIFTJIS_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "MS P ゴシック" ); OnCtlColor関数内で、該当エディットボックスの場合だけ pDC->SelectObject( &m_font ); しています。 CreateFontのパラメータが間違っているのでしょうか? それとも、これら関数を呼び出す場所が間違っているのでしょうか? ご回答お待ちしております。

  • フォントをカレントディレクトリから読み込む方法

    win32アプリケーションを作成しています。 フォントを、WINDOWS\Fontsからではなく、そのアプリケーションがあるディレクトリから読み込む必要が出てきたので、 hFont = CreateFont(iHeight,0,0,0,FW_DONTCARE, FALSE, FALSE, FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"MS ゴシック"); を最後の引数だけ変更して、 hFont = CreateFont(iHeight,0,0,0,FW_DONTCARE, FALSE, FALSE, FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"./hoge.ttf"); のようにしたのですが、読み込めていないようです。 MSDNを見ると、最後の引数はフォント名だとなっているので hFont = CreateFont(iHeight,0,0,0,FW_DONTCARE, FALSE, FALSE, FALSE,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE,"hoge"); としましたが、やはりうまく行きません。 どのようにすれば、カレントディレクトリのフォントを使用できるのか、わかる方、ご教授お願いします。 環境はvc 2005, XPです。

  • 日本語不可のフォントで日本語を出力させた場合の動作についての質問

    現在、任意で指定したフォント名を使用してある文字列を表示するようなプログラムを作成しています。 CreateFont()の文字セットには、SHIFTJIS_CHARSET、タイプフェイス名にはArialを指定しても環境によっては、日本語が文字化けしたままとなります。 何故、そうなるのか分からない状況ですので、ご教授ください。 また、解決方法がございましたらお願いいたします。 表示する文字列:テスト ⇒ 出力結果:□□□ 現在、CreateFont()には以下の指定を行っています。 CreateFont(X, ※1 0, 0, 0, 400, TRUE, FALSE, FALSE, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH | FF_DONTCARE, Y); ※2 ※1 X:任意のサイズ ※2 Y:Arial CreateFontで作成されたハンドルはSelectObjectで関連付けています。 よろしくお願いします。

  • フォントの種類とサイズの指定について

    あるテーブルの中だけについて、フォントの種類とサイズを指定したいです(初歩的な質問ですみません)。 ネットで調べて、以下のようにしてみました。 <P STYLE="font-family:'HGPゴシックE',sans-serif;","font-size:20pt;"> <TABLE> ・・・・・ </TABLE> </P> そうしたところ、フォントの種類はは変わったのですが、サイズが変わりませんでした。 どのようにしたらよいか教えてください。 よろしくお願い致します。

    • ベストアンサー
    • HTML
  • リストコントロールの文字の大きさ

    ハンドルがhWの主ウィンドウに hL=CreateWindow("LISTBOX",NULL,WS_CHILD|WS_VISIBLE,0,0,600,400,hW,HMENU(IDL),hI,0); でハンドルがhLのリストを配置して hF=CreateFont(36,(16,0,0,FW_NORMAL,FALSE,FALSE,FALSE,SHIFTJIS_CHARSET,OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FIXED_PITCH|FF_MODERN,"MS Pゴシック"); SendMessage(hL,WM_SETFONT,(WPARAM)hF,1); として文字の大きさを2倍にしようとしたのですが リストコントロールは2倍になったと思って項目の間隔を文字が2倍であるかのように開くのですが肝心の文字が大きくなりません。 何が問題なのでしょうか?

  • Illsutrator.10でのフォントの指定について

    Illsutrator.10でのフォントの指定について フォントの種類をMPSゴシックを指定したのですが、イラストレイター内でフォントの一覧に表示されません その他HGP各種やHGS各種などのほか60種近くのフォントがあります 他のソフト、たとえばエクセルやワードでは同様に多くの種類のフォントとMSPゴシックが一覧に表示されます もちろんコントロールパネル→フォントフォルダ内にもMSP各種のフォントが存在しています どうすればMSPゴシックを表示することができるのでしょうか?

  • Macのフォントについて

    Macのフォントで、HGPゴシックMってありますか? WindowsでHGPゴシックMを使い作成したデータを、 文字を変えずにMacで編集したいと考えています。 アウトラインはしたくないのですが…。

    • 締切済み
    • Mac
  • font-family フォントが無い場合は?

    CSSでfont-familyを1個だけ指定した場合、フォントが無い環境の人は、文字化けになる場合がありますか? 例えばですが、font-family:'HGP創英角ポップ体'; とか、1個だけを指定した場合に、フォントがなければ、普通は適当に該当させて表示してくれると思いますが、 文字自体が表示出来ないで文字化けとかになってしまう環境があるのでしょうか? もしそうなら、 font-family:'HGP創英角ポップ体','HG創英角ポップ体',sans-serif; こんな風に安全策でsans-serifも書いているのですが、sans-serifが変なので、それなら該当なし(無指定)にされてゴシックで適当に表示されたいのです。だから1個だけで指定したいのです。どうでしょう?

    • ベストアンサー
    • HTML
  • フォントの指定 猫でもわかるwindowsプログラミングより

    猫でもわかるwindowsプログラミングの本で勉強している学生なんですが、第2章の2.4フォントの指定のところでプログラムを打ち込んでコンパイルしたのですがなぜか識別子が見つかりませんというエラーがでてコンパイルできません。どなたかわかる方お願いします。 一応プログラム(CALLBACK関数と論理フォント作成の関数のみ)↓ //ウィンドウプロシージャ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp){ static HFONT hFont1, hFont2, hFont3; PAINTSTRUCT ps; HDC hdc; char *szName1 = "○○"; char *szName2 = "▲▲"; switch (msg) { case WM_CREATE: hFont1 = MyCreateFont(40, SHIFTJIS_CHARSET, "HG行書体"); hFont2 = MyCreateFont(40, ANSI_CHARSET, "Fraktur JS"); hFont3 = MyCreateFont(40, SHIFTJIS_CHARSET, "MS 明朝"); break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); SelectObject(hdc, hFont1); TextOut(hdc, 0, 0, (LPCTSTR)szName1, (int)strlen(szName1)); SelectObject(hdc, hFont2); TextOut(hdc, 0, 60, (LPCTSTR)szName2, (int)strlen(szName2)); SelectObject(hdc, hFont3); TextOut(hdc, 0, 120, (LPCTSTR)szName1, (int)strlen(szName1)); EndPaint(hWnd, &ps); break; case WM_DESTROY: DeleteObject(hFont1); DeleteObject(hFont2); DeleteObject(hFont3); PostQuitMessage(0); break; default: return (DefWindowProc(hWnd, msg, wp, lp)); } return 0; } //論理フォントの作成 HFONT MyCreateFont(int nHeight, DWORD dwCharSet, LPCTSTR lpName){ return(CreateFont(nHeight, 0, 0, 0, FW_DONTCARE. FALSE, FALSE, FALSE, dwCharSet, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, lpName)); } エラー内容↓ MyCreateFontの識別子が見つかりません。 論理フォントの関数のFALSEの値が構文エラーで参照できない。

専門家に質問してみよう