ぺこです。
いつも質問ばかりで申し訳ありません。。
今日、困っていることは、
リッチエディットでEN_KILLFOCUSのイベントが発生しないことです。
環境はWinXpで
VC++6.0、ダイアログベースのMFCです。
行った手順は
①リッチエディットをリソースエディタで作成
②IDを IDC_RICHEDIT
③ClassWizard で NM_KILLFOCUS のメッセージイベントを登録
④OnInitDialog に下記の記述を追加
( ( CRichEditCtrl* )GetDlgItem( IDC_RICHEDIT ) )->SetEventMask( NM_KILLFOCUS );
これで作ったリッチエディットボックスでフォーカスを失った時に下記の
void CDialogXXX::OnKillfocusRichEdit(NMHDR* pNMHDR, LRESULT* pResult)
が呼ばれるのかなーって思ってたんですが、
全く呼ばれないんですが、
このやり方は見当違いだったりしますでしょうか?
ご存知のかたいらっしゃいましたら教えて頂けないでしょうか。
どうぞ宜しくお願い致します。
ぺこ
どうも、リッチエディットのEN_KILLFOCUSは親ダイアログのOnNotifyで
拾えないっぽいです。
右クリックイベントならばこんなスレッドがあった。
http://forums.belution.com/ja/vc/000/120/42s.shtml
ですので、手っ取り早くCRichEditCtrlをサブクラス化して、EN_KILLFOCUSをハンドル
したほうがよいかも。
お返事ありがとうございます。
早速教えて頂いたCRichEditCtrl のサブクラス化
を実行してみました。
これでKILLFOCUSのイベントは発生するようになったのですが、
どうしてもコントロールの置いてある
小ダイアログのクラスの、
変数や関数にサブクラスからアクセスする事が出来ません。
エディットボックスは小ダイアログに置いてあって、
親ダイアログには
C親Dlg* dlg = ( ( C親Dlg* )theApp.m_pMainWnd );
dlg->親ダイアログの関数();
dlg->m_親ダイアログの変数;
のようにしたら変数や関数にアクセスする事ができました。
小ダイアログの変数や関数にアクセスするにはどのようにしたら良いでしょうか?
ぺこ
ちなみに、KILLFOCUS等のイベントは、
サブクラス内で拾っているのですが、
これで良いのでしょうか?
サブクラスを作るのは初めてなもので、
質問ばかりで申し訳ありません。
どうぞ宜しくお願いします。
ぺこ
親であるウィンドウで処理させたい(親ウィンドウの情報を使いたい)のであれば、
リッチエディットでKILLFOCUSを拾ったら、親ウィンドウに独自のメッセージをSendする
のはどうでしょうか?(サブクラス化は通知させるためだけのものにする)
※親子関係であるとき、子は親の情報に依存しないようにするのが一般的です。
面倒なことをしたくない。ただデータを共有化したいだけであれば、CXXXAppクラスの
メンバ変数にしてしまうとか。