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.