|
|
|
2-1-7. コントロールやMDIは応用ソフトWindowsのGUIの基本的な機能は、クラスやプロシージャそして、ウィンドウに関するものです。コントロールやダイアログボックス、そしてMDIなどは、それらの上部に位置する応用ソフトに過ぎません。これらを踏まえてGUIツールを使うと、より深く理解することに役立ちます。また障害が発生した場合の解消にも役立ちます。すべて、クラスとウィンドウの基本機能の制限があり、同じ機能や動作を行なっていることが解ると思います。コントロール Windowsには、ボタン・コンボボックス・エディトコントロール・スクロールバーなどのコントロールがありますが、これらは、システムが用意したクラスとプロシージャによるウィンドウ機能です。よって作成は、CreateWindow を使い、制御は、SendMessage で行ないます。もしユーザが新しいGUIツールを作成すれば、これらとまったく同様なカスタムコントロールになります。ダイアログボックス ダイアログボックスは、リソースと言うウィンドウやコントロールを定義したテンプレートのデータを使いウィンドウを作成しています。そして、システムのダイアログボックスプロシージャで規定動作を行い、DialogBox 関数でメッセージ配信のためのループを回っている一種のアプリケーションです。ループは作らないで、ウィンドウを作成したら、制御を返すのが、CreateDialog 関数で、モードレスダイアログボックスと呼ばれています。まさしく通常のウィンドウの制御法です。またダイアログボックスプロシージャは、システムで持っているウィンドウプロシージャが特別にコールする機能です。例えば、ウィンドウプロシージャの WM_CREATE では、WM_INITDIALOG メッセージをダイアログボックスプロシージャに発行します。よってダイアログボックスプロシージャはすべてのメッセージは発生する訳ではありませんし、DefWindowProc をコールして規定の処理をされても困ります。 MDI機能 MDIの機能は、大部分が、MDICLIENT ウィンドウのプロシージャで処理されます。しかしMDI機能は複雑ですので、いくつかのAPIサポートや特殊な処理が多々あります。これらもクラスとウィンドウを使って、MDI機能を実現しようとした結果です。MDIは、やや押し付けがましい部分や、制御不足な点がありますが、共通のインターフェースとして確立させたいGUI仕様だったのでしょう。しかし今でもMDIの形式は多用されています。コモンコントロール これは、WIN32で採用された、拡張コントロール機能と言える機能です。WIN32らしいGUIツールは、すべてこのコントロールのおかげです。方法はコントロールとほぼ同じですが、後で採用されたため、InitCommonControls 関数で初期化する必要があります。この関数は、COMCTL32.DLL ファイルをロードし、そのDLLの初期化プログラムを実行します。その時にクラスの登録を行ないます。これで、新たなコントロールを使用できるようになります。カスタムコントロールも同じ手法を取れます。コモンコントロールは、それの使用だけで1冊の書籍が必要なほど、豊富な機能を持っています。しかしその分、サポートする COMCTL32.DLL ファイルも巨大で、メモリも食うでしょう。しかしエクスプローラや大部分のシステムで、この機能を使っていますので、使っても使わなくてもメモリの消費量は変わらないと思います。また使わずに済ませる訳にもいきません。困ったことにこのファイルの更新は激しく、Windows95 で V4.00、Internet Explorer V3.0 で V4.70、そして、Internet Explorer V4.0 で V4.71 です。これらは仕様がだいぶ異なります。 本書では、コモンコントロールの内容について詳しく触れます。詳しくは、コントロールをご覧ください。
|