CCtrlView から派生させて CListBoxView を作ってみました。ポイントになるのは、コンストラクタと
OnChildNotify あたりでしょうか。編集機能とシリアライズ機能も付けてみましたが、MFC
の CListView の方が便利なのでほとんど用途はないかもしれません。ソースを丸ごと載せておきます。インプリメンテーションファイルはこちら。
#if !defined(AFX_LISTBOXVIEW_H_INCLUDED_)
#define AFX_LISTBOXVIEW_H_INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// ListBoxView.h : ヘッダー ファイル
//
// Copyright (c) 2007 AOK. All Rights Reserved.
//
class CListBoxView;
/////////////////////////////////////////////////////////////////////////////
// CLBEdit ウィンドウ
class CLBEdit : public CEdit
{
// コンストラクション
public:
CLBEdit();
// アトリビュート
public:
// オペレーション
public:
void BeginEdit(int nItem, LPCTSTR pszText);
void EndEdit();
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CLBEdit)
public:
//}}AFX_VIRTUAL
// インプリメンテーション
public:
virtual ~CLBEdit();
// 生成されたメッセージ マップ関数
protected:
//{{AFX_MSG(CLBEdit)
afx_msg void OnChange();
afx_msg void OnKillFocus();
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
int m_nCurIndex;
CString m_sPreText;
CListBoxView* GetView() const;
};
/////////////////////////////////////////////////////////////////////////////
// CListBoxView ビュー
class CListBoxView : public CCtrlView
{
protected:
CListBoxView(); // 動的生成に使用されるプロテクト コンストラクタ
DECLARE_DYNCREATE(CListBoxView)
// アトリビュート
public:
CListBox& GetListBox() const;
// オペレーション
public:
void AdjustListBox();
// オーバーライド
// ClassWizard は仮想関数のオーバーライドを生成します。
//{{AFX_VIRTUAL(CListBoxView)
public:
virtual BOOL OnChildNotify(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult);
//}}AFX_VIRTUAL
// インプリメンテーション
protected:
virtual ~CListBoxView();
virtual void SerializeRaw(CArchive& ar);
virtual void OnSelChange(int nItem);
virtual void OnDblClk(int nItem);
// 生成されたメッセージ マップ関数
protected:
CLBEdit m_edit;
//{{AFX_MSG(CListBoxView)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnSize(UINT nType, int cx, int cy);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ は前行の直前に追加の宣言を挿入します。
#endif // !defined(AFX_LISTBOXVIEW_H_INCLUDED_)