
掲題の通り、C#のFontクラスが持つGdiCharSetプロパティについてですが、
これは一体どういったときに使われるものなのでしょうか?
msdnに記載されている値を入れれば何か変わるかと思いましたが、
変化は見受けられませんでした。
https://msdn.microsoft.com/ja-jp/library/system. …
かなり情けない話ですが、この疑問に対するアプローチの仕方すらよくわからず、
闇雲に調べてみてはいるのですが、全然分かりません…
大変お手数ですが、お詳しい方、ご教授をお願いいたします。
No.1ベストアンサー
- 回答日時:
まず,結論としては,「何にも使われていない」です。
以下,技術資料として。
元はWin32のGDIでHFONTハンドルを作成するときに利用するLOGFONT構造体
https://msdn.microsoft.com/en-us/library/dd14503 …
のlfCharsetメンバに指定する値で (CreateFontの場合は該当する引数),「どの文字集合のフォントを使うか」を決める物です。
lfCharsetは,フォントの選択において,一番重要な値とされています。
https://msdn.microsoft.com/en-us/library/ms96990 …
上記の文書はWindows 3.1の時代のものですが,GDIの動作としては現在も変化していないと思います。
例えば「日本語を表示したい」場合にはSHIFTJIS_CHARSETを指定することになります。
そして,lfFaceNameで使いたいフォントを指定するわけですが,この場合にそのフォントが指定された文字集合をサポートしていない場合,
別のフォントが利用されます (e.g. lfFontFaceにSymbolを指定しても,SHIFTJIS_CHARSETを持っていないので別のフォントが使われる)。
これは,「その文字を表示する」ことを最優先にするための処理になります。
ただ,lfCharsetとして通常はDEFAULT_CHARSETが使われ,この場合は実質的にこの項目は無視されます。
さて,ここまではWindows GDIでの話ですが,.NETのSystem.Drawing.Fontにおいて,この値は単純に保存されるだけの値になります。
Fontのコンストラクタには引数にByteをとるものがあり,上記のような目的で使えそうに思えますが,
実際に動作を調べるとそのようなことは起こらず,MSが提供しているソースコードを見ると,gdiCharSetメンバの値は単に保持されるだけのようです。
http://referencesource.microsoft.com/#System.Dra …
つまり,.NET Frameworkにおいて,このGdiCharSetプロパティは意味をなしていません。
これは利用しているGDI+関数の制限による物で,
https://msdn.microsoft.com/en-us/library/ms53397 …
から
https://msdn.microsoft.com/en-us/library/ms53620 …
をたどると,gdiCharSetを渡す余地がありません。
GdipCreateFontではなく,GdipCreateFontFromLogfontWを使っていれば,LOGFONTを経由して渡すことは出来ていたのですが,今更変更されることもないと思います。
ご回答ありがとうございます。
お礼が遅くなり、申し訳ございません。
(きちんと理解してからと思っていたら時間ばかりが過ぎてしまい…)
リンクのソースを見て、GdiCharsetがメンバに保持されているだけなのが分かりました。
また、NativeFont生成にGdipCreateFontを利用していて、それにはGdiCharsetの渡す余地がないことが分かりました。
(現状は、ToLogFontのためだけにいる感じなんですね。残念ながら私ではLOGFONT構造体を作りたいケースが思いつきませんが)
「.NET内部では何も使われていない」ということがわかり、大変助かりました。
(PropertyGridにFontを表示するとGdiCharsetも表示され、これ必要なの?と問われた時に答えられませんでしたので、これで答えられます。)
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
outlook 文字を揃えたい。tab...
-
マイクロ(μ)の文字を半角で出...
-
教えてください。
-
MsgBoxについて
-
この文字に使われているフォン...
-
Excel:一部のフォントでセルの...
-
「MS Pゴシック」と同じ幅の...
-
メールで、榊の文字を木辺に神...
-
Visual c++6.0 表示フォントを...
-
フォントの種類
-
このフォントはなんというフォ...
-
一番識別し易い フォントとは
-
ベトナム語サイトの文字コード
-
Digno Dualについて困っていま...
-
コピーライト記号の表示が小さい
-
テキストエディタmiの表示文字...
-
EXCEL VBA 印刷プレビューダイ...
-
上付き文字と下付き文字を同時...
-
MoveWindowで位置だけ変更する...
-
プルダウンメニュー表示時の高...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
outlook 文字を揃えたい。tab...
-
マイクロ(μ)の文字を半角で出...
-
教えてください。
-
似ているフォント(Win⇔Mac)
-
「MS Pゴシック」と同じ幅の...
-
Excel:一部のフォントでセルの...
-
MsgBoxについて
-
英語版OSでの遊明朝、游ゴシック
-
ワードでゴシックの文字を太く...
-
逆向き/(スラッシュ)の入力方法
-
gvimでフォント、色テーマ設定...
-
C# Font GdiCharSet
-
WORD全角入力しても半角に...
-
font-family の記載方法
-
WORD VBAでハイパーリ...
-
縦書きテキストボックスの表示"...
-
メールで、榊の文字を木辺に神...
-
コマンドプロンプト(cmd.exe)を...
-
PreRenderイベントの実装方法に...
-
無料で使える日本語フォントを...
おすすめ情報