WindowsCEプログラミング入門 2



2. コールバック関数



  前回は、Windowsプログラミングの基本形として以下の流れを示しました。



    開始

    入力判定

      Aならば

        A演算

        入力判定に戻る

      Bならば

        B演算

        入力判定に戻る

      終了ならば

        終了処理

    終了



  これを見て、疑問に感じる方もいらっしゃることでしょう。Windowsのプロ

グラムにはウィンドウ以外にも複数のダイアログが出てきます。それぞれに同

じ操作を行っても、同じ結果が返ってくるとは限りません。

  もし、条件分岐で解決しようとすると、以下のようになります。



    開始

    入力判定

      Aならば

        対象判定

          ウィンドウならば

            A1演算

          ダイアログ1ならば

            A2演算

          ダイアログ2ならば

            A3演算

        入力判定に戻る

      Bならば

    [以下省略]



  これではあまりに複雑になります。

  実際には、ウィンドウやダイアログ毎に基本形を割り当てることになります。



    開始

    ウィンドウ用

      入力判定

        Aならば

          A演算

          入力判定に戻る

        Bならば

          B演算

          入力判定に戻る

        終了ならば

          終了処理

    ダイアログ1用

      入力判定

        Aならば

    [以下省略]



  それはおかしいじゃないか、と思う方もいらっしゃると思います。ウィンド

ウ用とダイアログ1用、ダイアログ2用を振り分けなければいけないのなら、結

局、入力判定の中で分岐するのと同じことに思われます。

  しかし、それは不要です。何故なら、振り分けはWindowsが自動的に行って

くれるからです。考えてみて下さい。ウィンドウやダイアログの画面上での位

置は全てWindowsが把握しています。また、アクティブなウィンドウを管理して

いるのもWindowsです。この振り分けをプログラム側ではなくWindowsが行うの

が自然といえるでしょう。

  注:ここではかなり簡略化した説明をしています。実際にはそれ程単純な話

      ではないのですが、ここではこのように理解しておいてください。



  それでは、どうやってWindowsに振り分けさせるのだ、という疑問がわきます。

そこで出てくるのが、今回のタイトルでもあるコールバック関数です。

  コールバック関数とは、そもそも関数に対するパラメータ渡しの手法として

考えられたものです。通常、関数から呼び出し側に返ってくる返値は一個の数

値です。これでは不便だ、ということで、関数にデータバッファへのポインタ

を渡し、関数がデータバッファを直接書き換えるという手法が用いられるよう

になりました。しかし、この手法もデータが複雑になるとポインタやバッファ

の準備が大変になるという欠点があります。

  そこで、コールバック関数という手法が考えられました。呼び出し側は関数

にコールバック関数へのポインタを渡します。関数側は必要に応じてコールバッ

ク関数を呼び出し、処理を行います。これで、複雑なデータ渡しを行う必要が

なくなるわけです。また、データ処理を一つの関数だけに任せられますから、

データの保護にも役立ちます。



  Windowsでは、このコールバック関数を用います。各々のウィンドウやダイ

アログがコールバック関数を持ち、その作成時にWindowsに対してポインタを

渡します。Windowsは必要な際に、コールバック関数を呼び出します(これが前

回説明したメッセージの基本的な原理です)。

  ウィンドウに付随するコールバック関数はウィンドウ関数(ウィンドウプロ

シージャと呼ぶこともあります)と呼び、ダイアログに付随するコールバック

関数はダイアログ関数と呼ばれます。


戻る
All contents and programs Copyright 1996,97,98 (C) by Masaki " Brahma " Tsumori all rights reserved.