ファイル入出力のためのハンドラが定義 済みて、あり , メニューに CM FILENEW, CM FILEOPEN, CM FILESAVE, CM FILESAVEAS の項目を定義しておくと , 各 種操作が可能となります。 以上の具体的なコンストラクタについて は付録ディスクに TABLE B. TXT として収 録しましたのて、参照ください。また , TabI e 5 に示したヘッダファイルをソースファイ ルに読み込みます。メニューやアクセラレ ータの定義されたリソースファイルもある のて、 , 適宜読み込んて、おきます。 なお , Windows 3.1 て、は , Windows シス テムが , ファイル名入力 , 文字列探索・置 換ダイアログボックスを提供しており , TF ileDialog ( ) , TSearchDialog ( ) を使う必要 がなくなりました。 ーユーノヾー TurboVision て、はなく , アプリケーション作成の方法論 on もプラットホームをカプセル化する目的 もっとも , ObjectWindows も TurboVisi そのようにはなっていません。 して , 同じソースが使えるとよいのて、すが , トホームの違いをクラスライプラリが吸収 理想をいえば , Windows と DOS のプラッ 同等のインタフェイスて、す。 の IDE や TurboDebugger などの統合環境と ンタフェイスを提供します。 Borland C 十十 TurboVision は DOS 環境て、強力なユーザイ ーションフレームワークてあったのに対し , ObjectWindows が Windows 上のアプリケ を提示する目的て、構築されていますのて、 , 多かれ少なかれプラットホーム固有の機能 を使わざるを得ません。もし , Windows 並 の機能を完全に抽象化するとすれば , 非常 に規模の大きいクラスライプラリになって しまい , DOS アプリケーションには向かな いて、しよう。 TurboVision の階層は Fig. 8 のようになっ ています。これは OjbectWindows と似て非 なるものて、す。 ObjectWindows て、は , Windows がウイン ドウやコントロールなどの部品のまとまり を管理しますが , TurboVision て、はそれらの 管理もクラスライプラリて、請け負わなけれ ばならず , 全体的にかなり細かい機育ヒ部ロ ヒロロロ の集まりとなっています。 Fig. 8 Tu 「 boVision のクラス階層 Fig ・ 9 TurboVision の画面構造 テスクトップ メニューバー ステータスライン ウインドウ ウインドウ 48 TView TGroup TDeskTop TProgram TApplication TWindow TDiaIog TChDirDiaIog TFileDialog THistoryWindow TEditWindow TFrame TButton TClustoe 「 TCheckBoxes TRadioButtons TMenuView TMenuBar TMenuBox TStatusLine THistory TInputLine L—TFilelnputLine TListViewer L—TListBox TSortedListBox L—TFileList TDirListBox TSc 「 0 阨「 L—TText D ev ice L—TTe rm i nal TScrolIBar l—THistoryViewer TFilelnfoPane TStati cText TLa bel TParamText TBackGround Tlndicato 「 TEditor TMemo TFileEditor C MAGAZINE 1 2 9 矩形表示領域 ひとつ以上の子ビューを持つピュー テスクトップのビュー プロクラムの仮想クラス アプリケーションのピュー ウインドウ ダイアログホックス ティレクトリ変更ダイアログ ファイル名入力ダイアロク 入力履歴ウインドウ 工テイタウインドウ ウインドウの枠 ブッシュボタン ホタンの集まり チェックホックス ラジオホタン メニュー メニューバー ボップアップメニュー ステータスライン 履歴ホタン 1 行工テイタ ファイル名入力工テイタ リストのヒュー リストボックス ソートつきリストホックス ファイルリスト ティレクトリー覧 スクロール処理 テキストヒュー 端末工ミュレータ スクロールバー 履歴リストヒュー ファイル情報表示 文字列表示 ラベル表示 バラメータつきテキスト バックグラウンド 行 , 桁表示 工デイタ 埋め込み用工テイタ ファイルと結合したエテイタ Fig . 10 ピューの階層 メー アプリケーション テスクトップステータスライン ウインドウ 枠インテリア ウインドウ 枠インテリア
A 叩 lication Frameworks の中核 「 ObjectWindows 」 , rTurboVision 」 堀江郁弥 BorlandC 十十 Ve 「 . 2.0 から 3.0 へのバージョンアップ最 大のセールスポイントは AD ロⅱ cation Framewo 「 ks の サポートだろう。本章では AFX の中核 ObJectWindows と Tu 「 b0Vision のクラスライプラリに焦点を当てる。 ObjectWindows についての概説は , すて、 わち , WinMain( ) 関数て、生成された TApp に本誌 ' 92 年 7 月号などて、触れられているの lication のメンバ関数 InitMainWindow ( ) て、 , ここて、は , 少し詳しい使い方について によって , メインウインドウが生成され , 述べます。 TurboVision については , これま それを親ウインドウとして , ウインドウ (T て、本誌て、触れられていませんのて、 , まずは BorIand C 十十 Ver. 3 . 0 にはアプリケー Window) やダイアログボックス (TDialog) ション開発のためのクラスライプラリ , Ob 概略を説明します。 が生成されます。また , ウインドウやダイ jectWindows と TurboVision が付属してい アログボックスを親ウインドウとして , ボ、 ます。 AppIication Frameworks と総称され タンやリストボックスなどのコントロール ObjectWindows るふたつのクラスライプラリのうち , Obje (TControI) が生成されます。 ctWindows は MS-Windows 用の , TurboV 実際には , これらのクラスをそのまま使 ision は MS-DOS 用のアプリケーションフレ ObjectWindows を用いたアプリケーショ うのて、はなく , クラスを継承しメンバ関数 ームワークて、す。 ンは ,Fig. 5 に示す構造をしています。すな を再定義して用いることが多いようて、す。 List TWindow クラス はじめに List WinMain ( ) 関数 1 : class MyWin : public TWindow { 2 : public: 3 : TListBox* 12X : 〃コンストラクタ 4 : MyWin(PTWindowsObject parent, LPSTR title) : TWindow(parent, title) { 5 : AssignMenu(MENU RESOURCE_ID) ; 6 : / / メニューのロード Attr. StyIe ト WS_CLIPCHILDREN; / / スタイルの変更 8 : / / 位置の変更 9 : Attr. X ニ 10 ; Attr. Y ニ 10 ; 10 : / / 大きさの変更 Attr. W = 1 圓 : Attr. H = 100 : 〃コントロールの生成 lbox = new TListBox(this, ID_LBOX, 20 , 20 , 50 , 5 の : 12 : 13 : 14 : virtual void SetupWindow() { 15 : TWindow::SetupWindow(); / / 親クラスのメンバを呼ぶこと 16 : Ibox->AddString("String"); / / コントロールの設定 18 : / / メッセージハンドラ ( ウインドウメッセージ ) 19 : virtual void WMHandler(RTMessage) = CWM FIRST + WM_xxx] ; / / メッセージハンドラ ( メニューメッセー ) 22 : virtual void CMHandler(RTMessage) = [CM FIRST + CM_xxx] : / / メッセージハンドラ ( 子ウインドウメッモージ ) 23 : 24 : virtual void IDHandler(RTMessage) = [ID_FIRST + ID_xxx) ; 25 : 〃アイコンを変更するとき virtual LPSTR GetClassName() { return "ClassName"; } virtual void GetWindowClass(WNDCLASS& wndclass) ( 29 : TWindow: :GetWindowClass(wndclass); / / 親メンバを呼ぶこと 30 : wndclass. hlcon = LoadIcon(wndclass. hlnstance, ICON_ID) ; 31 : 32 : } : 0 O ・ 1 3 実 . レ 1 c: と , 期 h. れ 14 0 朝 0 》 -4 -0 6 旧 TApplication クラス 1 : class MYÅpp : public TAppIication ( / *... 中略 ... * / } : 2 : / / InitMainWindow() で、 MainWindow を設定する 3 : void Myipp: :InitHainWindow? { 6 : 〃 lnitlnstance() で、アクセラレータを設定する 7 : void MyApp: :lnitlnstance() { / / 親クラスのメンバ関数を呼び出すのを忘れないこと 8 : TAppIication: :lnitlnstance() : 9 : 10 : HAccTabIe = LoadAccelerators(hInstance, "RESOUCE-ID") : 40 C MAGAZINE 1 2 9
日聞 C++ 3.1 特集。 Borland 3 』研究 これがオプジェクト and のクラスライプラリだけのことはあっ がたかったのて、すが , おそらくライセンス供与されているのて、し て , もともとかなり読みやすいし , プログ とリアルに感じる 指向のパワーなんだな , よフ。このデノヾッグカーネルは当然ほかの ことがて、きるライプラリて、す。 ラムの流れがわかりやすく , 拡張も容易て、 3 製品にも含まれています。それぞれに Tur BC 十十 3.1 と BC 十十 & AFX3.1 のパッケ す。 ProtoGen て、骨組みを作って ObjectWin bo Debugger for Windows がバンドルされ ージに FREE ProtoGen というシールが貼っ dows にコードを足していくことて、かなり安 ているからて、す。 windows. h も新しいものが含まれていま てあり , 「これを貼ってレジストしてくれれ 直に Windows プログラミングが行えます。 す。さらに , 古い 3.0 用のヘッダファイル ば製品を送付しますよ」とかいうやっか , と この安易な方法がくせになりそうて、す。 も , win30. h とリネームされて入っているの 思ってパッケージを開けたら Prot0Gen その ProtoGen は当然日本語に対応していません て、 , Windows 3.0 向けのアプリケーション が , ObjectWindows のコードを生成するの ものがマニュアルごと入っていました。 Pr を万が一作る場合にも対応て、きます。 otoGen は Borland の製品て、はないのて、 , て、すから , PC ー 9801 版の BC 十十に持ってき また , TP/Win1.5 には Amish という仮想 れもアメリカ / カナダだけのキャンペーンな てメニューリソースやダイアログをいじれ スクリーンユーティリティがおまけて、つい ば利用て、きます。 のて、しよう。 ていました (Fig. 27 ) 。これもキャンペーン ProtoGen は CASE/W と同じように , Wi とくに BorIand C 十十の ObjectWindows なのて、しよう。 ndows アプリケーションのインタフェイス部 はダイナミックメッセーシディスパッチと ProtoGen は日本の BorIand から買えると 分をビジュアルに作成してソースコードを いう独自の機能を持っていて , 特定のメッ いうことて、すが , Amish は扱っていないそ セージに応答する関数を定義するだけて、処 吐き出す Case ツールて、す。 CASE / W とのい うて、す。秋葉原あたりて、売っていそうな気 ちばん大きな違いは , C 十十のクラスライプ 理の分岐がて、きます。 Windows からメッセ ージが送られてくると , 自動的に C 十十のメ はしますが・・ ラリ , ObjectWindows のコードを直接生成 ンバ関数呼び出しに変換してくれます。定 BC 十十 &AFX には ,API のリファレンス て、きるところて、す。もちろん C のコードも生 が 3 分冊てパッケージに含まれています。 義がされてない場合はデフォルトの処理を 成て、きます。実際に試してみるとなかなか とうりて、重くなったと思いました。この中 行ってくれるし , めんどうな記述も必要あ おもしろいものて、した。 ProtoGen のウイン りません。実にオプジェクト指向らしいア には当然 3.1 て、拡張された OLE やコモンダイ ドウの中にある , 生成されるターゲットの アログなどに関する記述が含まれています。 プローチだといえるて、しよう。 アプリケーションにメニューやダイアログ ProtoGen の追加はおまけとして , 付属の をマウスて、選んて、張り付けていくと , すっ Windows Ver. 3.1 マニュアルにもかなり手が加えられている きりとしてわかりやすい ObjectWindows の 対応の新機能 ようて、す。バーションナンバも 3.1 に変更さ コードがコメントつきて、生成されるのて、す。 これはとても楽て、す。 れています 0TurboDebugger のノヾージョン ObjectWindows のコードは , オプジェク は 3.0 のままて、すが , 当然デバッグカーネル Windows Ver. 3.1 て、は OLE (Object Lin は 3.1 対応に変更されていました。これは ト指向技術に関しては一日の長がある B 。 rl king&Embedding) が OS レベルて、サポート Fig. 25 BC + 十 &AFX3.1 Fig. 26 BC 十十 3.1 のアイコン 要 Eilc 0 ions 、 Yindow BORLÅND C + + &APPLICATION FRAMEWORKS FORWINDOWSAND DOS 材日 BORLAND 0 + & A 10 砂にを岱 緲 W 愛 0 し、、辞 5 田 , B 0 ー A N 0 特集 BorIand C 十十 Ver. 3.0 研究 57
Fig. Fig. 5 6 ObjectWindows アプリケーションの構造 MainWindow InitMainWindow( ) ↓ TApplication WinMain( ) ↓ Windows 特集・ Bo 面 + 3 』研究 数て、ある Run ( ) によって , 初期化とメッセ n のインスタンスを生成して , そのメンバ関 ectWindows て、は , 次て、述べる TApplicatio 相当するのが , WinMain( ) 関数て、す。 Obj Windows のプログラムて、 ,main( ) 関数に WinMain 使い方を説明していきましよう。 ます。以下 , それぞれについて , 具体的な クラスは Fig. 6 に示すような構成をしてい ↓ MakeWindow( ) TWindow TControI BC 十十 ObjectWindows クラスライプラリ Object TModule TAppIication TSc 「 0 阨「 TWindowsObject TDiaIog TFileDiaIog TInputDialog TSearchDialog TWindow TMDlFrame TMD ℃ lient TEditWindow TFileWindow TControl TScrollBar TStatic TEdit TListBox TComboBox TGroupBox TButton TCheckBox TRadioButton ↓ TDialog ExecDialog ( ) TControl ラジオボタン チェックボックス ボタン グループホックス コンボホックス リストボックス 工ティットできる文字列 文字列 スクロールノヾー ダイアログの部品の基本クラス ファイルに結合したエテイタ 工テイタ M 団のクライアント部分 M 団の枠ウインドウ ウインドウの基本クラス 文字列検索・置換ダイアログボックス 1 行入力ダイアログボックス ファイル選択ダイアログボックス ダイアログボックスの基本クラス ウインドウ , 部品の基本クラス ウインドウのスクロール処理 アプリケーションクラス DLL, アプリケーションの基本クラス ObjectWindows の基本クラス ージループの実行をするだけて、よいのて、す (List 14 ) 。 TAppIication TApplication は , Windows のアプリケー ションの単位となるものて , 通常 , ひとっ のプログラムにひとつの TAppIication が存 在します。 TApplication においては , ① MainWindow の設定 ②アクセラレータの設定 のふたつを設定します。これらは , TAppl ication を継承してメンバ関数を再定義すれ ばよいて、しよう 0List 15 て、は , MyApp とい うクラスを派生して , InitMainWindow( ) において , メンノヾ変数の MainWindow にメ インウインドウを生成・代入しています。 lnitlnstance() て、は , リソースからアクセ ラレータを読み出して , メンバ変数 HAccT able に設定しています。このとき , 親クラス のメンバ関数を呼び出すのを忘れないよう にしてください なお , アクセラレータを 使わないときには , lnitlnstance( ) を再定義 する必要はありません。 TWindow TWindow は , ウインドウを生成するクラ スて、あり , これを親クラスとして継承する ことて、 , いろいろな用途のウインドウを作 れます。 とくにメインウインドウとして生成する 特集 BorIand C 十十 Ver. 3.0 研究 41
is 、 De ・ Fig. 28 Window 3.1 対応のサンプルプログラム ーロに ~ ま・ $ 赴第ⅶßun compile 0 ⅶ s ⅲ面 w Fig. 27 仮想スクリー ンユーティリティ Amish 物 elcom に、 p 日厄 Op にれ 下ん 0 : 、ゆ Ⅱ ir に ctO ⅱい iowldemosl 0 司 lrwdemosl 恒ⅱ国 ト i 心月 lwmdemosl qram Manager け / 1.5 Atnifih Sys い ! 卩 . いⅢⅲいい ずいぶん効果的なのて、はないかと思います。 に付属しているから , プログラミングの仕 これは , Excel や MS-WORD されました。 安価て、使いやすい開発環境があれば , アプリ 方を学ぶうえて、も役に立って、しよう。さら て、はすて、に使えていた機能て、す。 Microsof ケーションも増えていくて、しようし , W ⅲ dows に , ObjectWindows が含まれている製品て、 t によると , この OLE 機能はアプリケーショ 自体 , 日本て、も , もっと広まるて、しよう。 は , ObjectWindows を使用したサンプルも ンの機能として実現されているものだとし て , ほかの会社のアプリケーションて、は使 含まれています。 C 十十のサンプルもわかり やすいものて、す ( Fig. 28 ) 。当然 , 作成され 用て、きませんて、した。 この OLE の機能は非常に便利て、す。たと たアプリケーションとともに配布可能な OL E クライアント用 , OLE サーバ用 , レジスト えばライトて、文章を作成中に張り込んだビ Windows Ver. 3.1 対応以外にも , 今回の ットマップにペイントプラシをリンクして レーションデータベース用の DLL も付属し バージョンアップて、いくつかの拡張がなさ おけば , そのビットマップをクリックする ています。これらの DLL を自分のアプリケ だけて、ペイントプラシが起動し , 編集後の れています。 ーションにつければ , Windows Ver. 3.0 上 まず , カラー構文工デイタ。ソースコー 結果も当然ライト上に反映されます。 て、も OLE の機能が使用て、きます。 DDE (Dynamic Data Exchange) のプロ ド中の予約語や , 演算子 , コメントなどを これがどういう事態を私たち Microsoft 以 グラミングをより簡単にするための DDEM 色やフォントて、区別して編集することがて、 外の Windows プログラマにもたらすかとい L. DLL も , ObjectWindows や C のサンプル うと , より小さくて軽く , 機能が限定され きるようになりました。この機能により , とともに含まれています。 たアプリケーションを作成し , ほかのアプ 入力時のタイプミスを減らしたり , ソース また , マルチメディア , Pen, TrueTyp コードを読みやすくすることがて、きます。 リケーションと連携して使用て、きるように e フォント (Fig. 29 ) などに対応したサンカレ なるというメリットが得られます。特定業 さらに , Borland の C 十十はすて、にテンプ プログラムや , ヘルプファイルもそれぞれ レート機能を先取りしていて , AT&T の 務向けの受託の仕事て、は , Windows をプラ 含まれています。マルチメディアのデモに C 十十 3.0 対応となりました。 ットホームに選んだ場合 , 「この部分は私共 入っていたターボな音には笑えました。 また , TP / Win1.5 て、は , Windows プログ て、ツールを作成します。 こて、は , ライト 若干マニュアルには情報の不足を感じま て、処理してください」とか , 自社製の既存の ラマ必携のリソース統合編集ツール , Reso すが , これらの Borland 言語製品を使用すれ Windows ツールを提供するとかがて、きるよ urceWorkshop がバンドルされました。これ ば ,WindowsVer. 3.1 の機能をフルに活用 は , ダイアログ , アイコン , フォント , メ うになるのて、はないて、しようか。 ビットマップなどをプロジェクト したアプリケーションを作成て、きます。 T Borland の言語製品の新しいバージョンて て、管理し , 視覚的に編集することがて、きる C 十十 / Win3.1 や , TP / Win1.5 て、あれば , は , この OLE の機能に関するサンプルプロ 強力なツールて、す。静的なデータて、あるリ たったの 149.95 米ドルて、すべてが揃ってし グラムとドキュメントファイルが提供され ソースをプログラムを逆コンパイルして編 まうのて、す。 ています。クライアント用やサーバ用 , い 集し直してしまうことまて、て、きます。つま Borland の言語製品は Windows の普及に くっかのサンプルが詳細なコメントととも 58 C MAGAZINE 1992 9 に 1 」以上
特集・ Borland い 3.0 研究 返します。 TMenuBar のコンストラクタに コントロール main( ) 渡す引数として , TSubMenu, TMenuItem TurboVision のアプリケーションは , 通常 のインスタンスを、、十〃演算子によって結合 ダイアログボックスのコントロールは , の DOS アプリケーションなのて、 , main ( ) 関 したものを渡します 0TMenuItem のコンス ダイアログボックスに対する相対座標によ 数が最初に実行されます。ここて、 , TAppl トラクタに渡す引数は , メニュータイトル , って位置を決めます。このときも , 左上点 メッセージ , ホットキー , ヘルプインデッ ication のインスタンスを生成し , そのメン と右下点の座標を TRect によって指定しま バ関数 run ( ) によって , メッセージループを クス , ホットキータイトルとなります。 す。コントロールは , insert ( ) によってダイ アログボックスに配置されます。 起動します。 メニュータイトルの文字列て、 , 、、气チル コントロールとのデータのやり取りは , ダ ) て挟んだ文字がショートカット文字とな アプリケーション getData( ),setData( ) によって明示的に行 ります。また , メニューラインは , newLin アプリケーションは , メニューバーとデ う必要があります。バッフアは , ObjectW e ( ) て、設定て、きます。 スクトップとステータスラインの 3 要素から indows のトランスフアノヾッフアと同様 , コ イベントハンドラ 構成されています ( Fig. 9 ) 。メニューバーは ントロールごとのバッフアを new の順番に集 説明を必要としないて、しよう。ステータス TurboVision て、は , イベントハンドラを自 めた構造体によって示します。 分て、用意する必要があります。それには , ラインとは画面の最下行て、ホットキーやメ チェックポックスやラジオボタンは , ひ 一項目の説明などを表示する部分て、す。 handIeEvent( ) という仮想関数を再定義し とつのまとまりにひとつの ushort 型が割り当 残りの部分がデスクトップて、あり , 生成さ ます (List 26 ) 。親クラスのハンドラて、拾わ てられています。チェックポックスて、は選 択された番号のビットが立ち , ラジオボタ れるウインドウの親となります (Fig. 10 ) 。 れなかったイベントについて , 処理を記述 TApplication は , 親クラスの TProglnit の していきます。 ンて、は選択された番号が代入されます。 コンストラクタを呼び出すときに , 上の 3 要 ウインドウの生成 素を初期化する関数へのポインタを渡しま サンプルプログラム す。その初期化関数をカスタマイズするこ TWindow のコンストラクタに ,TRect に よって位置と大きさを指定しますが , Obje とにより , メニューやステータスラインを ctWindows とはちがって , 左上点と右下点 付録ディスクに ,testl. cpp—test6. cpp と 設定て、きるのて、す。 の座標を指定することに注意しましよう。 いうサンプルプログラムを収録しておきま メニューの設定 ウインドウは , デスクトップに対して ins test6. cpp が TurboVision の使用例 ert ( ) を実行すると出現します。 て , 残りは ObjectWindows の例てす。 TurboVision て、は , メニューの設定にリソ また , ObjectWindows と TurboVison 共 ースファイルを用いず , TMenuBar, TSu ダイアログボックスの生成 bMenu, TMenuItem のインスタンスを生成 通のアプリケーションとして , アウトライ モードつきダイアログボックスは , デス ンプロセッサ「 Ofin 」 ( [ お詫び ] 付録ディ して行います。それには , TProgram の ini クトップに対して execView( ) を実行するこ tMenuBar ( ) というスタティックメンノヾ関 スクに wofin. id ファイルが抜けています。 とて、出現します。一方 , モードなしダイア 数を再定義します (List 25 ) 。 のファイルは次号に収録します ) を作ってみ ログボックスは , ウインドウと同様に inser initMenuBar( ) て、は , メニューの表示領 たのて、参考にしてください t ( ) て、出現させます。 域を設定したあと , TMenuBar を生成して イベント八ンドラ lSt Tu 「 boVision でメニューの設定 旧 1 : const int cmMyWin = 101 , cmMyDIg ニ 102 : 2 : 4 : TMenuBar* MyApp: : initMenuBar(TRect r) ( r. b. y : r. a. y + 1 ; / / 1 行確保 5 : return new TMenuBar(r, 6 : *new TSubMenu( ” -F ile ” , kbAltF) + *new TMenuItem( ”ー0ー四n", cmMYWin, kbF3' hcNOContext' 8 : *new TMenuItem( ”ー0ー四n ” , cmMYDlg, kbF3' hcNOContext• 9 : newLine() + 10 : *new TMenuItem("E-x-it", cmQuit, kbAltX' hcNOC0text' "Alt-X") 12 : 13 : } 1 : void MyApp: :handleEvent(TEvent& e) ( 2 : TAppIic.ation: :handIeEvent(e の : if (event. 響 t = evCommand ) 3 : switch (). message. command) 4 : 5 : case cmMyD lg : showMyWindow(); clearEvent(e); break; 6 : 7 : case cmMyD 1 g : showMyDialog() ; clearEvent(e); break; 8 : 9 : 10 : 11 : } 1 ヨ」 ~ 1 ョ一ョいョ 1 1 一、 ( 1 一一宿ョ ~ ー 特集 Borland C 十 + ver. 3.0 研究 49
' 92 年 8 月号特別付録 ( 5 " 1.2M バイト 8 セク タ / トラック MS-DOS フォーマット ) には , 次のプログラムが収録されています。 ①付録ディスクの説明 README ( テキストファイル ) ②フォーマットトランスレータ 「 Japan2HD 」 YJAPAN2HD くディレクトリ > ③テキスト整形プログラム「 Efin 」 YEFI N < ディレクトリ > ④アプリケーション起動 メニュープログラム「 GAS 」 幸いてす。収録したファイルは , *JAPAN2HD*JAPAN2HD. EXE という自動解凍圧縮ファイルとして収録し 、 0 テキスト整形プログラム 「 Efin 」 Frameworks と総称される ObjectWindows BorIand C 十十 Ver. 3.0 には AppIication 本誌特集をご覧いただけたて、しようか ? 「 Ofin 」 Fin 用アウトラインプロセッサ を得て収録しました。 も多く , 今回 , 著作権者 ( KOBA 氏 ) の了解 ーショナルだったせいか , 読者からの反響 の筆者てある野口雄平氏の紹介文がセンセ tor) てす。フリーソフトウェア最新レポート 介した GAS (Graphical Application Selec 簡単」の三位一体のメニュープログラムと紹 ポートて、「カッコいい & 使いやすい & 設定が 本誌 ' 92 年 4 月号フリーソフトウェア最新レ メニュープログラム「 GAS 」 アプリケーション起動 ました。 という自動解凍圧縮ファイルとして収録し *EFIN*EFINIOOM. EXE *EFIN*EFINIIOE. EXE には , ファイルをご一読ください。付録ディスク 詳しくは解凍後生成されるドキュメント 了解を得て再収録しました。 hi Kusakabe 氏 , Takuma Yamada 氏 ) の 続き著作権者 (Syohei Yamada 氏 , Youic てある Efin を本誌 ' 92 年 3 月号付録ディスクに が必要となります。そこて、 Fin の機能拡張版 は , テキスト整形プログラム Fin または Efin 「 Ofin 」 ( 本付録ディスクに収録 ) 実行に として作成されたアウトラインプロセッサ ws と TurboVision の共通アプリケーション 本号特集 Part2 て、解説した ObjectWindo と TurboVision というクラスライプラリが付 属しています。「 Application Framework s といわれてもいったい何がてきるのだろ う ? 」ということて , ObjectWindows と T urboVison 共通のアプリケーションを作成し てみようということになり , その結果誕生 したのが , Fin/Efin 用アウトラインプロセ ッサ「 Ofin 」て、す。 Ofin を実行するには , Ef in が正しくインストールされている必要があ ります。 : 本誌掲載プログラム YGAS くディレクトリ > ⑤ Fin 用アウトラインプロセッサ「 Ofin 」 YOFI N ⑥本誌掲載プログラム YCMAGA くディレクトリ > くディレクトリ > ⑦ READ. ME 参照ューティリティ README. EXE ( 実行ファイル ) 付録ディスクの説明 (README) に , 解凍 方法など , さらに詳しい説明が収録してあ ります。必ずご一読ください README はテキストファイル形式てす。 本誌付録ディスク収録の README プログラ ム , MS-DOS の TYPE コマンド , あるいは ご使用のエデイタ , ワープロソフトて読む ことがてきます。 フォーマットトランスレータ 「 Japan2HD 」 特別記事「フォーマットの壁を打破するフ オーマットランスレータ Japan2HD 」をご覧 いただけたてしようか ? Japan2HD とは , PC / AT マシン ( 互換機を含む ) の MS ー DOS 上て、 5 " フロッヒ。ーディスクドライプを使っ て日本形式 ( PC ー 9801 , FM, X68000 など ) の 5 " 2HD フロッビーディスクを読むためのデ バイスドライバてす。 PC / AT マシン ( 互換 機を含む ) て , このディスクを読むことはて きないかもしれませんが , お近くにメディ アコンバートてきる環境がございましたら Japan2HD をコヒ。ーし , お使いいただければ REFCN T TOKUSYU STRATE J2HD STEPC M SDOS TRYCPP DOJ I ESSENCE BOHYOH OUYOU CZATU OPPK X68K PUZZLE NIWA INFO : C + 十に実装するメモリ管理 : BorIand C 十十 Ver. 3.0 研究 : 実践アルゴリズム戦略 : フォーマットの壁を打破 : 実践 C プログラミング入門 : 新 MS-DOS 入門 : Try The C 十十 : 恥ずかしながらドジりました : プログラミングの工ッセンス : プログラミング道場 : 応用 C 言語 C の道具箱 : C 言語雑学講座 : ワンポイントプログラミング : X68k 活用講座 : C マガ電脳クラブ : 迷走プログラミング : インフォメーション READ.ME 参照 ユーティリティ ' 92 年 4 月号「新 MS-DOS プログラミング 入門」て、紹介した READ. ME 参照ューティリ ティ ( テキストファイルを画面上て読むプロ グラム ) の実行ファイル (README. EXE) を README と同じルートディレクトリに収録 しました。付録ディスクをセットしたドラ イプにカレントを移し README@ て README ファイルが画面に表示されます。 ディスク内容のお知らせ 167
特集・ Borland 3.0 研究 プされていました。それによると , BorIan d が Win32s と NT に関して開発環境をサポー トするということて、す。 Microsoft から直 に , Borland の 32 ビットのコンパイラを使用 して Win32s や NT 用のアプリケーションを 開発て、きるよう , ライセンスを受けるとの ことて、す。 Win32s により , 32 ビットの Windows アプ リケーションを 16 ビットの Windows て、コン パイルし直すことなしに動作させることが て、きます。 また NT に関しては , それ自体が 32 ビット の OS て、あり , Borland のコンパイラもそれ に対応するために 32 ビットのコードを生成 します。 Microsoft と Borland はこのニュー スリリースの中て、 2 社の関係が深いことを示 唆しています。 BorIand は Microsoft が今後 提供する OS すべてを自社の開発環境て、サポ ートするそうて、す。 文章中て、は Microsoft の副社長て、システム 部のポールマーリツツという人が , Borlan d のポヒ。ュラーな開発環境により 32 ビットへ の移行がスムーズに進むだろうとコメント を寄せています。サンフランシスコて、行わ れるⅱ n32 のデベロッノヾーズコンファレンス て、 BorIand C 十十 for Win32s & NT のデ モが行われ , バージョンも配布されるそ うて、す。 その特徴を以下に列挙します。 ・ 32 ビットの ANSIC, AT&TC 十十 3.0 対 応のコンノヾイラ ・ Windows NT 上でも動作する GUI の統合環 境 ・ ObjectWindows : 32 ビットへの移行が簡 単に行える ・ TurbO Debugger for Win32s & NT ・ 32 ビットの Turbo AssembIer ・ Resource Workshop BorIand の 32 ビットコンパイラは前々から 墫されていたことて、すが , こういう形て、世 間に顔を出すとは思いませんて、した。 IBM だけて、はなく , Microsoft の OS のチームとも かなり密につき合っているようて、す。開発 60 C MAGAZINE 1992 9 環境のトップペンダーなのて、すから , ぜひ OS を超えたサポートを望みます。とくに ObjectWindows を使用してアプリケーショ ンを作成していれば , GUI の壁を超えて , O S / 2 て、も Windows て、もあまりコードを書き換 える必要なしに移植が行えるようになると いうのは , パッケージソフトを開発するメ ーカーだけて、なく , 受託専門のソフトハウ スにもありがたいことて、す。 Borland は IBM と協力して OS / 2 Ver. 2.0 用の BorlandC 十十を開発しています。これ はもう一部に滝版が出回っていて , ' 92 年 12 月頃インターナショナル版が出荷されるそ うて、す。また , ObjectVision の OS/2 Ver. 2 . 0 対応版も発表されています。 筆者は VisuaI Basic 好きて、す。仕事には 使えませんが , 肩の力を抜いて Windows て、 遊べるいいツールだと思います。て、きれば この Visual Basic も OS / 2 版が出てほしいの て、すが , 無理て、しようか。 ObjectVision はよく Visual Basic と比較 されるビジュアルプログラミングッールて、 す。ただ , もっとも異なる点はコードを 1 行 も書かなくてもアプリケーションが作成て きることて、す。ビジネスルールと呼ばれる 流れ図を , Windows 上て、マウスを用いて作 成し , 処理の分岐を指示します。マルチイ ンデックスのデータベースが作成可能て、 , dBASE, Paradox, Btrieve のフォーマット が使用て、きます。別途にデータベースソフ トを用意する必要はありません。後はフォ ームを作ってイベントツリーに張り付けれ ばて、きあがり。作成されたアプリケーショ ンはランタイムとともに配布可能て、す。プ ログラミングッールというよりも , データ べースのフロントエンドという感じのツー ルて、す。 これらの OS / 2 Ver. 2.0 向けの開発環境 を Borland が整備してくれれば , OS/2 Ver. 2.0 の仕事がきてもあわてなくて済みます。 なんといっても IBM 一押しの OS / 2 Ver. 2. 0 て、す 0Windows に出荷べースの数て、差をつ けられていても , 業務て、導入されるケース はこれからも増えていくことて、しよう。何 せスビードも速いし , プリエンプテイプな マルチタスクの 32 ビット OS て、す。マシンパ ワーもそれなりに必要て、すが , それに見合 った機能を提供してくれています。 最近 , Borland の言語製品の DOS/V 版が ほしいという話をプログラマの間て、よく聞 きます。 Paradox と dBASE の DOS/V 版が出 荷されているのだから 衄がて、きないわ 「コロロ けがない。と , 思って Borland に問い合わせ たところ , 意外とあっさり教えてくれまし 現在開発中とのことて、す。本稿執筆時に は , まだ正式なニュースリリースはされて いませんが , TC 十十 /Win の DOS/V 版が ,9 2 年 9 月頃て、 , BC 十十の DOS / V 版が ' 92 年 11 月頃だそうて、す。 BC 十十はともかく , T C 十十 / Win は PC ー 9801 に機種依存している のはデバッガだけなのて、 , 簡単に移植て、き るとは思いますが。 以上 , 集められるだけの Borland の言語に 関する情報をお伝えしました。筆者のよう なプログラミングて、生活している者のため にも , BorIand には , なるべく早いバーショ ンアップを望みます。技術的に立ち遅れた ら開発ツールとしてはすぐに使えなくなっ てしまいます。 今後も OS を超えた開発環境のサポートに 期待しています。 おわりに
特集。 Borland い 3 』研究 TabIe 7 トランスファ用パッフアの型 クラス名 Fig. 7 モードっきダイアログボックスのトランスファ バッフアの型 なし WORD WORD なし なし (char [LEN] ) char [LEN] TListBoxData * TComoBoxData * TScrollBarData TButton TCheckBox TRadioButton TGroupBox TStatic TEdit TListBox TComboBox TScrollBar * LEN はコンストラクタに渡した最大文字数 * TStatic はテフォルトでトランスフアされない ついて Table 7 のような型の変数を使用しま アへの参照も指定します。 プロンプト文字列と文字列を受け取るバッ フアとそのサイズを指定します。バッファ す。 new て、生成する順番に従ってこれらを構 TEditWindow 造体にまとめたものをバッフアとします。 にはデフォルト文字列を入れておくことが なお , TStatic については , デフォルトて、ト て、きます。 TEditWindow は , ウインドウ全体が複数 ランスフアされないのて、 , EnableTransfer 行工ディットコントロールて、あるウインド 、 TSearchDiaIog ( ) を実行した場合に ーかぎってノヾッフアに加 ウて、す。 TSearchDialog は , 文字列検索・置換の 検索・置換のためのハンドラが定義済み えます。 ためのダイアログボ、ツクスて、す。検索・置 具体例を List 24 に示しておきましたのて、 なのて、 , メニューに CM EDITFIND, CM 換文字列のエディットコントロールのほか , 参考にしてください EDITREPLACE, CM EDITFINDNEX T を ID とするメニュー項目を追加するだけ 大文字・小文字の区別 , 全置換を行うかど て、 , 検索・置換を行えます。 うか , 置換のたびに問い合わせをするのか どうかのチェックボ、ツクスがあります。 ー TFileWindow コンストラクタには , 検索ならば SD SE ARCH, 置換ならば SD REPLACE のリソ TFileWindow は , TEditWindow を継承 ObjectWindows には以下のような便利な ース ID を指定します。また , 検索・置換情 してファイル入出力を可能としたクラスて、 クラスがあって , ューザがわざわざ一から 報が格納される TSearchStruct というバッフ 定義しなくてもそのまま使うことがて、きま す。 す。 トランスファ TransferBuffer ←バッフアのホインタ バッファ→コントロールへテータ転送 OK ホタンが押された場合には , コントロール→バッフアへテータ転送 ↓ ↓ 応用クラス lSt TFileDiaIog TFiIeDialog は , ファイル名入力のための ダイアログボックスて、す。コンストラクタ には , オープン用には SD FILEOPEN, セ ープ用には SD FILESAVE のリソース ID を 指定し , また , ファイル名を受け取るため のバッファ (char CMAXPATH] ) へのポイ ンタを渡します。 TlnputDialog TInputDialog は , 1 行入力のためのダイア ログボックスて、す。 コンストラクタには , 1 : 〃詳しくは test5. cpp を参照 2 : s truct { WORD check; 3 : 4 : WORD radiol, radi02; char editCLEN] ; 5 : 6 : PTListBoxData plbox; 7 : PTComboBoxData pcbox ; TScrol lBarData scr; 8 : 9 : } diaIogData; 10 : 11 : TListBoxData lbox; 12 : TComboBoxData cbox : 13 : 14 : class MYDlg : public TDiaIog { 15 : public: 16 : MyDlg(PTWindowsObject p) : TDiaIog(), "CONT DLG") { new TCheckBox(this, 105 , の ; new TRadioButton(this, 107 , の : 18 : new TRadioButton(this, 108 , の : new TEdit(this, 101 , LEN); 20 : new TListBox(this, 102 ) : 21 : new TComboBox(this, 104 , LEN) : 22 : new TScroIIBar(this, 106 ) : 23 : TransferBuffer ニ (void*)&dialogData; 24 : 25 : 26 : } ; 特集 BorIand C 十十 Ver. 3.0 研究 47
特集・ Borland 3 』研究 Borland C 十十 & Application Frameworks Ver. 3.0 BorIand C 十十 &Application Framewo rks Ver. 3.0 は , あらゆる機能をサポート しており , 現在のところ MS-DOS と MS-W indows アプリケーションの開発における最 強の処理系といえるて、しよう (Table 1 参照 ) 。 BC 十十 & AFX3.0 がサポートしているの は , ANSIC と AT&TC 十十 3.0 [ 1 ] のサポ ート , グローバルな最適化機能 , より高速 になったコンパイラ ,DPMI/VCPI のサポー ト , MS-DOS 上と MS-Windows 上て、動作す る統合環境 , MS ー C 互換のライプラリ関数と 年を要しました。 EasyWin, MS-DOS 用と MS-Windows 用 のデバッガとプロファイラ , アセンプラ , WinSight など MS-Windows アプリケーショ ン開発のためのツール類 , MS-DOS 用と M S-Windows 用のユーザインタフェイスのた めのクラスライプラリ , そしてランタイム ライプラリやクラスライプラリのソースコ ードが提供されます。すべてをインストー ルするために必要となるハードディスクの 容量は 40M バイトを超えています。 それて、もなお , BorIand が追及する開発環 境の限界て、はありません。最新の情報て、は MS-Windows Ver. 3.1 に対応した BorIan dC 十十 Ver. 3.1 て、は , 386 レジスタの利用 や MS-Windows 上の IDE て、もグローバルな 最適化オプションをサポートしているよう Table 1 Borland C 十十 &Application Frameworks Ver. 3 ℃の機能 内 て、す。 より便利て、高い機能をより早く提供する ことが効率のよいアプリケーション開発に つながる , これが Borland の信念て、あるよう て、す。 [ 注 ] [ 1 ] マニュアルなどて、は AT & TC 十十 Ve r. 2.1 に template のサポートを追加した と書かれていますが , AT & T C 十十 V er. 3.0 がサポートする予定だった例外 処理をサポートしなかったため , 実質 的に AT&T C 十十 Ver. 3.0 レベルが サポートされていると見なすことがて、 容 きます。 機能 AppIication Frameworks ObjectWindows Turbo Vision WinSight MDI, DDE, DLL, そのほか ライプラリソースコード Borland C 十十 Turbo C 十十 fo 「 Windows Tu 「 bo Debugger(DOS/Win) Resource WO 「 kshOP EasyWin TD286 / TD386 Tu 「 bo ProfiIer(DOS/Win) Turbo Assembler オプジェクト指向プログラミングを支援するクラスライプラリ群 MS-Windows 用のフレームワーク MS ー DOS 用のフレームワーク MS ー Windows リソースを一元的に管理し , 視覚的に編集 MS ー Windows 上で MS ー DOS の標準入出力をエミュレート MS-Windows メッセージを監視するツール MS ー Windows の特徴的な機能を利用 ( 87 工ミュレータ , BGI, オーバレイを除いた ) 標準ライプラリのソースコード MS ー DOS 上の統合環境 ( DOS や Windows のアプリケーション開発 ) MS-Windows 上の統合環境 (Windows のアプリケーション開発 ) MS-DOS/Windows アプリケーションのテパッグ プロテクトモードを使った省メモリデバッガ DOS/Windows アプリケーションのホトルネックを見つけるためのツール オプジェクト指向への拡張が施された高速アセンプラ 特集 Borland C 十十 Ver. 3.0 研究 29