2015.11.24.
石立 喬

Visual Studio Community 2015の使い方(2)

――― Visual C++でWindowsフォームアプリケーションを作成する―――

 Visual Studio Community 2015には、Visual C++に、Windowsフォームアプリケーションのテンプレートがない(Visual C#とVisual Basicにはある)。Microsoftは、Visual C++でのWindowsフォームアプリケーション作成を推奨していないようである。しかし、少し手間をかければ、不可能ではないので、その方法を紹介する。
 Cisual C++によるWindowsフォームアプリケーションのいろいろな応用は、「Visual C++ 2010 Express の使い方」に詳しく述べてあり、殆ど同じであるので、「Visual Studio Community 2015の使い方」では、これ以上説明しない。
 WindowsフォームアプリケーションをVisual C#で作成したい場合には、小著「Visual C# 2013画像処理・数値プログラミング」(マイナビ刊)を参照されたい。

Windowsフォームプログラムの構成法
 Windowsフォームプログラムの主要部は、「MyForm.h」と言うヘッダ−ファイルに記述する。これは、従来「Form1.h」と呼ばれたものである。他に、プログラムを起動するための「<プロジェクト名>.cpp」が必要で、main関数を記述する。
 Vusual C++ 2010 Expressなど、過去のIDEでは、これらがテンプレートによって自動的に生成され、Windowsフォームアプリケーションの作成が容易であった。しかし、Visual Studio 2012 Express以降、それが無くなったので、以下に示す手順が必要である。

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


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


5)画面右側の「ソリューションエクスプローラー」に、「WindowsFormsProject1」ができているので、それを選択する。
6)メニューから「プロジェクト」→「新しい項目の追加」を選択する。
7)図2に示すような「新しい項目の追加 - WindowsFormsProject1」ウィンドウが開くので、左欄で「Visual C++」→「UI」(ユーザインターフェイス)を選択し、右欄で「Windowsフォーム」を選択し、「名前」はデフォルトの「MyForm.h」のままにして、「追加」をクリックする。


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


8)エラー表示が出るが、気にしないで次の「エントリーポイントの作成」に移る。

エントリーポイントの作成
 エントリーポイントとは、プログラムを起動したときに、最初に実行するプログラムであり、具体的にはmain()関数のことである。
1)「ソリューションエクスプローラー」で、「ソースファイル」を展開して、「MyForm.cpp」を表示する(すでに展開されていることもある)。
2)「MyForm.cpp」を右クリックし、「名前の変更」を選択して、「WindowsFormsProject1.cpp」(一例、プロジェクト名に合わせる)に書き換える。図3は、書き換えた後の「ソリューションエクスプローラー」である(「参照」欄は折りたたんである)。


図3 「WindowsFormsProject1.cpp」に書き換えた後のソリューションエクスプローラー


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


図4 WindowsFormsProject1.cppのスケルトン



図5 スケルトンにmain()を記述した


サブシステムとエントリポイントの設定
 1)「ソリューションエクスプローラー」で、「WindowsFormsProject1」を選択する。
 2)メニューから「プロジェクト」→「プロパティ」を選択する。
 3)「WindowsFormsProject1プロパティページ」ウィンドウが開くので、左欄で「構成プロパティ」→「リンカ―」→「システム」を選択する。
 4)右欄で「サブシステム」を選択し、右端にできる「∨」をクリックし、「Windows(/SUBSYSTEM:WINDOWS)」を選択する(図6参照)。これにより、アプリケーションの種類が、コンソールからWindowsに変わるので、コンソール・ウィンドウが開かなくなる。


図6 サブシステムを選択的に設定するウィンドウが開く


 5)右欄「サブシステム」の右側に、「Windows(/SUBSYSTEM:WINDOWS)」と入ったのを確認して、右下の「適用」をクリックする。
 6)さらに、左欄で「構成プロパティ」→「リンカ―」→「詳細設定」を選択し、右欄の「エントリポイント」をクリックして「∨」をクリックすると、「<編集...>」欄ができる(図7参照)。


図7 エントリポイントを入力する欄ができる


 7) 「<編集...>」にカーソルを移すと、「エントリーポイント」ダイアログボックスが開くので、そこに「main」と入力して「OK」をクリックする。
 8)右欄「エントリポイント」の右側に、「main」と入ったのを確認して、「OK」をクリックする。

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


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


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

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


図9 「プロパティ」ウィンドウの「配置」欄(デフォルト)


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


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


MyForm.hを見る
 「フォームデザイナ」(「MyForm.h[デザイン]」とある)上に表示されているフォームの中央部で右クリックし、「コードの表示」を選択すると、図11に示す「MyForm.h」がコードエディタに表示される。
 46〜47行に、「このメソッドの内容をコードエディタで変更しないでください」と注意書きがあるが、ここで内容を修正するのは便利で実際にやってみても、特に問題は生じなかった。


図11 テンプレートとして作成されているMyForm.h


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


図12 「MyForm.h」の最下部にできた、MyForm_Paintのスケルトン


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


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


プログラムの実行結果
 既述の方法で、プログラムをビルドし、実行させると、図14のような結果が得られる。


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




「Visual C++の勉強部屋」(目次)へ