2013.6.5.
2015.11.23. 図11のプログラムで、"MS 明朝"を"MS 明朝"に変更、結果の図12も変更
石立 喬

Visual Studio 2012 Expressの易しい使い方(2)

――― プログラムの実行結果をWindowsフォームに出力する―――

 Visual Studio 2012 Expressでは、Visual C++に、Windowsフォームアプリケーションのテンプレートがなくなった(BasicとC#にはある)。このため、従来使用していたWindowsフォームアプリケーションは、作成に、すこし手間がかかるようになった。コード作成は、IntelliSense(入力候補の表示、メソッドの引数の並びと型の表示など)が軽快に作動するので、ミスを防止できる。

Windowsフォームプログラムの構成法
 Windowsフォームプログラムの主要部は、「MyForm.h」と言うヘッダ−ファイルに記述する。これは、従来「Form1.h」と呼ばれたものである。他に、プログラムを起動するための「<プロジェクト名>.cpp」が必要で、main関数を記述する。
 Vusual C++ 2010 Expressなど、過去のIDEでは、これらがテンプレートによって自動的に生成され、Windowsフォームアプリケーションの作成が容易であった。しかし、Visual Studio 2012 Expressを、Visual C++で使用する場合、Windowsフォームアプリケーションのテンプレートが存在しないので、(1) 「空のCRLプロジェクト」を作成し、(2)そこに 「Windowsフォーム」を追加し、(3) そこで用意される、空の「MyForm.cpp」を「<プロジェクト名>.cpp」に書き換え、(4) そこにmain関数を記述する、の手順を必要とする。

プロジェクトの新規作成とフォームの準備
1)デスクトップから、「Visual Studio」のアイコンをダブルクリックする。
2)「スタート ページ」のウインドウで、左側にある「新しいプロジェクト」をクリックする。
3)「新しいプロジェクト」ウインドウが開くので、左の欄の「Visual C++」の下の「CLR」を選択し、右の欄で、「空のCLRプロジェクト」を選択する。
4)下方の「名前」、「場所」、「ソリューション名」欄を確認または変更し、その他はデフォルトのままにして、「OK」をクリックする。
 図1は、選択と確認が終わって、「OK」をクリックする直前の「新しいプロジェクト」ウインドウを示す。


図1 選択と入力を終わった「新しいプロジェクト」ウインドウ


5)空のCLRプロジェクトウインドウが開く(空なので何もない)。
6)メニューから「プロジェクト」→「新しい項目の追加」を選択する。
7)図2に示すような「新しい項目の追加」ウインドウが開くので、左欄で「Visual C++」→「UI」(ユーザインターフェイス)を選択する。右欄で「Windowsフォーム」が選択されていることを確認して、「追加」をクリックする。


図2 次に現れる「新しい項目の追加」ウインドウ


8)「MyForm.h」ができ、図3に示すように、「MyForm.h[デザイン]」欄に、デフォルトのWindowsフォームが表示される。


図3 フォームが画面上に表示される


エントリーポイントの作成
 エントリーポイントとは、プログラムを起動したときに、最初に実行するプログラムであり、具体的にはmain()関数のことである。
1) 図4に示す「ソリューションエクスプローラ」(画面の右側にある)で、「ソースファイル」を展開して、「MyForm.cpp」を表示する。


図4 書き換え前の「ソリューションエクスプローラ」に「MyForm.cpp」がある


2)「MyForm.cpp」を右クリックし、「名前の変更」を選択して、「Project1.cpp」(一例、プロジェクト名に合わせる)に書き換える。図5は、書き換え後の「ソリューションエクスプローラ」である。

図5 「Project1.cpp」に書き換えた


3)「ソリューションエクスプローラ」で、「Project1..cpp」をダブルクリックすると、「コードエディタ」部に、「#include "MyForm.h"」だけのスケルトンが表示されるので、図6のように、プログラムを追加する。「STA」は、Single Thread Apartment のことで、一個のスレッドからのメソッドしか実行しないことを意味し、WindowsアプリケーションはSTAにしておく必要がある。


図6 「Project1.cpp」に、エントリーポイントとしてのmain()を記述する


プログラムをビルドし、実行させてみる
 ここまでの段階で、誤りなく、プログラムが作成されていることを確認する。
