CCtrlView 雑記

Last Updated: Feb.14,2007
使用しているコンパイラは、Microsoft Visual C++ 6.0 です。これ以外のバージョンでは記述と食い違うことがあるかも知れません。

2. CListBoxView ヘッダーファイル(.h)

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_)

Back Copyright (c) 2007 AOK. All Rights Reserved.