カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2018年09月20日(木)

イラストレーターソフト「ストローク」メッセージボックスのフォント変更機能

SVG での出力も可能な、イラストレーター ソフト「ストローク」
の改良中。ミルノ と同様に、表示スケールに対応するつもりです。

今日は、メッセージボックスのフォントを変更する機能を実装しました。
↓ は、フォントサイズを、でっかくしてみたところ。

メッセージボックスは、Windows の機能を使っていて、
そのままだと、フォントを変更できないので、
自作のダイアログとして作り直しました。

なにかと、大変でしたw。

・・・

メッセージボックスのフォントを変更する機能は、まだありませんが、
SVG エディター、ストロークはこちらからダウンロードできます

・・・

ここからは、どんな感じでメッセージボックスを
自作したか書きます。

まず、メッセージボックス用のリソースを用意します。
最初はレイアウト情報も利用するつもりだったのですが、
かえって面倒だったのでボタンのテキストくらいしか利用してません。

リソースには、OK とか はい(Y) とかのボタンを全部用意しておいて、
OnInitDialog で表示 / 非表示します。

タブオーダーを動的に変更するには?

タブオーダーは、SetWindowPos で Z オーダーを変更すれば、
それと、同じ順序に設定できます。

ディフォルトボタンを設定するには?

普通のボタンをディフォルトのボタンに設定するには、
BS_DEFPUSHBUTTON スタイルを設定すればよいのですが、
OnInitDialog で設定しても遅すぎるみたいです。

OnInitDialog で設定した場合、外観は正しく変化しますが、
リターンキーを押したときに、必ず IDOK が返ってきました。
(全てのボタンに、BS_DEFPUSHBUTTON を設定していない場合)

ちなみに、ダイアログテンプレートを動的に書き変えて、
既定のボタンに BS_DEFPUSHBUTTON スタイルを設定してから、
CreateDialogIndirect するとうまくいきました。

私はやってみていませんが、DialogProc かなんかを置き変えて
リターンキー押下時の挙動をオーバーライドする方法もありそうです。

テキストを表示する

最初、テキストの表示に、スタティックコントロールを
使用してみたのですが、空白がないと自動改行されないので
あきらめました。次にエディットコントロールを試してみましたが、
今度は、選択状態なんかが表示されて邪魔なので、あきらめました。

結局のところ、面倒なので、ダイアログの WM_PAINT メッセージで
直に描く実装にしましたが、より MessageBox に近づけるには、
スタティックコントロールかエディットコントロールを
オーナー描画した方がいいかもしれません。

背景の塗り

背景の塗りも WM_PAINT でやってます。
テキストとアイコンの背景色は白で
ボタンの部分は灰色の背景ですね。

アイコンの背景色

アイコンの描画はスタティックコントロールにまかせてあります。
ディフォルトだと背景が灰色になるので、WM_CTLCOLORSTATIC
メッセージで背景色を COLOR_WINDOW に変更します。

システムアイコンのロード

サイズを指定して、システムアイコンをロードするには、
LoadImage 関数 を使います。LoadIcon 関数 で、IDI_HAND のところ、LoadImage では、MAKEINTRESOURCE(OIC_HAND) です。

IDI_HAND -> OIC_HAND
IDI_QUESTION -> OIC_QUES
IDI_EXCLAMATION -> OIC_BANG
IDI_ASTERISK -> OIC_NOTE

MSDN にあるように、fuLoad には、
LR_SHARED を指定しないと失敗します。

システムアイコンをロードするときの、hinst は NULL です。

レイアウトの計算

DrawText 関数 に DT_CALCRECT、DT_EDITCONTROL などを
指定すると、テキストのサイズを計算できます。

他のオプションは、
DT_NOPREFIX | DT_WORDBREAK | DT_NOFULLWIDTHCHARBREAK
みたいな感じ。ま、色々と試してみるとよいでしょう。

ま、何だかんだで結構大変だったわー。

ストローク
ストローク ダウンロード
ストローク サンプル画像
ストローク 更新履歴
ご意見・ご要望連絡窓口


コメント
コメントする