MDIについて

皆さん、こんにちは。Dr.テトランです。2013年が新たに始まり、すでに一か月が経過していますが、本年もよろしくお願いいたします。

さて、暫くサーバとサブシステムの話が続きましたが、ここいらでクライアントプログラムに移ります。 最近、新たにリリースされたプログラムでMDIを採用するものが少なくなったように思われますが、WordやExcelは相変わらずMDIを採用しています。(尤も、最近のものはかなり異なったビュースタイルになっているので、下記の文はTetra21のイメージです)Tetra21クライアントも採用している、このMDIについて少し述べてみたいと思います。此処からは、暫くTetra21デザインに直接かかわるような内容は余りでてきませんが、システムを理解する上で重要ですので是非読んでください。

 

正式にはMultiple Document Interfaceとして、Windows 3.0でAPIサポートするようになったUIで、見かけ上はメインのフレームウィンドウ内に複数のMDI子ウィンドウを設け、個々のドキュメントを結びつけることで、1プロセス内で複数のドキュメントを同時に操作できるUIです。フレームウィンドウを最大化してデスクトップに見立てると、複数のウィンドウズプロセスがあるように見えますが、その名が示す通り子ウィンドウなのでメニューバーはフレーム側についています。そして、子ウィンドウのアクティビティが変わるに連れてそのメニューバーも変わります。ちょっと昔のMAC風です。見かけ上は複数のプロセスでも、実際はシングルプロセスなのでMDI子ウィンドウ間でのデータ交換はストレス無く行えます。Tetra21クライアントがデータ交換やリンクの設定にD&Dを利用している背景にはこのような事情があるわけです。因みに、別プロセスのTetra21クライアント間では、D&Dは不可能です。従って編集目的ならば同じプロセス内で行うと便利です。この外にも、フレームウィンドウ一つで全体を一括して扱える利点が有ります。例えば、タスクチェンジや終了等、個々に行う必要は有りません。何故利用するアプリケーションが減りつつあるのか不思議です。

 

助言:データからTetra21クライアントを開く場合、同じプロセスで行うには、関連付けUIでDDEメッセージを [open("%1")] に設定してください。(私は、dc4とtpfをそうしています)

 

Tetra21クライアントでは、帳票ウィンドウを除いてMDI子ウィンドウでの操作性を統一するために、UIを含め基本的な機能を持つ基底クラスを作成し、各々のドキュメントはその派生クラスでまかなっています。 基本クラスには、左ペーンにツリービューを持つものとそうでないものが有ります。右側はリストビューに似た純正のビューがあり、こちらはダイナミックスプリッタ付で、全ての基本UIを提供しています。派生クラスでは、そのドキュメントに相応しい処理を追加及びオーバーライドしています。 こうすることでプログラムをコンパクトにすると共に、共通の操作性を提供しています。帳票ウィンドウも基底クラスと二つの派生クラスでできています。見積書表紙とそれ以外の一般帳票がそれです。但し、パラメータをより一般化することで、差異がなくなってしまったので、表紙クラスは、過去の帳票ファイル(*.hys)のためだけに残されています。この単一の帳票クラスで多様な帳票をまかなう仕組みのヒントは、2節「リソース消費量を決めるパラメータとパフォーマンス」の「⑥帳票パラメータについて」に有りますが、節を改めて解説します。

 

注釈:「見かけ上は云々」とあるのは、実際のウィンドウ構成とその連携はもっと複雑だからです。興味のある人は、先ずSDKを参照してください。

 

コメントを残す

 

 

 

これらのHTMLタグが利用可能です

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>