窓の工作室 〜 Windows アプリを作ろう!〜

〜 第3回 プログラムの構造 〜

とりあえず何かやってみましょう!

今回から数回かけて前回の「その3」で作ったウインドウだけのアプリケーションにボタンをつけてみようかと思います。
Windows アプリケーションでは必ずと言っていいほどついている「ボタン」。これをどのような手順でつければいいのかを考えてみたいと思います。

まずは前回の「その3」に従って、新規にプロジェクトを作成します。
作成するアプリケーションの種類は「 Windows Application 」を選択し、その下にある「 C project 」という方にチェックをしてください(標準では「 C++ project 」にチェックがついていると思います)。
ここでは test というプロジェクト名にしておきます。

「 C++ project 」を選択しなかった理由は実に個人的なことで、私、あまり C++ は詳しくないんです(苦笑)。

プログラムってどうなっているの?

いきなり、どっかのプログラム入門書のタイトルに書いてあるような文句から始まりましたが、ここからはちょっと本格的にプログラムのソースコードを作成することになると思います。
今回はプログラムってどういうものかを見ることにしましょうか。すでにプログラムを書いたことのある方には退屈な内容ですから、次回の第4回をお待ちください(笑)。

プログラムと言ってもあまり難しく考えることはありません。要するにコンピュータに何をすればいいのかを教える手順書みたいなものです(人が何か言ってやらないとコンピュータってのは何もできないものなんです)。それが難しく見えるのはその手順書を教えてあげる「言葉」、すなわち「プログラミング言語」が難しいからです。基本は英語なので、しばらく見ていると何となく分かってくるのではないかと思います。

で、人がコンピュータに指示することって実はそれほど多くはなくて、基本的には、

  • 順次実行
    プログラムは通常、上から下へ順番に実行される
  • 条件判定
    特定の条件によって異なる処理をさせることができる
  • 繰り返し実行
    特定の命令を使うことで同じ処理を繰り返させることができる
の3つが大きなものだと思います。
これ以外にもあることはありますが、基本はこの3つと考えてよいでしょう。

さて、まずは画面にソースコードが表示されていると思いますので、見てください。

前から7行目に WinMain というものが見つかると思います。これがプログラムが起動された時に最初に呼ばれる部分です(この WinMain だけはすべてのプログラムで共通した名前となっています)。
次にある { から、ずっと下の方にある } までがひと固まりとなっており、これを「関数」と呼びます。

この WinMain 関数の構造を簡単に書くと次のようになります。

int WINAPI WinMain(...)
{
      wincl.hInstance = hThisInstance;
      wincl.lpszClassName = ...
      :

      if(!RegisterClassEx(&wincl)) return 0;

      hwnd = CreateWindowEx(...);

      ShowWindow(hwnd, nFunsterStil);

      while(...)
      {
          ....
      }

      return messages.wParam;
}

最初は wincl.hInstance などに hThisInstance などの値を設定( = は「代入」を表してまして、= の右の値を左に入れるという意味になります)していく順次実行の処理です。ここで、このアプリケーションの初期設定が行なわれます。
今は設定している値が何なのかなどは考えなくてもいいと思います。

次にここで設定した値を RegisterClassEx() という関数を使用して Windows へ登録する処理を行ないます。その関数からの結果が不可だった場合、return という今いる関数から抜ける(呼び出し元にもどる)命令で WinMain 関数を抜ける(これが最初の関数なのでプログラムが終了する)ことになります。これが条件判定の処理です。

次の2行は再び順次実行の処理で、ここで実際のウインドウの作成と表示を行ないます。

それに続く while で始まる部分が繰り返し実行を行なう部分で、while の次にある ( ) 内にある条件が 0 にならない限り、その下にある { から、} までを永久に実行し続けます。
その条件が 0 になった時(コンピュータは正しければ 1 、間違っていれば 0 という判断をするようになっています)にプログラムは while() の処理部を抜けて、最後の return の行に移動します。この return は先にも書きましたが、今いる関数から抜ける命令で、この処理をもって WinMain() は終了、すなわちプログラムの終了となります。

ちなみに最後の return 行は、なくても次の行で WinMain() 関数は終了しているので、同じようにプログラムは終了します。ただ、これはあまり行儀のいいプログラムではないので、正しくは return 命令を使って終了させるのが良いでしょう。

と、こんな感じで一番最初に呼ばれる関数だけで基本的な3つの処理について説明できてしまいました(嬉)。

次回はこのプログラムをちょっといじってみようかなと思っていますが、果たしてどうなりますことやら…。

prev next


戻る