知らなかったこと(’14/10)


Win32APIによるVC++プログラミングの基礎的な項目の独学をまだ飽きずに(飽き
やすい輩で、壁につきあったりするとすぐ飽きてしまう(^^;<私)続けています。

その中で、リソースエディタの使い方が下手で前から好きでなかったダイアログは
やっとやり方がわかりました。使えるようになれば便利ですね(^◇^)。
複数のボールが壁で跳ね返るというテストプログラムで設定値入力にこれを用い
ました。合わせてカラーダイアログボックスも覚えました。前にダイアログを使わな
いで、直接edit control/button controlを作り、サブクラスで機能追加するプログラ
ムを作ってみたので、そんな苦労なしで自動でtag機能などがつくというのはいか
に便利かよく理解できました。

ここまでの独習で、ファイル入出力も覚えましたし、派生など、まだ適当なテストプ
ログラムを思いつかないことまでは理解できていないものの、基礎的なクラスの
手法も、テストプログラムで応用して理解できました。

さて、今回、だんだん、学ぶべき基礎的な面での項目は減ってきているため、色々
なサイトを参考にして、初耳の"RichEdit"というのに挑戦してみました。
これは、標準的な"edit control"の拡張版で、文字色、ボールド体、イタリック体、
アンダーラインなどをつけられる機能があるというので興味が湧いてチャレンジし
てみました。ただ、何も参考にせずゼロからなどとても私には不可能・・・。
結局、何をしているのかを理解したうえでサイト記事のコードをごっそり真似て、
やってみました(^^;。

ま、しかし、いつも驚いているのですが、MSDNライブラリ記事だけではとても書け
ないようなところが今回もありました。
まず、このRichEditはそれが含まれているdllをロードしなければならないんです
ね。そのdllは"RICHED20.dll"。ネット上では"RICHED32.dll"という説明も
あって混乱しましたが、RichEditのバージョンの違いがあって、"RICHEDIT32.dll"
はver1.0のものであり、新規はver2.0以上(RICHED20.dll")とせよとMicrosoftの
サイトにありました。ただ、参考サイトのコードでCreateWindowExでセットされて
いるコントロール名"RichEdit20A"というのは説明が見つけられなかったわけで
そのまま真似て設定しましたが、richedit.hを眺めてみたら、そこにそれがありま
した。GetSystemDirectryとかLoadLibraryなどというAPIは今回初めて知りました。

次に、これこそ、素人/ビギナー独学者には思いもよらないことですが、
「デフォルトではANSI英数字表示ができないのでできるようにする」という説明で
書かれているコードがありました。EM_GETLANGOPTIONS/EM_SETLANGOP-
TIONSというRichEdit専用のメッセージを使うんですが、これについてMSDNライ
ブラリをよく読みましたら、"IMF_DUALFONT"という定数の項の説明で、ASIAN
用は"dual font"が使われているとありました。多分これに引っかかるんでしょう
が、こんなことは気が付きませんねぇ(^^;。ややこしい〜

それにしても、メンバーが沢山ある構造体を三つも使わねばならないので、何を
どれに設定するのか読み解くのも大変です。こういうときは参考コードを真似る
しかない(^^;(情けない(^^;)・・・。

ま、おかげさまで、また、一つ新しいダイアログを目にできました。
「フォント選択ダイアログ」というもので、ChooseFontというAPIを用いて出すこと
ができるのですが、CHOOSEFONT構造体とLOGFONT構造体というのが必要
になります。実際に結果をセットするにはもう一つCHARFOTMATという構造体
も必須ですし、RichEdit専用のEM_SETCHARFORMAT,EM_GETCHERFORMAT
というメッセージも必須になります。これらには沢山の定数が出てきますので、
MSDNライブラリ見ると、もうキョロキョロ状態、目がくらみそうになりました(^^;。
おまけに、RichEditver2.0以降ではCHARFORMAT構造体の拡張版CHARFOR-
MAT2というのがあり、更に定数が増えてます。構造体は英語版だけです
ので余計・・・

ま、調べながら「なんでそれが指定されているか」が理解できたわけですけど、
ああもたくさんの定数並んでいて、全部使うことってあるのかなぁと素人的には
思えてしまう私です。

そんなんで、とりあえず作成プログラムで出てきた「フォント選択ダイアログ」
は下記となりました(Windows8.1対応)。


Windows付属の「メモ帳」ではデフォルトでは、このフォント選択ダイアログは
取り消し線、アンダーライン、色の項目はありませんが、RichEditではそれが
可能になっています。

で、ここで、やっと、タイトルのお話。
実は、最初のコードではこのフォントとフォントセットのところ、設定している
のに何も表示せず・・・。

結局は、「そんな基本的なことも知らないの?」と笑われそうですけど、睨ん
だとおり、フォント名の書き誤りでした。TEXT("MS ゴシック")と書いたんで
すが、MSとゴシックの間のスペースが「全角」になっていたという誤りでした。
MSもゴシックも全角ですからそのまま全角のままスペース付けたのが間違
いというわけでした。ここは「半角スペース」なんですねぇ・・・
改めてWikipediaでMS ゴシックを調べたら、
 MS UI Gothic を除き、日本語名の「MS」および「P」は全角
 である。
 また、MSの後ろには半角の空白が入り、Pの後に空白は
 入れない

とありました。知らなかったなぁ・・・(^^;

戻る