CListCtrlの派生クラスを2層に作成、中間クラスでメッセージを取得する方法は?

[戻る]
しょうわ 2006/06/01(木) 00:07:39
VC.net2003 MFC ダイアログベースです

リストコントロールをCListCtrl -> CSubList -> CSub2List の順に派生クラスを作成、
CSubListに定義したエディットボックスのフォーカスが外れた時に、CSubList内でメッ
セージを取得したいのですが
OnEnKillfocusEdit()がコールされません。
ダイアログに定義した CSub2List m_List;を CSubList m_List; に変更すればコール
されます。

CSubList にできるだけ機能をまとめておきたいので、 CSub2Listにメッセージの受け皿
を持たせなければいけないのは嬉しくないのですが、なにか良い方法は無いでしょう
か。
色々探してはみたのですが、検索キーワードが思いつきません。どなたかご教授お願い
します。

//----------------------------------------------
// CSubList ヘッダー

#pragma once
#define IDC_EDIT1  1000

class CSubList : public CListCtrl
{
    DECLARE_DYNAMIC(CSubList)
public:
    void Initial();//<=OnInitDialog()からコール
    CEdit m_Edit;
    afx_msg void OnEnKillfocusEdit();
protected:
    DECLARE_MESSAGE_MAP()
};

//----------------------------------------------
// CSub2List ヘッダー
#pragma once
#include "SubList.h"

class CSub2List : public CSubList
{
    DECLARE_DYNAMIC(CSub2List)
protected:
    DECLARE_MESSAGE_MAP()
};

//----------------------------------------------
// CSubList ソース

IMPLEMENT_DYNAMIC(CSubList, CListCtrl)
BEGIN_MESSAGE_MAP(CSubList, CListCtrl)
    ON_EN_KILLFOCUS(IDC_EDIT1, OnEnKillfocusEdit)
END_MESSAGE_MAP()

void CSubList::Initial()
{
    m_Edit.Create(0,CRect(0,0,50,50), this, IDC_EDIT1);
    m_Edit.ShowWindow(TRUE);
}
void CSubList::OnEnKillfocusEdit()
{
    int i = 0;//<=====ここに来ない
}

dairygoods 2006/06/01(木) 09:02:48
CSub2List のメッセージマップで、
CSubList を親にするのを忘れているということはないですか?

BEGIN_MESSAGE_MAP(CSub2List, CSubList)

しょうわ 2006/06/01(木) 10:01:40
[[解決]]
dairygoodsさん、ありがとうございました。無事解決しました。
CSub2ListとCListCtrlが直接メッセージを交換していたため、CSubListに通知が来なか
ったという事ですね。
お騒がせして申し訳ありませんでした。

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