カテゴリー別

お絵描き、デザイン

写真、動画関連ソフト

アメーバピグ専用ソフト

ホームページ関連

画像処理

スキャナー用

SEO 関連

お楽しみ

その他

過去ログ

2018年07月23日(月)

Windows API、ダイアログテンプレートを動的に変更する

写真閲覧ソフトのミルノ PC フォトフレーム の修正中。
現在、メニューを「表示スケール」に対応させる作業中です。

写真をミルノに!

で覚えてね。キラーン。

ダイアログをユーザー指定のフォントで表示するために、
ダイアログのリソーステンプレートを動的に書き換えてみました。

メモリー上にリソーステンプレートを読みこみ、
編集してから、CreateDialogIndirect を呼び出せば OK です。

WTL の場合、CIndirectDialogImpl を使うと実現できます。

あとは、ダイアログリソースをメモリー上に読み込む方法と、
編集する方法がわかれば、実装できるでしょう。

ダイアログリソースを読み込む

FindResource して、
LoadResource して、
LockResource すると、
リソースへのポインター、サイズが得られるので、
編集のため、適当なメモリー領域にコピーします。

FindResource の lpType には、RT_DIALOG を指定します。

ダイアログリソースを編集する

リソースを DIALOGEX で定義した場合、
リソースの構造は、 DLGTEMPLATEEX です。

可変長フィールドがあるので、
前からオフセットを計算していく必要があります。

可変長フィールドを編集する場合、
それより後のメモリー領域を
移動する必要があり、結構面倒です。

DLGTEMPLATEEX の説明をよくよむとわかりますが、
アイテムの構造体 DLGITEMTEMPLATEEX のオフセットは、
DWORD 境界にそろえる必要があります。

DWORD 境界にそろえるとは、
4 の倍数にするということです。

例えば、DLGTEMPLATEEX のサイズが 3 だった場合、
(そんなに小さいサイズにはなりえませんが)
次の DLGITEMTEMPLATEEX は 1 バイトのゴミをはさんで、
オフセット 4 から記録する必要があります。

また、menu, windowClass, title, and typeface
は WORD 境界に合わせよと書いてありますが、
BYTE 型の italic、charset は連続して 2 バイトを成してますし、
sz_Or_Ord 型も 2 バイト単位のデーターなので、
特に何も考えなくとも、WORD 境界になるはずです。

DLGITEMTEMPLATEEX のメンバーの
オフセットについても同様なので、
DLGITEMTEMPLATEEX の先頭オフセットにだけ
注意すれば大丈夫でしょう。

・・・

日本語の最新版はこちらのページから、ダウンロードできます
You can download the latest version of Miruno PC Photoframe here.

x64 の最新版はこちらのページから、ダウンロードできます
Download the latest version of Miruno PC Photoframe x64 here.

・・・

月額会員専用のx64 版 もあります。
月額会員には、こちらのページから参加できます

・・・

メモリーを直接編集するのは、
パディングのせいで、かなり面倒だった。

プログラムで編集しやすい形式に変更してから値を変更し、
メモリーに展開しなおした方が、素直なコードになりそうです。

ミルノ PC フォトフレーム
ミルノ PC フォトフレームのダウンロード
ミルノ PC フォトフレームの更新履歴
ご意見・ご要望連絡窓口


コメント
コメントする