VC++
Express versionフォームアプリケーション作成超入門
コンソールアプリはブログ2009.9.4に記載
本内容は、http://homepage3.nifty.com/ishidate/vcpp05_2/vcpp05_2.htmをベースにしている。
(A)プロジェクトh1:helloと表示
1)デスクトップから、「Visual C++ 2008」のアイコンをダブルクリックする。
2)「スタートページ」のウインドウが開く。
3)メニューから「ファイル」→「新規作成」→「プロジェクト」を選択する。
4)「新しいプロジェクト」ウインドウが開くので、
プロジェクトの種類-------- CLR
テンプレート ------------- Windowsフォームアプリケーション
プロジェクト名 ----------- (入力する)
ソリューションのディレクトリの作成 ------ (チェックをつける)
として、「OK」をクリックする。
5)「フォームデザイナー」ウインドウが開き、「Form1」ができている。サイズは、白い四角形のハンドルをドラッグして変更することができるが、今回はデフォルトサイズのまま使用する。
図1で、左側は「ソリューションエクスプローラ」、右は「フォームデザイナー」の一部である。
図1 「新しいプロジェクト」ウインドウで「OK」をクリックすると現れる画面の一部
6)「フォームデザイナー」上の「Form1」の中央部で右クリックし、「プロパティ」を選択すると、プロパティ」ウインドウが現れるので)に、「プロパティ」ウインドウの下部にある「Text」を探し、これをクリックして選択し、右にある「Form1」を「Back space」キーで消し、代わりに「Hello」と入力し、「Enter」を押す。図2は、「プロパティ」ウインドウの下端を示したもので、「Text」が選択されている。
図2 「プロパティ」ウインドウの下方にある「Text」欄
プログラムの作成
1)「フォームデザイナー」上の「Form1」の中央部で右クリックし、「プロパティ」を選択すると、「プロパティ」ウインドウが現れるので、「イベント(黄色の稲妻のマーク)」アイコンをクリックし、「表示」の下の「Paint」をダブルクリックする。
図3は、「イベント」アイコン(稲妻の形)をクリックした後の「プロパティ」ウインドウを、中間を省略して示したものである。「Paint」をクリックすると、メソッド「Form1_Paint」が生成される。
図3 「プロパティ」ウインドウ下部の「Paint」をクリックした後の画面(一部省略)
2)「コードエディタ」が開き、「Form1_Paint()」メソッドのスケルトンができるので、図5のように入力する。
String^などの「^」は使用終了後に自動的にガーベージコレクション(garbage collection、メモリ領域の開放)されるオブジェクトに対するポインタで、Visual C++ 2005で採用されたものである。また、gcnewは、garbage collection対象の領域にメモリを確保するnew演算子である。自動的なガーベージコレクションは、以前からJavaにある機能である。「"MSゴシック"」を入力する場合、「MS」と「ゴシック」は全角で、その間は半角のスペースにしないと、異常が発生する。
private: System::Void Form1_Paint(System::Object^ sender,
System::Windows::Forms::PaintEventArgs^
e) {
Graphics^ g=e->Graphics;
System::Drawing::Font^ font=gcnew
System::Drawing::Font("MSゴシック",10);
Brush^ brush=gcnew
SolidBrush(Color::Black);
g->DrawString("こんにちわ",font,brush,30,30);
}
};
}
図4 コードを書き込んだForm1_Paintメソッド
プログラムの実行
「統合開発環境」のメニューから、「デバッグ」→「デバッグなしで開始」を選択すると、「フォーム」が画面上に表示され、期待通りの表が得られる。図5は、プログラムの実行結果を示す。
図5 プログラムの実行結果
(B)プロジェクトh2:TextBox2つとボタンを用意し、左のTexBoxに数字を書いて、ボタンを押すと、右のTextBoxに移動する。
プロジェクトの新規作成とフォームの準備
1)「新しいプロジェクト」ウインドウで、
プロジェクトの種類-------- CLR
テンプレート ------------- Windowsフォームアプリケーション
プロジェクト名 ----------- h2(ここでの名称、任意で良い)
ソリューションのディレクトリの作成 ------ チェックのまま
として、「OK」をクリックする。
2)フォームデザイナーウインドウが開き、フォーム(Form1)ができている。
3)統合開発環境のメニューで、「表示」→「ツールボックス」を選択し、「ツールボックス」ウインドウを開く。
4)”すべてのWindowsフォーム”を開いて、「TextBox」を選択し、フォーム上の希望する場所で再びクリックする。これを2回行い、テキストボックスを二個作る。
5)“すべてのWindowsフォーム”の「Button」をフォーム上に一個配置する。できたボタンを右クリックし、プロパティウインドウで「Text」の「button1」を「->」に書き換える。Enterを押すと画面上に->が現れる。
図6は、以上の手続きにより作成したフォームを示す。フォーム上に、左から、テキストボックス、コンボボックス、テキストボックス、ラベル(=)、ラベル(空欄で見えない)が並び、下にボタン(実行)がある。なお、フォームの縦方向の長さを、マウスドラッグにより短縮してある。このままでは、プログラムを記述していないので、ビルドしても動作しない。
図6 作成されたフォーム
プログラムの作成
1)フォーム上のボタンをダブルクリックするとコードエディタウインドウが開き、イベントハンドラbutton1_Click()メソッドのスケルトンができているので、図7のように記述する。
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
int a=int::Parse(textBox1->Text);
textBox2->Text= a.ToString();
}
図7 コードを書き込んだbutton1_ClickとForm1_Loadメソッド
プログラムのビルドと実行
統合開発環境のメニューから、「デバッグ」→「デバッグなしで開始」を選択すると、フォームが画面上に表示される。図3は、左のテキストボックスに適当な数値(123)を入力し、「->」ボタンをクリックした結果を示す。
図8 プログラムの実行結果
(C)プロジェクトh3:ファイルの中身をフォームに表示
(準備)Cドライブの下にQA1.txtを用意する
QA1の中身:===
1.秋田県は犬です
2.秋田犬は犬です
2
問題が2つ表示され、答えの番号をTextBoxに入れると、正誤が示される。
フォームを以下のように準備。やり方は、前と同じで“すべてのWindowsフォーム”からボタン2つ、ラベル3つ、テキストボックスをフォームにドラッグ。
図9 QAフォーム
問題ボタンを押すと、Cドライブの下のQA1.txtが読み込まれ、label1とlabel2の所に問題が表示されます。
答えを選んで、答えの番号をTextBoxに書き、決定ボタンを押すと、正誤がlabel3の所に表示されます。
2つのボタン間の情報交換のために、Ga,Gbをグローバルに宣言しています。
プログラムは、“問題”ボタンをWクリックし、以下のように書きます。
int Ga,Gb; //グローバルに宣言
#pragma endregion
private: System::Void
button1_Click(System::Object^
sender, System::EventArgs^
e) {
System::IO::StreamReader^ sr
=gcnew
System::IO::StreamReader(
"C:\\QA1.txt",
System::Text::Encoding::Default);
String^
strLine1;
String^
strLine2;
String^
strLine3;
strLine1=
sr->ReadLine();
label1->Text=
strLine1;
strLine2=
sr->ReadLine();
label2->Text=
strLine2;
strLine3=
sr->ReadLine();
Gb=int::Parse(strLine3);
}
次に“決定”ボタンをWクリックし、次のように書きます。
private: System::Void
button2_Click(System::Object^
sender, System::EventArgs^
e) {
Ga=int::Parse(textBox1->Text);
if(Ga==Gb) label3->Text= "正";
else
label3->Text= "誤";
}
これで、後は“デバッグなしで開始”で、実行です。