Windowsフォームアプリケーションの作成
Visual C++ 2012
Visual C++ 2013 (Visual Studio 2013)の場合の作成法も同様である。
既に作成したフォームをコピーして再利用する方法は、このウェブサイトの後の方で説明している。
なお、C++の説明を<岡本安晴「大学生のための心理学VC++プログラミング入門」>で行っている。
Visual Studio Express for windows Desktopを
http://www.microsoft.com/visualstudio/jpn/downloads
からダウンロード・インストールして、以下のようにWindowsフォームアプリケーションを作成してみた。ちなみに、.NETプログラミングはWindowsにおけるユーザーインターフェースなどの作成を容易にするものであるが、C++/CLIについて<http://msdn.microsoft.com/en-us/magazine/cc163681.aspx>で
what is C++/CLI? It is a first-class entry visa into the .NET programming model.
と説明されている。C++/CLIのMicroSoftによる実装がC++/CLRであり、本ウェブサイトで説明しているWindowsフォームアプリケーションはC++/CLRによるものである。
インストールしたVisual Studioは、スタートメニュから「VS Express for Desktop」を選ぶと起動できる(図1)。
図1
新規にアプリケーションを作成するためにメニュ「ファイル|新しいプロジェクト」を選ぶ(図2)。
図2
「新しいプロジェクト」を選んでクリックすると「新しいプロジェクト」ダイアログウィンドウが表示される(図3)。
図3
左のテンプレートから「Visual C++|CLR」を選ぶ。項目「Visual C++」の下に「CLR」などの下位の項目が表示されていないときは、「Visdual C++」の左にある右向きの白い三角形をクリックすると表示される。表示されると右向きの白い三角形は、右下向きの黒い三角形に変わる。黒三角形をクリックすると右向きの白い三角形に変わり、下の下位項目は隠される。
左のテンプレートの「Visual C++」の下の「CLR」をクリックして選んだときに表示されている右側のリストから「空のCLRプロジェクト」を選んでクリックする。
図3のウィンドウにおいて、「場所」はソリューションの置かれるディレクトリ(フォルダ)を指定する。これは、右にある「参照」ボタンをクリックすると「プロジェクトの場所」ダイアログウィンドウが表示されるので(図4)、これを利用する。
図4
図4では、フォルダ「VS2012Express」を選んでいる。このフォルダはダイアログウィンドウの「新しいフォルダ」メニュをクリックして作成したものである。プログラムを格納するフォルダをクリックして選択してから、下にある「フォルダーの選択」ボタンをクリックすると、その指定されたフォルダ名が「場所」欄に表示される(図5)。
図5
このとき「名前」と「ソリューション名」は同じ名前であるが(フォルダとしては別である。ソリューションフォルダの下にプロジェクトフォルダが置かれる)、別の名前を用いたいときは、「名前」の入力欄をクリックしてマウスのカーソルを置けば、メモ帳などのエディタと同じような操作で名前を設定しなおすことができる。「名前」に設定された文字列はプロジェクト名になるが、「名前」を設定しなおすと、同じ文字列が「ソリューション名」に設定される。ソリューション名を別のものにしたいときは、ソリューション名の入力欄をクリックしてカーソルを置き、再設定する。普通は、プロジェクト名とソリューション名は同じでよい。
「名前」の設定と、必要ならば「ソリューション名」も設定しなおした後、「OK」ボタンをクリックする。「空のプロジェクト」が作成されたら、Visual Studioの左上にプロジェクト名、いまの場合(図5の設定の場合)「Project1」、が表示される。
図6
まず、フォームアプリケーションのフォームを作成する。メニュ「プロジェクト|新しい項目の追加」を選ぶ(図6)。
図6
「新しい項目の追加」を選んでクリックすると、「新しい項目の追加」ダイアログウィンドウが表示される(図7)。
図7
「Visual C++」の下に表示される(隠されているときは「Visual C++」の左の白い右向き三角形をクリックする)項目から「UI」を選んでクリックする(UI: User Interface)。このときに、右に表示されている項目「Windows フォーム」(これしか表示されていないが)を選んでクリックする。下の名前欄の名前は変更できるが、このままにしておく。変更するときは、ヘッダーファイル名となるように、ファイル拡張子を「.h」としておく。既に作成されているForm1.hなどのフォームをコピーして利用するときは、その名前に合わせて設定する。フォームのコピー・再利用については、このウェブサイトの後半で説明している。
図7において、右下の「追加」ボタンをクリックすると、図8のようにフォームが表示される。
図8
左上の「ツールボックス」タブをクリックするとツールボックスが表示される(図9)。
図9
横向きのピンのアイコンをクリックすると、ピンは立って、ツールボックスの後ろに隠されていたフォームが右側に現れる(図10)。立ったピンをクリックすると、ピンは横になり、ツールボックスは隠されて、図8の状態に戻る。
図10
ツールボックスの項目「すべてのWindowsフォーム」の左の横向き白三角をクリックすると、その下にフォームに加える項目が表示される(図11)。
図11
ボタンをフォーム上に張り付けるために、ツールボックスの「Button」アイコンをクリックしてからフォームの張り付けたい所をクリックすると、クリックした所にボタンが張り付けられる。ツールボックス内の「Button」アイコンのクリックとフォーム上の張り付けたい箇所のクリックを交互に必要な回数繰り返す(図11の場合は3回)。ボタンは、張り付けた順に通し番号が付けられる。
次に、ボタンのクリックで実行される関数(メソッドあるいはイベント・ハンドラー;いずれの呼び方も可能)を用意する。フォームに張り付けられた「button1」をダブルクリックすると、図12の画面になる。
図12
フォームを表示していた「MyForm.h[デザイン]」タブの隣に「MyForm.h」タブ(右肩の*は、変更後まだ保存されていないことを表している)とその中身であるテキストコードが表示される。「button1_Click」がボタン「button1」のクリックで実行される関数であり、この関数がプログラミング時のフォーム上の「button1」のダブルクリックで自動的にヘッダーファイルMyForm.hに用意されたのである。「button1」のクリックで、フォームの色が青になるように、以下のようにコードを書き加える(図13)。
図13
コードの入力中に、図14のように入力の候補が表示されるので、入力したいものを選んで(クリックするか矢印キーを用いる)Enterキーを押すと、選んだ文字列が入力される。
図14
図13のように必要なコードを入力し終えたら、上の「MyForm.h[デザイン]」タブをクリックすると再びフォームが表示される(図15)。
図15
ボタン「button2」のダブルクリックで、「button2」のクリックで実行される関数が用意されて、図16のように表示される。
図16
ボタン「button2」をクリックするとフォームが黄色になるように、図17のようにコードを書き加える。
図17
ボタン「button3」についても同様であるが、ボタン「button3」をクリックするとフォームが閉じられてプログラムの実行終了となるように、図18のように書き加える。
図18
次に、上で用意したフォームをプログラム実行時に生成して表示するためのプログラムを用意する。先に説明したメニュ「プロジェクト|新しい項目の追加」(図6)の選択以下の操作を行うが、今回は表示されるダイアログボックス(図7)において、「Visual C++|コード」を選ぶ(図19)。このとき右側に表示されている項目から「C++ファイル」をクリックして選ぶ。下の「名前」は変更できるが、変更する必要はない。
図19
「追加」ボタンをクリックすると、「名前」で設定されているファイル名(いまの場合、Source.cpp;他の名前(ファイル拡張子は.cpp)に変更してもよい)のファイルが用意され、表示される(図20)。
図20
中身が何もない空のファイルである。図21のように書き加える。プログラム中にコメントとして説明してあるが、これらについては拙著<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>などを参照されたい。
図21
includeされているヘッダーファイルMyForm.hは、上で作成したヘッダーファイル(図10)である。名前空間Project1は、ヘッダーファイルMyForm.hで宣言されているものである(図22)。
図22
図21において、関数int main( ){ ・・・ }の直前に
[STAThreadAttribute]
と書かれているのは、OpenFileDialogクラスのShowDialogメソッドなどの呼び出しを行うときにはSTAモードでなければならないことによる。
図21のコードの入力が終わったら、ビルド(コンパイルとリンク)を行う。メニュ「ビルド|ソリューションのビルド」を選んでクリックする(図23)。
図23
エラーがなければ、図24のように「1 正常終了」と表示される。エラーがあれば、該当するところを修正して、ビルドを繰り返し、「1 正常終了」となるまでエラーを修正していく。
図24
「1 正常終了」であれば、プログラムを実行する。実行は、キーボードの上側の並びにある「F5」キーを押せばよい。「F5」キーを押すと、まずコンソールウィンドウという図25のようなウィンドウが表示される。
図25
しばらくして図15で設定したフォームが表示される(図26)。
図26
ボタン「button1」をクリックするとフォームは青に変わり(図27)、
図27
ボタン「button2」をクリックするとフォームは黄色になる(図28)。
図28
ボタン「button3」をクリックするとフォームは消えて、プログラムの実行終了となる。
なお、コンソールウィンドウを小さくしたいときは、図29のようにSetWindowSize関数で調節できる。
図29
実行開始時は、デフォルトサイズのコンソールウィンドウが表示されるが、すぐにSetWindowSize関数で設定した大きさになる。
コンソール画面の非表示
コンソールウィンドウのサイズを小さくするのではなく、表示されないようにするときは、プロジェクトのプロパティにおいて2つの設定を以下のように変更する。
まず、メニュ「プロジェクト|プロパティ」を選んでクリックする(図30)。
図30
表示されるプロパティページにおいて「構成プロパティ|リンカー|システム」を選ぶ(図31)。
図31
「構成プロパティ」の左の3角形が白色の横向きのときは、3角形をクリックすると右下向きの黒3角形に変わり、その下に下位項目が表示される。
「サブシステム」の右の欄が空欄であるが、右端の3角形のついたボタン(「サブシステム」欄をクリックすると表示される)をクリックすると項目のリストが提示される(図32)。
図32
「Windows (/SUNSYSYTEM:WINDOWS)」をクリックして選択する。図33のように選択したものが設定されるのを確認する。
図33
画面右下の「適用」ボタン(図34)をクリックして図33で設定したものをプロジェクトのプロパティに適用する。
図34
次に、エントリポイントの設定を行う。図34のプロパティページおいて、項目「構成プロパティ|リンカー|詳細設定」をクリックして選ぶ(図35)。
図35
「エントリポイント」の欄が空欄であるが、この欄にエントリポイント(プログラムの実行開始位置)となる関数名を設定する。エントリポイントとなる関数名は、図36の場合「main」であるので、「エントリポイント」の空欄をクリックしてカーソルを置いてから「main」とキーボードを打ち入力する。「main」と入力後Enter(CR)キーを押すと、プロパティページの右下の「適用」ボタンがイネーブルになるので、クリックしてプロパティページの設定を適用する。
図36
上の「サブシステム」と「エントリポイント」の項目の設定後は、プログラムの実行時にコンソールウィンドウは表示されない。したがって、「Console::~~~」とConsole関係の関数があれば、削除しておかなければならない。図37のプログラムでは、「Console::~~~」の部分をコメントアウトしている。
図37
Visual C++2012/CLRの場合は、空のプロジェクトから始めるのでメインのフォームを意識せずに、複数のフォームを自由に扱うプログラムもプログラマーの思い通りに書くことができる。例えば、次のプログラムは2つのフォームを交互に提示するものである。
#include "MyForm.h"
#include "MyFormNoFrame.h"
#include "common.h"
using namespace TwoForms;
[STAThreadAttribute]
int main(){
MyForm mf;
MyFormNoFrame mfnf;
ck_exit = false;
do{
mf.ShowDialog();
if (ck_exit) break;
mfnf.ShowDialog();
if (ck_exit) break;
}while(true);
return 0;
}
詳しくは<2つのフォームの交互提示>で説明している。
以上、Visual C++ 2012におけるWindowsフォームアプリケーションの作成について説明したが、基本的な操作はVisual C++2008の場合と同じである。より詳しい説明は
岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房
を参照して頂きたい。
なお、Visual C++/CLRによるフォームアプリケーションにおける描画およびマルチスレッド・プログラミングにおける注意を<Visual C++/CLRでの描画とマルチスレッドのこと>で説明している。
また、Visual C++/CLR 2012による簡単なWindowsフォームアプリケーションの作成例を<大きい文字表示の時計>に用意した。
Visual C++/CLRによる実用的なプログラム例は<岡本安晴「心理学データ分析と測定」勁草書房>のウェブサイトにあげてある。
既に作成したフォームをコピーして利用する場合は、コピーの前に同じ名前のフォームのファイルを作成しておく必要がある。同じ名前のフォームを作成した後、ソリューションを閉じて、利用したいフォームのファイルをコピー・上書き貼り付ける。コピーの前に同じ名前のフォームのファイルを作成せずにコピーした場合は、デザイナによるフォームの表示が行われない。コピーしたフォームのデザイナによる表示が行われるためには、コピー前に同じ名前のフォームを作成しておかなければならない。なお、コピー元とは異なる名前でコピーするときは、希望する名前のフォームをまず作成しておき、コピー元のファイルを「名前を付けて保存」メニューで希望する名前のファイルとして作成してからコピーすればよい。例えば、FormOrg.hという名前のフォームをFormCpy.hという名前でコピーするときは、コピー先のプロジェクトにFormCpy.hのフォームを新規作成してフォームを表示した後、そのプロジェクト(ソリューション)を閉じる。次に、FormOrg.hを含むプロジェクトを開いて、FormOrg.hを「名前を付けて保存」メニュによりFormCpy.hとして保存する。そのFormCpy.hをコピー先のプロジェクトにコピーすればよい。
コピー後、名前空間の名前をコピー先に合わせて修正する必要がある。詳しい手順は、<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>の第17章「フォームの再利用」で説明している。Visual C++ 2008で作成したフォームも、Visual C++ 2012で作成したプロジェクトにコピーして利用することができる。
作成したプロジェクト、コピーしたプロジェクト、あるいはダウンロード・解凍したプロジェクトをVisual Studioで開くとエラーが表示されることがある。例えば、図A1のようなエラーがウィンドウの下部に表示されたとする。
図A1
このエラーを無視して、ビルド・実行することができる。
フォーム表示に関するエラー(図A2)も無視してよい。
図A2
まず、エラーの表示されているページを、上のタブのXをクリックして消す(図A2)。
図A3
ページを消してから(図A3)、ソリューションエクスプローラ内のフォームのファイル名をダブルクリックして(図A3)、改めてフォームを表示する(図A4)。
図A4
図A4のようにフォームが表示されて、OKである。
しかし、フォームが表示されず、図A2のようなエラーが再度表示された場合は、エラー表示のページを消した後、プロジェクトファイルの置かれているディスクドライブのアクセスランプが消えるのを待つ。アクセスランプが消えた後に、ソリューションエクスプローラ内のフォームの名前をダブルクリックするとフォームが表示される。Visual Studioがデザイナによるフォームの表示の準備をするのに多少時間が掛かるようである。