2010.5.20.
石立 喬
Visual C++ 2010 Expressの易しい使い方(2)
――― プログラムの実行結果をフォームに出力する―――
ここでは、本格的とは言えないが、簡単なプログラムの実習用として使えるWindowsプログラムの作成方法を説明する。キーボードからの入力はできないが、プログラムの実行結果を画面に出力することができる。
これを基礎にして、GUIコンポーネントが利用できる本格的なプログラムに進むことができる。
Windowsアプリケーションは、Microsoftの提供する標準的なWindowを使用するのではなく、CLR(Common Language Runtime、共通言語ランタイム)と.NET Frameworkによる、より汎用的な独自のWindowを使用する。このWindowは「Form」と呼ばれ、文字や数値は、画像として「Form」に描画して出力する。
残念ながら、CLR使用の場合、折角のIntelliSense(クラスメンバーやメソッドの引数など入力候補をガイドしてくれる機能)、Brace
matching(括弧の対を自動的に作る)、Error markers(構文的なエラーがあるときに、赤い波線のアンダーラインで表示する、squiggleと呼ばれる)がなく、Visual
C++ 2010の統合開発環境の価値が激減してしまう。
本文で紹介する使用範囲では、Visual C++ 2010 Expressよりも旧版の方がはるかに使い易い。
プロジェクトの新規作成とフォームの準備
1)デスクトップから、「Visual C++ 2010」のアイコンをダブルクリックする。
2)「スタート ページ」のウインドウで、左側上方にある「新しいプロジェクト」をクリックする。
3)「新しいプロジェクト」ウインドウが開くので、左の欄の「Visual C++」の下の「CLR」を選択し、右の欄で、「Windows フォーム アプリケーション」を選択する。「CLR」はCommon Language Runtime(共通言語ランタイム) の略で、中間言語を生成しておき、実行時に対応する環境に合わせてネイティブコードに変換するので、ネットワーク上での使用に便利である。
4)下方の「名前」欄に希望するプロジェクト名(例えばC1003A)を入力する。その他はデフォルトのままにして、「OK」をクリックする。
図1は、選択と入力が終わって、「OK」をクリックする直前の「新しいプロジェクト」ウインドウを示す。
図1 選択と入力を終わった「新しいプロジェクト」ウインドウ
5)図2に示すような「Formデザイナ」ウインドウが開き、「Form1」のスケルトンができている。サイズは、白い四角形のハンドルをドラッグして変更することができるが、今回はデフォルトサイズのまま使用する。
図2で、左側は「ソリューション エクスプローラ」、右は「Formデザイナ」の一部である。
図2 最初に現れる「Formデザイナ」の一部
6)「Formデザイナ」上の「Form1」の中央部で右クリックし、「プロパティ」を選択すると、「プロパティ」ウインドウが現れる。
7)「プロパティ」ウインドウで、「表示」欄の「BackColor」をクリックすると、右側にプルダウンメニューを開くための矢印が現れるので、それをクリックし、開いたリストから「Window」を選択する。これにより、「プロパティ」ウインドウの「BackColor」の右に「Window」と表示され、「Form1」の中央部の色が白色に変わる。
8)同様に、「表示」欄の下方にある「Font」をクリックすると、右端に四角い印が現れるので、それをクリックして「フォント」ウインドウを開く。「フォント」ウインドウの「フォント名」をデフォルトの「MS UI Gothic」から「MSゴシック」に変更し、「スタイル」は「標準」、「サイズ」は「9」のままにして、「OK」をクリックする。
9)同様に、「Text」をクリックして選択し、右にあるデフォルトの「Form1」を「Back space」キーで消し、タイトルとして、代わりに「三角関数表」(一例、作成するプログラムが三角関数表であるので)と入力し、「Enter」を押す。
図3は、上記操作後の「プロパティ」ウインドウの一部を示したもので、「Back Color」、「Font」、「Text」が、それぞれ変更されている。
図3 変更された「プロパティ」ウインドウ
数値や文字を出力(描画)する方法
.NET Frameworkを用いて、フォーム上に数値や文字を出力するには、数値を数字として文字列化した上で、グラフィックの対象として、フォーム上に描画する。
Graphicsクラスのメンバーメソッドを呼び出すハンドルを、あらかじめ
Graphics^ g=e->Graphics;
として設定しておき、以降は、このgを使う。eは、プログラムが呼び出されるときに渡されるイベントハンドラである。
文字列の出力は、
g->DrawString(“文字列”,font,brush,x,y);
を用い、フォント、色(brushで定義)、位置情報を常に含む。x、yはint型ではなく、float型である(.NET流に言うと、それぞれInt32型、Single型)のは不思議である。int型を使用すると、ビルド時に警告が発せられるが、無視しても良い。
fontは、常に同一のものを使用する場合は、「Form1」の「プロパティ」で設定しておくと、以降は「Font」と指定するだけで十分である。
brushも、標準的なものから選ぶ場合には、たとえば、Brushes::Brack などが使える。
結局、規定のフォントで、黒で出力したい場合には、
g->DrawString(“文字列”,Font,Brushes::Brack,x,y);
のように簡単になる。
数値を文字列化する方法
書式設定ができる方法に、
String^ string1=String::Format(“n={0,2} d={1,7:F5}”,n,d);
などによる文字列の生成がある。
これについての詳細は、「Visual C++ 2008 Express Editionの易しい数値計算(2)」に詳しく述べてあるので、参照されたい。
プログラムはForm1_Paintに記述する
Form1_Paint()は、プログラムを起動した直後や、ウインドウが隠れていたのが戻った場合に呼び出されるメソッドで、簡単なプログラムでは、全てのコードをここに記述するだけで良い。
Form1_Paint()を作成するには、「プロパティ」ウインドウの「イベント」(稲妻が描かれている)ボタンをクリックし、「表示」欄の「Paint」をダブルクリックする。図4は、この状態を示す。
これにより、Form1_Paint()メソッドのスケルトンが「Form1.h」にできて、「コードエディタ」ウインドウに示される。
図4 「プロパティ」ウインドウで作成する「Form1_Paint」
プログラムの作成
「コードエディタ」の「Form1_Paint()」メソッドのスケルトンに対し、図5のように入力する。
図5 コードを書き込んだForm1_Paintメソッド
プログラムの説明
String^などの「^」は使用終了後に自動的にガーベージコレクション(garbage collection、メモリ領域の開放)されるオブジェクトに対するハンドル(ポインタのようなもの)である。
System::Forms::PaintEventArgsクラスを引数にして、そこからGraphicsクラスを導出する。
ここでは、Mathクラスを多用している。C言語のように、#include <math.h> を記述する必要はなく、自動的に組み込まれている名前空間Systemで呼び出すことが出来る。
Mathクラスのメソッド(関数)には、
double Sin(double)
double Cos(double)
double Pow(double,double)
など多数が用意されており、Mathクラスのフィールド(定数)には、
double E
double PI
がある。
使用時には、クラス名のMathを頭につけてMath::Sin()のようにして使用する。
プログラムのビルド
「統合開発環境」のメニューから、「デバッグ」→「ソリューションのビルド」を選択し、「出力」ウインドウの正常終了を確認する。
プログラムの実行
キーボードから、「Ctrl」+「F5」を押すと、「フォーム」が画面上に表示され、期待通りの表が得られる。メニューから「デバッグ」→「デバッグ開始」(キーボードからの「F5」と同じ)を選択しても良い。
図6は、プログラムの実行結果を示す。
図6 プログラムの実行結果
「Visual C++ の勉強部屋」(目次)へ