Visual Studio (VC++) 入門 (その2)

− メニューの使用法 −


井澤 裕司 

(H18.1.30)


課  題 2

Microsoft Visual Studio2005 の Visual C++ を用いて、以下の機能
をもつプログラムを作成しなさい.

Windowsのアプリケーションのメニュー「 描画 」,「 リサージュ 」 を起動すると,画面上に リサージュ図形 が表示される.


このコンテンツの中で,Visual C++ の使用法を詳細に説明することは困難です. Visual C++については、以下のような書籍が出版されていますので,参考にして下さい.
   ・Visual C++ 2005 ビギナー編
        林 晴彦 Softbank Creative
 
WEB上には 以下のようなサイトがあります.
 
   ・[Visual C++の使い方]
          http://www.nitoyon.com/vc/
   ・[Visual C++の勉強部屋]
          http://homepage3.nifty.com/ishidate/vcpp.htmvc/
   ・[Area of VC++ Tips]
          http://rararahp.cool.ne.jp/vc/vctips/tipindex.htm
 
手順の概略を以下に示します.
なお手順の (1),(4) は 資料 「VC++入門(その1)」 のステップ1〜3,5〜7と同じです.
(1) プロジェクト( Lissajous )の新規作成
・新規プロジェクト 「 Lissajous 」 をシングルダイヤログ形式( SDI)で作成する.

・手順は
入門(その1) のステップ1〜3と同じ.
(2) メニューの 新規作成
・メニューの 「 表示 」,「リソースビュー」 をクリックし,「Menu」 のIDR_MAINFRAME を編集する.

・新しいメニューとして,例えば
描画 」 を作成し,その下の サブメニュー を,例えば 「 リサージュ 」 のように作成する.

・作成したサブメニュー「
リサージュ 」 をダブルクリック(左)するか,メニューの右上にあるアイコンの 「 プロパティ ウィンドウ 」 を左クリックして,メニューエディタを起動し,リストの項目 ID を例えば 「 ID_LISSAJOUS 」 のように設定する. 

・リソースのサブメニュー「
リサージュ 」 にマウスのカーソルを合わせ,マウスを ”右” クリックして,「 イベント ハンドラの追加 」 を起動する.

・メッセージの種類を 「
COMMAND 」 ,クラスの一覧の中から 「 CLissajousView 」 を選択し,「 追加して編集 」 のボタンをクリックする.

イベントハンドラ ウィザード により View クラスの中に 新たなクラス 「 OnLissajous() 」 が自動生成され,自動的にエディタのモードに移行する.
(3)   Viewクラス 「 CLissajousView 」 の編集 (1)
・Viewクラス 「 CLissajousView 」 の最初に,サイン,コサインなどの数値演算ライブラリを呼び出すためのヘッダーファイル 「 math.h 」 をインクルードする.

‥(略)‥
#include   "LissajousView.h"

#include   "math.h"   ← 追加行

(4)  Viewクラス 「 CLissajousView 」 の編集 (2)
・自動生成された「 OnLissajous() 」 の内部に,描画用のコードを追加する.

CClientdC  dc(this);

dc.TextOutW( 0,0,(CString)“Lissajous Curves”);
dc.MoveTo(10, 100);
dc.LineTo();
‥(略)

(5) コンパイル , デバッグ および 実行
入門(その1) のステップ5〜7に同じ.


ステップ1. Microsoft Visual Studio2005 を起動する.

メニューの 「 ファイル 」 から 「 新規作成 」 の 「 プロジェクト 」 を指定します.
  

ステップ2. Visual C++ のMFC アプリケーションを立ち上げる.

プロジェクトの種類から「 Visual C++ 」 の 「 MFC 」 (Microsoft Foundation Class Library) を選択し,右側のテンプレートから 「 MFCアプリケーション 」 を指定します.
下の欄のプロジェクト名として,例えば 「 Lissajous 」 と入力します.


ステップ3. MFC アプリケーション ウィザードに従ってスケルトン(雛形)を生成する.

MFCアプリケーション ウィザード 」 は,MFCアプリケーションの雛形を自動生成するツールです.
このウィザードに従って,スケルトンを生成します.
なお単純化するため,「
アプリケーションの種類 」 は「 シングル ドキュメント 」とし,「 高度な機能 」については,すべての チェックをはずし て下さい.

ステップ4. メニューのリソースを追加し,イベントハンドラを起動して,ソースファイルを編集する.

4-[a]
     以上の手順により,下に示す MFC アプリケーション の雛形が完成しました.



4-[b]

メニューの「 表示 」から 「 リソースビュー 」 を指定し,「 Lissajous 」 プロジェクトの リソース一覧を表示します.
Lissajous.rc 」 の「 Menu 」 をクリックし,ファイル一覧を表示します.

なお,一覧が表示されない場合は,上位のフォルダをダブルクリックすると,その下の階層が表示されます.


4-[c]
    リソース一覧の中から 「
IDR_MAINFRAME 」 をダブルクリックして,MFC アプリケーションの画面を表示します.




4-[d]
     「
ここへ入力 」 の欄の下端にマウスのカーソルを合わせ,左ダブルクリックして,「 描画 」 と入力します.




4-[e]

描画 」 の下の 「 ここへ入力 」 の下端にマウスのカーソルを合わせ,左ダブルクリックして 「 リサージュ 」 と入力します.




