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で、左側は「ソリューションエクスプローラ」、右は「フォームデザイナー」の一部である。

http://homepage3.nifty.com/ishidate/vcpp05_2/FIGURE1.JPG

 

図1 「新しいプロジェクト」ウインドウで「OK」をクリックすると現れる画面の一部




6
)「フォームデザイナー」上の「Form1」の中央部で右クリックし、「プロパティ」を選択すると、プロパティ」ウインドウが現れるので)に、「プロパティ」ウインドウの下部にある「Text」を探し、これをクリックして選択し、右にある「Form1」を「Back space」キーで消し、代わりに「Hello」と入力し、「Enter」を押す。図2は、「プロパティ」ウインドウの下端を示したもので、「Text」が選択されている。

http://homepage3.nifty.com/ishidate/vcpp05_2/FIGURE3.JPG

 

2 「プロパティ」ウインドウの下方にある「Text」欄



プログラムの作成
1)「フォームデザイナー」上の「Form1」の中央部で右クリックし、「プロパティ」を選択すると、「プロパティ」ウインドウが現れるので、「イベント(黄色の稲妻のマーク)」アイコンをクリックし、「表示」の下の「Paint」をダブルクリックする。
 図3は、「イベント」アイコン(稲妻の形)をクリックした後の「プロパティ」ウインドウを、中間を省略して示したものである。「Paint」をクリックすると、メソッド「Form1_Paint」が生成される。

http://homepage3.nifty.com/ishidate/vcpp05_2/FIGURE4.JPG

 

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 プログラムの実行結果

 

()プロジェクト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_ClickForm1_Loadメソッド



プログラムのビルドと実行
 統合開発環境のメニューから、「デバッグ」「デバッグなしで開始」を選択すると、フォームが画面上に表示される。図3は、左のテキストボックスに適当な数値(123)を入力し、「->」ボタンをクリックした結果を示す。

 

8 プログラムの実行結果

 

()プロジェクトh3:ファイルの中身をフォームに表示

(準備)Cドライブの下にQA1.txtを用意する

QA1の中身:===

1.秋田県は犬です

2.秋田犬は犬です

2

問題が2つ表示され、答えの番号をTextBoxに入れると、正誤が示される。

フォームを以下のように準備。やり方は、前と同じで“すべてのWindowsフォーム”からボタン2つ、ラベル3つ、テキストボックスをフォームにドラッグ。

図9 QAフォーム

 

問題ボタンを押すと、Cドライブの下のQA1.txtが読み込まれ、label1label2の所に問題が表示されます。

答えを選んで、答えの番号を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= "";

                         }

これで、後は“デバッグなしで開始”で、実行です。

 

その他、私的追加メモ
1.番号順ファイル名の付け方(CドライブのQA1.txtを作る場合)
例えば、
int number=1;
String^ string1=number.ToString();
String^ fname= "C:\\QA"+string1+".txt";
System::IO::StreamReader^ sr = gcnew System::IO::StreamReader( fname ,System::Text::Encoding::Default);

2.画像の表示(Cドライブのred.jpgを表示する場合)
private: System::Void Form1_Paint(System::Object^ sender, System::Windows::Forms::PaintEventArgs^ e) {
Bitmap ^figa= gcnew Bitmap("C:\\red.jpg");
Graphics^ gr=e->Graphics;
gr->DrawImage(figa,30,40,50,50);
}
再描画は、Invalidate()らしい。