補足のところにかかれたコード、このままだと内部のクラスのメンバにアクセスするにはどうすればいいんでしょうかねぇ?
あと、内部のクラスのコンストラクタに引数をどう渡すのか?というのはおいといて。
仮想関数は、普通に使えると思いますよ。
ただ、メッセージハンドラは、通常ウィザードが自動的に作成するコードも自分で書く必要があるので気合が必要でしょう。
具体的にどことは言いません(いっぱいあるし)。
なんで、普通はこうでしょうね。
//CharEditEx.h
class CCharEditEx : public CEdit
{
public:
CCharEditEx(int nItem, int nSubItem, CString &sContent)
{
m_nItem = nItem; // アイテム行番号格納
m_nSubItem = nSubItem; // アイテム列番号格納
m_sContent = sContent; // アイテム内容格納
m_bVK_ESCAPE = FALSE;
};
・
・
・
};
//-----------------------------
//ShellListCtrlEx.h
#include "CharEditEx.h"
class CShellListCtrlEx : public CListCtrl
{
public:
CShellListCtrlEx(int nItem, int nSubItem, CString &sContent)
{
m_m_pEditEx = new CCharEditEx(nItem,nSubItem,sContent);
}
~CShellListCtrlEx()
{
delete m_m_pEditEx;
}
private:
CCharEditEx * m_pEditEx;
・
・
・
};
無理やり中にクラスを定義するメリットないです。
デメリットだらけです。
補足
説明不足で申し訳ありません、下記のようなことがしたいのですが・・・。 class CShellListCtrlEx : public CListCtrl { // コンストラクション public: CShellListCtrlEx(); // アトリビュート public: // オペレーション public: class CCharEditEx : public CEdit { public: CCharEditEx(int nItem, int nSubItem, CString &sContent) { m_nItem = nItem; // アイテム行番号格納 m_nSubItem = nSubItem; // アイテム列番号格納 m_sContent = sContent; // アイテム内容格納 m_bVK_ESCAPE = FALSE; } protected: int m_nItem; // アイテムの行番号 int m_nSubItem; // アイテムの列番号 CString m_sContent; // 編集前内容格納 BOOL m_bVK_ESCAPE; // エスケープキー使用時フラグ }; この場合、仮想関数やWindowsメッセージハンドラは使用できないのでしょうか?。