#pragma twice

KAB-studio > プログラミング > #pragma twice > 162 Version 9.01 SDI アプリを作ろう!

#pragma twice 162 Version 9.01 SDI アプリを作ろう!

前のページへ 表紙・目次へ 次のページへ

 Version 9.01
SDI アプリを作ろう!

今回からは SDI アプリケーションについて見ていきます!
で、 SDI って何?
 SDI は Single Document Interface の略。〈シングル〉は〈ひとつ〉。
〈ドキュメント〉は〈文章〉って意味だけど、これは〈ファイル〉って読み
替えてもいいかな
〈インターフェイス〉って GDI のと同じ? なら〈接触面〉って教わっ
たけど
そう、言い換えると〈触れる部分〉。ここではユーザーと触れる部分って
ことで、ウィンドウのことだって思って
〈インターフェイス〉って言葉、いろんな意味になってない?
日本語にしにくい単語なんだよね。しかもプログラミングには頻繁に出て
くる単語だし。実際に持って操作する部分って考えるといいかも
 GDI はペンとかブラシだからそうだよね。 SDI もそう?
なんなくね。ってゆーかそもそも SDI が何かを説明しないと
そうそう
まず、話の中心は、ファイル
さっきの用語で言うとドキュメント?
そう。ここではとりあえずファイルでいくね。 SDI アプリケーションは
〈ひとつのファイルを開くたびにひとつのプロセスを実行する〉ものを指し
ます
プロセスって Version 8.04 ( No.146 ) でやったヤツ?
そうあれ。ありきたりなところで言うと、メモ帳とかはそうだね
確かに、テキストファイルダブルクリックするたびにメモ帳ができるね
でも、アプリの中にはいっぱいファイルを開いてもひとつしかプロセスが
作られないのがあるでしょ
ワードやエクセルはそうだよね
そういうのを MDI アプリケーションっていいます
 M は Multi の M ?
正確には multiple だけど同じだね。そう、 SDI はシングルでひとつだ
ったけど
 MDI はマルチでいっぱいなわけね
あともうひとつ、ダイアログアプリケーションがあります
あれ、ダイアログも?
一応ね。ダイアログアプリケーションは〈ファイルを開かないアプリ〉っ
てことになってます
確かにファイル開くのって少ないね。でも……
そう、この辺は実際にはあいまいだから、難しく考えない方がいいよ。た
とえば、 VC は SDI だと思う? MDI だと思う?
そりゃ MDI でしょ、いっぱいソースファイル開けるもん
ところが VC ってワークスペース単位だと……
あっ! .dsw ファイルだと VC ひとつでひとつしか開けない!
でしょう。だから実際には SDI かな。こういう部分が、ドキュメントと
ファイルの違いかな
どゆこと?
ドキュメントは作成したデータひとまとめ、つまり必要なファイルがいく
つか集めたもの、って考えれば
 VC だとワークスペースがドキュメントとしてひとまとめってわけね
たぶんそういう感じかな。で!
で?
ここで SDI を取り上げる理由のひとつは、ファイルの管理とか、ウィン
ドウの処理、 MFC の難しいとことか勉強できるから
難しいとこは嫌
……もうひとつの理由は、メッセージキューのための足がかり
メッセージキュー?
そう、これは次の章、 Version 10 の話
これまでのパターンだと、 MFC 使わないでって話?
そゆこと。ま、普通のウィンドウならではの面白いところもあるから、そ
ういうとこもみつつ、ってことで
はーい。じゃ、まずはプロジェクト作るんでしょ?
そう。いつも通り
新規作成でプロジェクトっと
タイプは【MFC AppWizard (exe)】で
ここまではいつものダイアログ作るときと同じね〜。プロジェクト名は 
SdiTest にしちゃうね
うんそれでいいよ。で、次のダイアログ
あ! ここに SDI 、 MDI 、ダイアログベースってある!!
ここで SDI を選べば SDI アプリが、 MDI アプリを選べば MDI アプリを
作ることができます
いつも見てたのに気付かなかった……
もちろん【SDI】を選んで、【ドキュメント/ビューアーキテクチャーの
サポート】はそのままオンにして、【次へ】を押して
【データベースのサポート】は?
【しない】で。次のダイアログの【複合ドキュメント】は【しない】、
【オートメーション】はオフ、【ActiveX コントロール】はオンで
つまりそのままねー。その次の……4ページ目もごちゃっとあるよ
これもそのままで。あ!
な、なに?
注! この部分も含めて、当分の間は Visual C++ 6.0 を元に話を進めて
います
そういえば、この前 Visual Studio.Net とかゆーのが出たんだったよ
ね。なんで水希ちゃん使わないの?
うーん、ちょっと使いにくいかなと思って……っていうのは個人的な考え
だけど、純粋にプログラミングの勉強をするんなら、 VC6 の方がいいと思
うから
だから引き続き VC6 、ってわけね
そういうことで。話を戻して、次の5ページ目もそのままで
この辺のってあとでまた教えてもらうの?
すぐ教えられるのもあるから、ひと通りは目を通しておいてね
目を通すだけしかできないけど……
6ページ目もそのままにして【終了】ボタンを押して、最後の【新規プロ
ジェクト情報】も【 OK 】押して閉じて
ほい。うん、普通にプロジェクトができた……みたい
何はともあれ、とりあえずビルドして実行してみて
ほい。おおっ!! なんか普通のウィンドウができてる! ちゃんとツー
ルバーもあるし!
今までダイアログしか作ってこなかったから新鮮かもね。でも、これも 
MFC のおかげ
ってことは、 SDK だけだとこれって難しい?
難しいどころじゃないかも……ま、 SDI アプリを作るんなら MFC を使っ
た方が楽だってことは確かだから
それでも、次の章では MFC 使わないでやるんでしょ?
これと同じもの作ったりはしないから大丈夫。この SDI アプリを MFC が
どう作ってるか、ってことを理解するためのものだから
 MFC を理解するためのものってことねー。で、どうするの?
まずは全体像を見てもらおうかな。 Spy++ を起動して
ウィンドウを見るわけねー。あ、 Spy++ は Version 3.4 ( No.029 ) や 
Version 3.13 ( No.038 ) を参考にね
じゃ、【ウィンドウ検索】ダイアログで照準を……【無題 - SdiTest】タ
イトルバーに合わせて
このウィンドウに黒縁がついた
この、タイトルバーを持ってる一番外側のウィンドウが、 SdiTest の中
心ウィンドウ
これが一番重要ってことね
このウィンドウを【フレームウィンドウ】って言います
ふれーむうぃんどう?
フレームは〈額縁〉とか〈枠〉って意味
そういえば眼鏡のフレームとか言うね
この額の中には、ウィンドウがいっぱい入ってます。まず真ん中の白い大
きな四角に照準を合わせて
お、ちょうどこの白い四角に黒縁がついた。ってことはこれがウィンド
ウ?
そゆこと。このウィンドウは【ビューウィンドウ】って言って、絵や文字
を表示する部分として機能します
表示のためのウィンドウ……あ!!!
ど、どうしたの?
それって、 Version 7.01 ( No.121 ) のときの、ダイアログの上にスタ
ティックコントロール置いたのと同じこと!?
そう、あれと同じ考え方
あのときのダイアログがフレームウィンドウ、スタティックコントロール
がビューウィンドウってわけねー
まぁ、本当は僕がこの SDI を真似たんだけどね
……この SDI のの方が先なんだ……
いいところ、便利なものは活用しなきゃ。話を戻して
他のとこもウィンドウなの?
色々試してみて
ほーい。あ、ツールバーがウィンドウだ! しかも2重!
メニュー下の横棒、の中にボタンをまとめたのが乗ってる感じだね
でもメニューはウィンドウじゃないんだね
メニューはフレームウィンドウの一部だからね
黒縁がフレームウィンドウに着いちゃうものね。あと……ステータスバー
もウィンドウだね。右下の小さい枠は別ウィンドウ……じゃないんだ
というわけで、 SdiTest は、フレームウィンドウの上に4つのウィンド
ウが乗ってるってわけ
ひゃー、なんかすごいね
確かにねー。さっきも言ったけど、これだけのウィンドウがちゃんと管理
できてるのは MFC のおかげ
なんだかんだ言っても MFC ってすごいのね……
……ちゃんと、ってのは言い過ぎか……
言い過ぎ?
なんか……落ちること多い……
え?
ううん、なんでもないから。えっと、ウィンドウはこの辺にして、次は 
VC6 のワークスペースの Resource 見て
……はいはい。お、ダイアログよりもかなり増えてる!
増えてるのは【Accelerator】【Menu】【String Table】【Toolbar】だ

 String Table は Version 3.16 ( No.041 ) で見たけど、他は初めて。
