リッチエディットでのイベントについて – プログラミング – Home

リッチエディットでのイベントについて
 
通知
すべてクリア

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


ぺこ
 ぺこ
(@ぺこ)
ゲスト
結合: 18年前
投稿: 23
Topic starter  

ぺこです。
いつも質問ばかりで申し訳ありません。。

今日、困っていることは、
リッチエディットで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)
が呼ばれるのかなーって思ってたんですが、
全く呼ばれないんですが、
このやり方は見当違いだったりしますでしょうか?
ご存知のかたいらっしゃいましたら教えて頂けないでしょうか。
どうぞ宜しくお願い致します。

ぺこ


引用解決済
トピックタグ
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

どうも、リッチエディットのEN_KILLFOCUSは親ダイアログのOnNotifyで
拾えないっぽいです。

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

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


返信引用
ぺこ
 ぺこ
(@ぺこ)
ゲスト
結合: 18年前
投稿: 23
Topic starter  

お返事ありがとうございます。
早速教えて頂いたCRichEditCtrl のサブクラス化
を実行してみました。

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

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

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

ぺこ


返信引用
ぺこ
 ぺこ
(@ぺこ)
ゲスト
結合: 18年前
投稿: 23
Topic starter  

ちなみに、KILLFOCUS等のイベントは、
サブクラス内で拾っているのですが、
これで良いのでしょうか?

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

ぺこ


返信引用
Blue
 Blue
(@Blue)
ゲスト
結合: 20年前
投稿: 1467
 

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました