Windows ソケット : ソケット クラスからの派生
更新 : 2007 年 11 月
ここでは、ソケット クラスから独自のクラスを派生することで利用できる機能について説明します。
CAsyncSocket または CSocket から独自のソケット クラスを派生すると、独自の機能を追加できます。特に、この 2 つのクラスには、オーバーライド可能な仮想メンバ関数がいくつかあります。オーバーライドできる関数は、OnReceive、OnSend、OnAccept、OnConnect、および OnClose です。派生ソケット クラスでこれらの関数をオーバーライドすることにより、ネットワーク イベントの発生時に、これらの関数が提供する通知機能を利用できます。フレームワークは、これらの通知用コールバック関数を呼び出し、読み込み開始可能なデータの受信などの重要なソケット イベントを通知します。通知関数の詳細については、「Windows ソケット : ソケット通知」を参照してください。
さらに、CSocket クラスには OnMessagePending メンバ関数もあります。これはプログラマに高度な知識を要するオーバーライド可能な関数です。MFC では、この関数への呼び出しをソケットが Windows メッセージを読み込んでいる間に行います。OnMessagePending をオーバーライドすることで、Windows からの特定のメッセージを探し出して応答します。
CSocket クラスで提供される既定の OnMessagePending は、ブロッキング中の呼び出しが完了するのを待つ間に、メッセージ キューで WM_PAINT メッセージを探します。この関数は、表示品質を向上させるための描画メッセージをディスパッチします。役に立つかどうかはともかくとして、これは関数を独自にオーバーライドする 1 つの方法を示しています。もう 1 つの例として、次の処理での OnMessagePending の使用を考えてみます。ネットワーク トランザクションの完了待ち合わせ中に、モードレス ダイアログ ボックスを表示させるとします。このダイアログ ボックスには [キャンセル] ボタンを付け、ユーザーが時間のかかりすぎるブロッキング トランザクションをキャンセルできるようにします。オーバーライドした OnMessagePending では、このモードレス ダイアログ ボックスに関するメッセージを読み取ります。
オーバーライドした OnMessagePending では、TRUE を返すか、または基本クラスの OnMessagePending の呼び出しからの戻り値を返します。基本クラスの機能が必要な場合は、基本クラスの関数を呼び出します。
詳細については、次のトピックを参照してください。