リッチエディットでのイベントについて

[戻る]
ぺこ 2006/07/06(木) 04:13:46
ぺこです。
いつも質問ばかりで申し訳ありません。。

今日、困っていることは、
リッチエディットでEN_KILLFOCUSのイベントが発生しないことです。

環境はWinXpで
VC++6.0、ダイアログベースのMFCです。

行った手順は
@リッチエディットをリソースエディタで作成
AIDを" IDC_RICHEDIT "
BClassWizard で" NM_KILLFOCUS "のメッセージイベントを登録
COnInitDialog に下記の記述を追加
( ( CRichEditCtrl* )GetDlgItem( IDC_RICHEDIT ) )->SetEventMask( NM_KILLFOCUS );

これで作ったリッチエディットボックスでフォーカスを失った時に下記の
void CDialogXXX::OnKillfocusRichEdit(NMHDR* pNMHDR, LRESULT* pResult)
が呼ばれるのかなーって思ってたんですが、
全く呼ばれないんですが、
このやり方は見当違いだったりしますでしょうか?
ご存知のかたいらっしゃいましたら教えて頂けないでしょうか。
どうぞ宜しくお願い致します。

ぺこ

Blue 2006/07/06(木) 15:40:13
どうも、リッチエディットのEN_KILLFOCUSは親ダイアログのOnNotifyで
拾えないっぽいです。

右クリックイベントならばこんなスレッドがあった。
http://forums.belution.com/ja/vc/000/120/42s.shtml

ですので、手っ取り早くCRichEditCtrlをサブクラス化して、EN_KILLFOCUSをハンドル
したほうがよいかも。

ぺこ 2006/07/06(木) 21:40:28
お返事ありがとうございます。
早速教えて頂いたCRichEditCtrl のサブクラス化
を実行してみました。

これでKILLFOCUSのイベントは発生するようになったのですが、
どうしてもコントロールの置いてある
小ダイアログのクラスの、
変数や関数にサブクラスからアクセスする事が出来ません。
エディットボックスは小ダイアログに置いてあって、
親ダイアログには

C親Dlg* dlg = ( ( C親Dlg* )theApp.m_pMainWnd );
dlg->親ダイアログの関数();    
dlg->m_親ダイアログの変数;    

のようにしたら変数や関数にアクセスする事ができました。
小ダイアログの変数や関数にアクセスするにはどのようにしたら良いでしょうか?

ぺこ

ぺこ 2006/07/06(木) 21:44:25
ちなみに、KILLFOCUS等のイベントは、
サブクラス内で拾っているのですが、
これで良いのでしょうか?

サブクラスを作るのは初めてなもので、
質問ばかりで申し訳ありません。
どうぞ宜しくお願いします。

ぺこ

Blue 2006/07/07(金) 09:07:36
親であるウィンドウで処理させたい(親ウィンドウの情報を使いたい)のであれば、
リッチエディットでKILLFOCUSを拾ったら、親ウィンドウに独自のメッセージをSendする
のはどうでしょうか?(サブクラス化は通知させるためだけのものにする)
※親子関係であるとき、子は親の情報に依存しないようにするのが一般的です。


面倒なことをしたくない。ただデータを共有化したいだけであれば、CXXXAppクラスの
メンバ変数にしてしまうとか。

古いスレッドには追加発言できません。