4-[f]
    「 リサージュ 」 の ”右側” ”にマウスのカーソルを合わせ,左ダブルクリックして,「 メニューエディタ 」 を起動します.
    なお,メニュー欄の右端にあるアイコン 「
プロパティ ウィンドウ 」 を左クリックしても メニューエディタ」 が開きます.




4-[g]
    画面左の「 メニューエディタ 」 の「 ID 」 の欄に,ユニークな名前,例えば,「 ID_LISSAJOUS 」 を入力します.





4-[h]

メニューエディタ 」 を閉じた後,再びサブメニューの 「 リサージュ 」 にマウスのカーソルを合わせ,今度は ”右” クリックして, 「 イベントハンドラの追加 」 を起動します.




4-[i]

イベント ハンドラ ウィザード 」 のクラス一覧から Viewクラス ,すなわち 「 CLissajousView 」 を選択して,「 追加して編集 」 を起動します.
なお,「
メッセージ 」 の欄は 「 COMMAND 」 の状態で結構です.




4-[j]
    「 イベント ハンドラ ウィザード 」 により, Viewクラス の中に,新規メニューに対応する新しいクラス 「 OnLissajous() 」 が自動的に生成されます




4-[k]

これまでの手順を確認するために,メニューから簡単な文字が表示されるか,確認してみましょう.
新しく生成されたクラス 「 OnLissajous() 」 の中に次の2行を追加します.


CClientdC      dc(this);

dc.TextOutW(0, 0, (CString)"Lissajous Curves");






ステップ5. ソースコードのコンパイル(ビルド ・ リビルド)

    VC++のメニュー 「 ビルド 」,「 ソリューションのビルド 」 をクリックして ビルド (コンパイル)します.





    エラーが表示されたら,該当する箇所を修正します.


ステップ6-7. 作成したプログラムの実行結果

    VC++ の メニュー「 デバッグ 」 の 「 デバッグなしで開始 」 をクリックして,作成したプログラムを実行します.



新たに作成した MFCアプリケーション のメニュー「 描画 」,サブメニューの「 リサージュ 」 をクリックすると,「 Lissajous Curves 」という文字が表示されます.




ステップ4. ソースファイルを編集する.(リサージュ図形の表示)


4-[l]

これから追加するソースコードの中で,「サイン(sin) 関数」を使用します.
数値演算ライブラリから,これらの関数を呼び出すため, LissajousViewクラス の先頭に,ヘッダーファイル 「 math.h 」 をインクルードします.


        #include   "LissajousView.h"

        #include   "math.h"
         // 追加したヘッダーファイル

4-[m]

次に,リサージュ図形を表示するソースコードを作成します.
新しく生成したクラス 「 OnLissajous() 」 の中に,以下のソースコードを追加します.


        CClientdC      dc(this);
        int           i;
        double        x, y;

        dc.TextOutW(0, 0, (CString)"Lissajous Curves");
        dc.MoveTo(200, 200);

        for(i = 0; i < 1000; i++){
           x = 100.0 * sin((double)i * 11.0 / 100.0);
           y = 100.0 * sin((double)i * 13.1 / 100.0);
           dc.LineTo(200 + (int)x, 200 + (int)y);
        }

ここで 「 CClientdC 」 は,メニュー内から呼び出す描画用の 「 デバイス コンテキスト クラス 」です.
dc 」 はその オブジェクト です.
ポインタを使わない通常の呼び出しになりますので,

dc.TextOutW(0, 0, (CString)" Lissajous Curves");

のように記述します.
MoveTo() LineTo() は,2つの整数 ( int )型 引数を持つ関数で,それぞれ x y 座標に対応します.
この座標は.画面の左上が原点 (
0, 0 )となり,右下ほど値が大きくなります.
LineTo() は前回指定されたポイントから,引数により指定した点ポイントまで決められた色の線で描画します.
これに対し, MoveTo() 描画しないでポイントを移動させます.

以下にその編集画面を示します.




ステップ5. ソースコードのコンパイル(ビルド ・ リビルド).

VC++のメニュー 「 ビルド 」,「 ソリューションのビルド 」 をクリックして コンパイル(ビルド)します.

ステップ6-7. 作成したプログラムの実行結果

    VC++ の メニュー「 デバッグ 」 の 「 デバッグなしで開始 」 をクリックして,作成したプログラムを実行します.


なお,描画する線の色を赤に変更するためには,新しく生成したクラス 「OnLissajous()」 の変数定義の部分に,

CPen    redPen(PS_SOLID, 1, RGB(255, 0, 0));
CPen*    pOldPen;


のように色の定義を追加します.
RGB() のカッコ内の数値は,それぞれ Red, Green, Blueに対応し,0〜255までの値を記入します.
実際に線を描画する (
dc.LineTo() ) の前に,

     
pOldPen = dc.SelectObject(&redPen);

を挿入して下さい.

まとめ
VC++を用いて,リサージュ図形を表示する方法を紹介しました.
波形や色等が変わるようソースコードを修正し,その実行結果を確認して下さい.

入門(その1)でも述べましたが,VC++の全体構造や各ソースコードの意味を理解することは容易ではありません.
便利なツールとして活用することに重点をおいて,とにかく使いこなせるよう努力して下さい.