って言っても、見ればだいたい分かるけど……最初の以外
 Accelerator は〈アクセラレーター〉って言って、簡単に言うとショー
トカットキーのこと
コントロールキーと一緒に何か押すってあれ?
そうあれ。ここに登録すると、メニューを登録したキーで実行できるよう
になるから
へー。リソースとしてここにあるってことは、これは MFC だけのじゃな
いんでしょ?
そう、ウィンドウズのシステムのひとつ
結構便利なの揃ってるのねー。それに、メニューもツールバーも、やっぱ
りウィンドウズのシステムのってことなんでしょ? 思ったよりもいたれり
つくせりなのねー
 VC で MFC だけでやってると全部 MFC がやってるみたいだけど、そのほ
とんどはウィンドウズが最初から提供してくれるものだからね
あれ? ってことはツールバーって MFC 使わなくても使えるの?
使えるけど、管理が難しいって話
 MFC はその辺をやってくれてるわけね
そゆこと。最後に、同じくワークスペースの ClassView を見て
お、クラスも増えてる!
ダイアログの時にあったのは【CAboutDlg】【C(アプリ名)App】
【C(アプリ名)Dlg】
最後のダイアログのクラスがなくなって【CMainFrame】【CSdiTestDoc】
【CSdiTestView】が増えてる。あ! フレームとビュー!
そゆこと。 CMainFrame はフレームウィンドウを、 CSdiTestView は
ビューウィンドウを管理するためのクラス。ちなみに両方とも CWnd から
継承してきたクラスです
ウィンドウなんだから当然よね。 CSdiTestDoc は?
これはドキュメントを管理するためのクラス
お! ここでドキュメントが出てくるんだ。最後の Doc が document の
略なわけねー
で、ここで注目して欲しいのは、ドキュメントとビュー、両方のクラスが
あるってこと
うん、あるね。……あれ、どっかで聞いたフレーズ……
さっき【ドキュメント/ビューアーキテクチャー】って出てきたでしょ
あ!
これは MFC の用語で、こういうふうにドキュメントクラスとビュークラ
スを対にして使うことを指します
さっきこれを選んだからこのクラスが作られたんだ
と、いうわけで SDI には面白いとこが結構あります。火美ちゃんは何か
ら見ていきたい?
そうねー……メニュー見てみたい!
じゃ、それから見て行きましょう!

/*
    Preview Next Story!
*/
あ、メニューって難しい?
難しくないよ。リソースの一種だから
ツリーコントロールみたいな感じ?
使い方はかなり違うけど、でもメニューの方が簡単だから
なら安心ね
というわけで次回
< Version 9.02 メニューってなんなの? >
につづく!
でも少ししたら難しくなるけど
あ、そしたらあたし休むから
僕1人で語れと?
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。