C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: AddFontResourceしたフォントが利用できない


(過去ログ 67 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■38795 / inTopicNo.1)  AddFontResourceしたフォントが利用できない
  
□投稿者/ ぱお (5回)-(2009/07/25(Sat) 08:01:24)

分類:[.NET 全般] 

インストールされていないフォントをAddFontResourceでリソースに追加した場合、
VSのコンポーネントでそのフォントを使おうとしても使えません。
(new Font()してもサンセリフになってしまい正しいFontオブジェクトが作成されない)
フォントダイアログを使うとダイアログ中に表示はされるのですが、選択しても
それは使えないとフォントダイアログがエラーを吐きます。

確認するとリソースにはきちんと追加されており
他のアプリ、例えばワードパッドでは追加したフォントは正常に利用できます。

これは.NETの仕様もしくはバグなのでしょうか?
また、回避方法はありませんでしょうか?
もしくはコードに問題があるのでしょうか?
どうかご教授願います。


        [DllImport("gdi32.dll")]
        private static extern int AddFontResource(string lpszFilename);
        [DllImport("user32.dll")]
        private static extern int SendMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);

        private const int HWND_BROADCAST = 0xffff;
        private const int WM_FONTCHANGE = 0x001D;

	void LoadFont()
	{
            AddFontResource(@"c:\IWAMINBO.TTF");
            SendMessage((System.IntPtr)HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
            textBox1.Font = new Font("IWA太明朝Ou",12);
	}

引用返信 編集キー/
■38798 / inTopicNo.2)  Re[1]: AddFontResourceしたフォントが利用できない
□投稿者/ Hongliang (436回)-(2009/07/25(Sat) 09:58:05)
GDI+ の仕様っぽく感じますが……。
プライベートフォントを使うのはどうでしょうか?
PrivateFontCollection.AddFontFile を使えば任意のフォントファイルをコレクションに追加できます。
Font を作成するときは、PrivateFontCollection の Families から目的のフォントの FontFamilyを取得します。
システムグローバルじゃないとダメだ、というなら使えませんが。
引用返信 編集キー/
■38801 / inTopicNo.3)  Re[2]: AddFontResourceしたフォントが利用できない
□投稿者/ ぱお (6回)-(2009/07/25(Sat) 10:28:49)
No38798 (Hongliang さん) に返信
レスありがとうございます。
PrivateFontCollectionも試したのですが、これはOpenTypeフォントの追加に失敗する
ケースが非常に多いので使い物になりませんでした。
ヘルプにOpenTypeは限定対応のようなことが書いてありますが、まさにそのとおりでした。
TrueTypeはうまくいくのですごく残念です。

書くのを忘れていましたがC#です。
今から開発ツールを変更するのは避けたいのでなんとか回避したいのですが・・・。
引用返信 編集キー/
■38805 / inTopicNo.4)  Re[3]: AddFontResourceしたフォントが利用できない
□投稿者/ Hongliang (437回)-(2009/07/25(Sat) 11:41:03)
OpenType ですか。
インストールしようがプライベートフォントだろうが、そもそも GDI+ でサポートされていないフォントは Font オブジェクトを作れないので手出ししようがありません。
GDI による描画なら
http://omega-point.ddo.jp/laboratory/programming/dot_net/001/index.html
この辺を参考にすれば実装は可能ですが、少なくともコントロールの Font プロパティをセットすれば OK なんて話にはなりません。もっとも、大抵のコモンコントロールは WM_SETFONT だけで大丈夫だと思いますが。

あとはまあ WPF なら対応できますが、WinForm からの移行はさすがに気軽には勧められませんね。
引用返信 編集キー/
■38827 / inTopicNo.5)  Re[4]: AddFontResourceしたフォントが利用できない
□投稿者/ ぱお (7回)-(2009/07/25(Sat) 20:08:48)
どうしても必要な動作なので教えていただいたGDIによる描画を利用したいと思います。
描画先のハンドルをどうやって取得するのか疑問な点はありますがそれはこれから調べるとして
とりあえず.NETコンポーネントの標準動作では実現できなさそうなこと、面倒ながらGDIによる
描画でできそうなことがわかったところで一応解決としておきます。

Hongliangさん、いろいろとご親切にありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -