ECCSkelton(注)も完成し、CREDITクラスの動作確認までにRichTextを扱うサンプルとしてRTWEditorを作ることとし、「MDIは、もー旧いんじゃね?今はタブベースじゃね?」等と軽薄なことを言っていた罰が当たりました。

注:20年前のBCC5.5.1用のSJISベースのBCCSkeltonライブラリーを、Windowsがnativeにしているユニコード(といってもUTF-16)専用にした、現在のBCC102(Embarcadero C++ Compiler)用の互換ライブラリー

 

自分で書いたCTABクラスがわかんねぇ!

 

てか(というか...なれない若者言葉は止めます...)、「タブコントロールってどういうものだったっけ?」というところが、20年前のコードだし、どういう位置づけ(子ウィンドウであるコントロールで、更にタブシート毎の孫ウィンドウを貼っ付けてあるんだっけ???等々)だったかも忘れていた(注)ので、今日ほぼ一日かけて復習しました。

注:CTABをそのまま使ったアプリは一度も書いたことが無く、CVSPLIT(とCHSPLIT)クラスで4つのスプリットウィンドウにタブをあてがった時に使っただけで、アプリとしてはSplitterTestしかありません。

 

最初は「タブというものは、メインとなる親ウィンドウのコントロールとなる子ウィンドウを多数寄せ集めて、切り替えて表示するもの」という想定でCTABのコードを見たり、SplitterTestのコードを見たりしたのですが、どうもそういうことではないようです。CTABクラスのコードを見直すと、最大64枚のタブ迄設定でき、それに応じた整数の配列があるのですが、それが「タブコントロールの子ウィンドウのコントロールID」であると誤解して「分かんねー、分かんねーな」を繰り返していました。(実際その想定でタブシートの一つにリッチエディットコントロールを貼ろうとして、エラーばかり出していました。)

 

で、悩みぬいて

 

「あっ、そいこと!?!」

 

と、気が付いたのは、

親ウィンドウ---タブウィンドウ(タブインデックスだけ表示し、場所貸しを生業とする手配師)

|--------第1タブウィンドウで表示されるコントロール(親はタブではない)(非表示)

|--------第2タブウィンドウで表示されるコントロール(親はタブではない)(カレントタブ→表示)

|--------最終タブウィンドウで表示されるコントロール(親はタブではない)(非表示)

 

という関係でした。(注)

注:昭和の上野公園にお花見に行くと、ヤクザが良い場所を占有して、来客からお金を取って「はい、ここで1時間楽しんで!」で、1時間立つと「オラオラ、次のお客さんが待っているんだから早くどけよ!」と「場所の管理」を業務にしていたことを思い出します。

 

要すれば、

(1)タブコントロールは「今どのタブページを表示しているのかを示すインデックスを表示」し、「その表示場所のサイズを与える」ことができるだけで、

(2)後はユーザーがその表示場所をどう使うかはユーザー次第なのですが、CTABでは「各タブページに一つの親のコントロール(親の子ウィンドウで、CTABとは兄弟)を表示画面に張る」こととを設計仕様にしています。(注)

(3)後はタブページの新規追加と任意削除というページ管理ができればそれでよいわけです。

注:今回のRTWEditorの場合、リッチエディットコントロールを各タブページへ張り付ければよいのですが、いくつかのコントロールを持つページにしたいなら、リソースのダイアログを張り付けることも可能です。

 

と、いうことでやっと昔の自分の考えが分かり、「はぁー、俺は賢かったんだなぁー」という感慨を持った老人の一日でした。

 

ps. このような、しょーもない話なのでPeogram関連とせず、ブログとしてアップしています。しっかし、ボケてきたなぁー。