http://sakura.qp.land.to/?Request%2F205
Ctrl + マウスホイールでフォントサイズを変更できるように
を実装しようと思ったのですが、"Ctrl + マウスホイール"のキー割り当てができないので
フォントサイズを変更できるマクロだけ実装しました。
・関数名
SelectFontSize(Integer)
・引数
1を設定するとをフォントを一回り拡大します。-1を設定するとフォントを一回り縮小します。
・戻り値
なし。
・解説
現在設定されているフォントのサイズを変更できます。
設定できるフォントのサイズはTrueTypeフォントのみで下記ステップで変更できます。
8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72
現在のフォントサイズが10のときにSelectFontSize(1)を設定するとフォントサイズが11になります。
現在のフォントサイズが10のときにSelectFontSize(-1)を設定するとフォントサイズが9になります。
・fontsize_m1.mac
フォントを一回り縮小するマクロ
・fontsize_p1.mac
フォントを一回り拡大するマクロ
MYWM_CHANGESETTINGを投げて全ウィンドウのフォントを更新していますが、操作したウィンドウだけが対象でよいのではないかと思います
->設定保存とかいろいろ面倒でしたらアサインしてください
この機能はフォント設定ダイアログを使わないでフォントサイズを変更できる機能なので、基本的な動作はCommand_FONT関数と同じにしました(全ウィンドウのフォントを更新する)。
個人的には、ウィンドウを並べて使う場合などは連動したほうがいい場合もあるので、
全ウィンドウのフォントを更新しないほうがよい、いう要望があれば仕様を含めて別途対応でよいのでないかと。
今回は、"Ctrl + マウスホイールでフォントサイズを変更"の機能にフォーカスしたいです。
10.5ptに未対応なインターフェイスが気になります。
現状、iniを直接変更しないと10.5ptは選択できませんが使えないことはないです。
それと、特定のフォントサイズに変更しにくいです。
引数を10/1ポイント単位の絶対値にしたらどうですか?
+-は、現在のポイント数を返す関数を追加して、マクロはJScriptとかで処理するとか。
TrueTypeフォントはスケーラブルなのでフォントサイズに制限はないと思うのですが、下記を見ると、
http://support.microsoft.com/kb/99672
「Windows インターフェイス::、アプリケーション デザイン ガイド」で「(ページ 159、8.4.1.4] セクション) の推奨ポイント サイズは 8、9 10、11 12、14 16、18 20、22 24、26 28、36、48、および 72 です。
と記載があります。
ChooseFont関数で設定できるフォントサイズに10.5がないのは上記が理由なのだと思います。
今回の機能はフォントダイアログを経由しないでフォントサイズを変更するが目的なので、
"フォント設定"で設定できるフォントサイズに従いたいです。
ということで、10.5を設定したいのであればChooseFont関数の独自実装から始めたほうがよいのではと思うのですが、iniファイルを変更するというのも不便だと思いますので、I/F(+-)を含めてもう少し検討してみます。
参考までに、フォントサイズをlfHeightに変換すると下記のようになりました。
size(8) = lf.lfHeight(-11)
size(9) = lf.lfHeight(-12)
size(10) = lf.lfHeight(-13)
size(11) = lf.lfHeight(-15)
size(12) = lf.lfHeight(-16)
size(14) = lf.lfHeight(-19)
size(16) = lf.lfHeight(-21)
size(18) = lf.lfHeight(-24)
size(20) = lf.lfHeight(-27)
size(22) = lf.lfHeight(-29)
size(24) = lf.lfHeight(-32)
size(26) = lf.lfHeight(-35)
size(28) = lf.lfHeight(-37)
size(36) = lf.lfHeight(-48)
size(48) = lf.lfHeight(-64)
size(72) = lf.lfHeight(-96)
size(10.5) = lf.lfHeight(-14)
が抜けてるんですね。
"Ctrl + マウスホイールでフォントサイズを変更"の機能にフォーカス、の件、承知しました
特定のフォントサイズに変更する機能を追加しました。
関数名をSetFontSizeに変更しました。
Summaryを変更しました(フォントサイズ変更->フォントサイズの拡大or縮小)
・関数名
SetFontSize( int fontSize, int shift )
・引数
fontSize フォントサイズ(1/10ポイント単位)
shift フォントサイズを拡大or縮小するための変更量(fontSize=0のとき有効)
1を設定するとをフォントを一回り拡大します。-1を設定するとフォントを一回り縮小します。
・戻り値
なし。
・解説
使用中のフォントがTrueTypeのみサイズを変更できます。
fontSizeでフォントサイズを設定します。1/10ポイント単位になります。
10.5にしたいときは105を設定します。
fontSize=0に設定したときに、shiftでフォントサイズの拡大or縮小ができます。
選択されるフォントサイズは下記の通りです。
8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72
現在のフォントサイズが10のときにSetFontSize(0,1)を設定するとフォントサイズが11になります。
現在のフォントサイズが10のときにSetFontSize(0,-1)を設定するとフォントサイズが9になります。
・setfontsize_10_5.mac
フォントサイズを10.5ポイントに設定するマクロ
・setfontsize_m1.mac
フォントを一回り縮小するマクロ
・setfontsize_p1.mac
フォントを一回り拡大するマクロ
別途、補足します。
フォントの更新通知を全部に投げるか投げないかの件に関して、実装に反対というわけではないです。
ちょっと考えてみましたが、ファイルごとにフォント情報を持たせた場合
全体との整合をどうとるかが難しいかなと思いました(別案件として考えたほうがよさそう)。
Last edit: novice123 2013-04-22
拡大or縮小時のフォントサイズに10.5を含めるようにしました。
選択されるフォントサイズは下記の通りです。
8, 9, 10, 10.5, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72
SetFontSize()を複数回呼び出したときにスタックオーバーフローするので修正しました。
下記の流れで処理がループします。
CEditDoc::OnChangeSetting()
->
CLayoutMgr::SetLayoutInfo()
->
CLayoutMgr::_DoLayout()
->
BlockingHook()でメッセージ処理
->
CEditDoc::OnChangeSetting()
->
...
rev2904でコミットしました。
コンパイルエラーになる箇所があったので修正しました。
rev2906でコミットしました。