よもやまのC#時折CPP

MFC,C# .Net,CPP,and ....

目次

Blog 利用状況

ニュース

わんくま同盟

わんくま同盟

投稿カレンダー

iKnow始めました

書庫

日記カテゴリ

メッセージ返送(ON_CONTROL_REFLECTマクロ)

ON_CONTROL_REFLECTのキーワードでヘルプ探すとわかるのですが
ヘルプは、メッセージ返送に関する記事になります。
罠と言いますか、ミソと言いますか
よく読むと2つキーワードがでてきます。
1つ目は、サブクラス化に関する事。
2つ目は、再利用可能なコントロール作成に関する事。
でもメッセージが返送される事から、CWnd::OnCmdMsgやCWnd::OnWndMsgに結び付かせる為には、キーワードの着目点を変える必要があります。

「メッセージ」の返送です。
さんざんメッセージと書いているのに見落としてしまうところでした。
WM_COMMAND EN_UPDATEの返送は、OnWndMsgで受け取れるのです。
(WM_CTLCOLOR他にもOnWndMsgで受け取れるメッセージはあります。)

たとえば、CEditを継承して独自のマスク編集エディットコントロールを作成した場合
その独自のマスク編集エディットコントロールがEN_UPDATEを使っていた場合
配置した親(ダイアログやフォーム)には、配置したコントロールのEN_UPDATEイベントハンドラを作ったとしても通知されてきません。
独自コントロールの作成方法にもよると思いますが
「マスク編集状態をEN_UPDATEでチェックしちゃえ」のノリで作ると
配置した親に通知されず。
「あれ、データの変更状態をチェックするためにEN_UPDATEハンドラ作ったんだけど
通知されないよ」
となってしまいます。

使う側で
・OnWndMsgをオーバーライドする
・OnChildNotifyをオーバーライドする
等の対処方法はヘルプに書かれています。

メッセージの返送というよりも
・横取りするけど、あとは、親画面まかせた
って右から左に受け流したいんですけど・・・
メッセージフックとも違うので最初はとまどいました。

※OnWndMsgメソッドは手書きで宣言する必要があります。

投稿日時 : 2007年10月1日 0:21

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント