MDIって知っていますか?
Googleに単に"MDI"と打ち込むと、不動産会社が出てきますね。しかし、私が今日取り上げるのはウィンドウインターフェースの一つである、Multiple Documents Interfaceのことです。
実は昔(1991年)Windows 3.1を初めて使うようになって、「画面の中に色々なタスクのウィンドウを、まるで机の上に書類を広げるように仕事ができるのは格好良いっ!」と思い、更に「一つのアプリなのに、メインウィンドウの中にいくつもの子ウィンドウを開いて異なる仕事をするMDIも格好良いっ!」と思っており、「MDIこそウィンドウズアプリのあるべき姿」と信じていた時がありました。また、いつかはMDIのアプリを作ってみたいな、と思う気持ちもありました。
そんなことで、BCCForm and BCCSkeltonを作り始めた際、矢張りMDIのクラス(CMDI)を作りたいと思い、2002年のバージョンのサンプルにもリッチエディットファイルを扱うMDIのRTEditorを入れ、ツールとしてBCFEditorも同梱しました。
MDIはメインウィンドウ(Frame windowといいます)はドンガラで、この中にクライアントエリアをすべて占有する「下地」としての「クライアントウィンドウ(Client window)」を貼っ付けます。このクライアントウィンドウが子飼いの「子ウィンドウ(Child window)」にリッチエディット等必要なコントロールを貼っ付けて処理をします。
| フレームウィンドウ | - | クライアントウィンドウ | - | 子ウィンドウ1 |
|---|---|---|---|---|
| - | 子ウィンドウ2 | |||
| - | 子ウィンドウ3 |
しかし、(自分で作っておきながらこんなことを言うのも何なんですが)MDIって使いづらくありませんか?↑のイメージのような状態で作業することはまずなく、結局処理をするファイルの子ウィンドウをメインウィンドウの中で最大化してつかってしまいます。実際、今日このブログを書くのでwikiを覗いてみたら、
曰く「一般的にMDIは開かれたウィンドウの管理が問題...
そのため近年のMDIアプリケーションはこの問題を解決するためタブ機能やタスクバーへの一覧表示機能を装備することでこの問題を解決するようになった。」
そして、なーんと「マイクロソフトはMDI形式のアプリケーションを推奨していない。」と書かれていました。(やはり、このように感じるのは私だけではなかったのですね。)
ついでに(↑の赤字部分の)ご本家の出典を確認すると以下の通りでした。
「Q: アプリケーションには SDI と MDI のどちらを使用するべきですか?
A: 大部分のプロダクティビティ アプリケーションには SDI (シングル ドキュメント インターフェイス) が適しています。MDI (マルチドキュメント インターフェイス) は依然として使用されていますが、今日のユーザーとオペレーティング システムにはあまり合っていません。ユーザーはより単純で使いやすいソフトウェアを求めています。SDI は、大部分のユーザー、特にコンシューマとホーム ユーザーがより簡単に理解できる単純なインターフェイスを備えています。多くのユーザーは、MDI インターフェイスで子ウィンドウが親ウィンドウの中にロックされているとフラストレーションを感じます。また、MDI アプリケーションの中のウィンドウは、タスクバーでは切り替えることができません。
特殊なアプリケーションを開発していて、MDI インターフェイスの採用を考えている場合には、ワークブックやプロジェクトなど、MDI の代わりになるデザインも検討するようにしてください。
SDI、MDI、およびその他のウィンドウ管理モデルとそれらの間のトレードオフの解説については、『Microsoft Windows User Experience』 (Microsoft Press) の Chapter 10 を参照してください。これはオンラインでも参照することができます。https://msdn.microsoft.com/library/ms997505.aspx」
フ~ン
(我が意を得たり)ということで、ECCSkeltonにCMDIを移植するのは「時間の無駄」と結論付けて「廃止宣言」するとともに、その代替インターフェースとして(既にBCCSkeltonで実装していた)CTABクラスを使ってみようということで、ECCSkeltonのリッチエディットクラスのテストを兼ねて、
RTWEditor = CREDITクラス(サーバー) + CTABクラス(クライアント) + CSDIクラス(フレーム)
というプログラムを「BCCSkeltonからの移植ではなく、新規で、一から作る」ことにしてみました。(注)
注:とはいっても(対比の意味もあり)BCCSkeltonのRTEditorのリソースを活用し、MDIではなく、SDIウィンドウにタブを張り付けて、それぞれのタブにリッチエディットコントロールを張り付けたエディター、を考えています。
さーて、どうなることやら?乞御期待!