1)メニューから、「ビルド」→「ソリューションのビルド」を選択する。
2)正常であれば、図7のように、「出力」欄に、「1 正常終了」と表示される。


図7 「ソリューションのビルド」を実行し、正常に終了した


3)「デバッグ」→「デバッグなしで開始」を選択する。
4)空のWindowsフォームが表示される。

Windowsフォームの細かい設定
 「フォームデザイナ」(「MyForm.h[デザイン]」とある)上に表示されているフォームの中央部で右クリックし、「プロパティ」を選択すると、「プロパティ」ウインドウが、右側に現れる。  図8は、「プロパティ」ウインドウのうち、「配置」欄を展開した状態を示す。デフォルトのままで、まだ変更を加えていない。「配置」欄で変更を必要とするのは、「Size」のみであるが、当面は、デフォルトのままにしておき、あとで、「コードエディタ」上で修正する。


図8 デフォルト状態の「プロパティ」ウインドウの一部


1)背景色の設定 ----- 「プロパティ」ウインドウで、「表示」欄の「BackColor」をクリックすると、右側にプルダウンメニューを開くための矢印が現れるので、それをクリックし、開いたリストから「Window」を選択する。これにより、「プロパティ」ウインドウの「BackColor」の右に「Window」と表示され、「MyForm」の中央部の色が白色に変わる。
2)フォントの設定 ----- 同様に、「表示」欄の下方にある「Font」をクリックすると、右端に四角い印が現れるので、それをクリックして、「フォント」ウインドウを開き、「フォント名」を「MS Pゴシック」にし、「スタイル」は「標準」、「サイズ」は「12」にして、「OK」をクリックする。これにより、プログラム中で、「Font」と記述すると、デフォルトで、このフォントが使える。
3)タイトルの設定 ----- 同様に、「Text」をクリックして選択し、右にあるデフォルトの「MyForm」を「Back space」キーで消し、代わりに「初めてのプログラム」(一例)と入力し、「Enter」を押す。
 図9は、上記操作後の「プロパティ」ウインドウの一部を示したもので、「Back Color」、「Font」、「Text」が、それぞれ変更されている。


図9 変更された「プロパティ」ウインドウ


Windowsフォームのプロパティを設定するプログラム(自動的に作られている)

 図10に示すように、コードエディタ部には、さきに、「プロパティ」ウインドウで設定したフォームのデザインがコード化されている。原則的に、このプログラムをいじる必要はない。「このメソッドの内容をコードエディタで変更しないでください」と注意書きがあるが、ここで内容を修正するのは便利で実際にやってみても(「ClientSize」はここで変えた)、特に問題は生じなかった。


図10 Windowsフォームのプログラム(自動作成を一部修正)


ウインドウに出力するプログラムを記述するMyForm_Paintの準備

1)「プロパティ」ウインドウで、上部の、右から2番目の「稲妻」(イベント)ボタンをクリックする。
2)新しく展開された「プロパティ」ウインドウの最下部にある「表示」欄の「Paint」をダブルクリックすると、左の「コードエディタ」部に、「MyForm_Paint()」のスケルトンができるので、MyFormウインドウに表示するためのプログラムは、ここに記述する。

数値や文字をフォームに出力(描画)する方法
 図11は、MyForm_Paintに記述したコードを示す。フォーム上に文字や図形を出力するには、これらをすべて画像として扱うので、Graphicsクラスのメンバーメソッドを呼び出すハンドルを、
    Graphics^ g=e->Graphics;
として設定しておき、以降は、このgを使う(色の構成要素に、r、g、bなどを使用する場合には、gではなく、grなどとする)。eは、MyForm_Paint関数が呼び出されるときに渡されるイベントハンドラである。プログラムの内容は、従来のVisual C++で説明したものと、全く同じなので、詳細は省き、プログラム内にコメントするに止める。


図11 Windowsフォームに出力するためのプログラム(これが主要部)


プログラムの実行
 既述の方法で、プログラムをビルドし、実行させると、図12のような結果が得られる。目的とするWindowsフォームの他に、コマンドプロンプト・ウインドウも開くが、これは無視する(これを表示させない方法はあるが・・・)。


図12 プログラムの実行結果