#if !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
#define AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

#ifdef  BUILD_GUIDLL
#define     DLLCLASS    __declspec(dllexport)
#else
#define     DLLCLASS    __declspec(dllimport)
#endif

/////////////////////////////////////////////////////////////////////////////
// GridCellCombo.h : header file
//
// MFC Grid Control - Grid combo cell class header file
//
// Written by Chris Maunder <chris@codeproject.com>
// Copyright (c) 1998-2005. All Rights Reserved.
//
// This code may be used in compiled form in any way you desire. This
// file may be redistributed unmodified by any means PROVIDING it is
// not sold for profit without the authors written consent, and
// providing that this notice and the authors name and all copyright
// notices remains intact.
//
// An email letting me know how you are using it would be nice as well.
//
// This file is provided "as is" with no expressed or implied warranty.
// The author accepts no liability for any damage/loss of business that
// this product may cause.
//
// For use with CGridCtrl v2.10
//
//////////////////////////////////////////////////////////////////////

#include "../GridCtrl_src/GridCell.h"

class DLLCLASS CGridCellCombo : public CGridCell
{
friend class CGridCtrl;
DECLARE_DYNCREATE(CGridCellCombo)

public:
    CGridCellCombo();

// editing cells
public:
    virtual BOOL  Edit(int nRow, int nCol, CRect rect, CPoint point, UINT nID, UINT nChar);
    virtual CWnd* GetEditWnd() const;
    virtual void  EndEdit();

// Operations
public:
    virtual CSize GetCellExtent(CDC* pDC);

// CGridCellCombo specific calls
public:
    void SetOptions(const CStringArray& ar);
    void  SetStyle(DWORD dwStyle)
    {
        m_dwStyle = dwStyle;
    }

    DWORD GetStyle()
    {
        return m_dwStyle;
    }

protected:
    virtual BOOL Draw(CDC* pDC, int nRow, int nCol, CRect rect, BOOL bEraseBkgnd = TRUE);

    CStringArray m_Strings;
    DWORD        m_dwStyle;
};

/////////////////////////////////////////////////////////////////////////////
// CComboEdit window

#define IDC_COMBOEDIT 1001

class DLLCLASS CComboEdit : public CEdit
{
// Construction
public:
    CComboEdit();

// Attributes
public:

// Operations
public:

// Overrides
    // ClassWizard generated virtual function overrides
    // {{AFX_VIRTUAL(CComboEdit)
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    // }}AFX_VIRTUAL

// Implementation
public:
    virtual ~CComboEdit();

    // Generated message map functions
protected:
    // {{AFX_MSG(CComboEdit)
    afx_msg void OnKillFocus(CWnd* pNewWnd);
    afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
    // }}AFX_MSG

    DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////
// CInPlaceList window

class DLLCLASS CInPlaceList : public CComboBox
{
friend class CComboEdit;

// Construction
public:
    CInPlaceList(CWnd* pParent,                    // parent
                 CRect& rect,                      // dimensions & location
                 DWORD dwStyle,                    // window/combobox style
                 UINT nID,                         // control ID
                 int nRow, int nColumn,            // row and column
                 COLORREF crFore, COLORREF crBack, // Foreground, background colour
                 CStringArray& Items,              // Items in list
                 CString sInitText,                // initial selection
                 UINT nFirstChar);                 // first character to pass to control

// Attributes
public:
    CComboEdit m_edit;                             // subclassed edit control

// Operations
public:

// Overrides
    // ClassWizard generated virtual function overrides
    // {{AFX_VIRTUAL(CInPlaceList)
protected:
    virtual void PostNcDestroy();
    // }}AFX_VIRTUAL

// Implementation
public:
    virtual ~CInPlaceList();
    void EndEdit();

protected:
    int GetCorrectDropWidth();

// Generated message map functions
protected:
    // {{AFX_MSG(CInPlaceList)
    afx_msg void   OnKillFocus(CWnd* pNewWnd);
    afx_msg void   OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
    afx_msg void   OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
    afx_msg void   OnDropdown();
    afx_msg UINT   OnGetDlgCode();
    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
    // }}AFX_MSG
    // afx_msg void OnSelendOK();

    DECLARE_MESSAGE_MAP()

private:
    int      m_nNumLines;
    CString  m_sInitText;
    int      m_nRow;
    int      m_nCol;
    UINT     m_nLastChar;
    BOOL     m_bExitOnArrows;
    COLORREF m_crForeClr, m_crBackClr;
};

/////////////////////////////////////////////////////////////////////////////

// {{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_GRIDCELLCOMBO_H__ECD42822_16DF_11D1_992F_895E185F9C72__INCLUDED_)
