Click here to Skip to main content
15,881,852 members
Articles / Desktop Programming / ATL

Smart Grid

Rate me:
Please Sign up or sign in to vote.
4.33/5 (6 votes)
24 May 2000 386.8K   7.3K   72  
Build a grid using ATL, STL and Win32 API.
// ManageData.h : Declaration of the CManageData

#ifndef __MANAGEDATA_H_
#define __MANAGEDATA_H_

#include "resource.h"       // main symbols

class CManageData;
class CSmartGrid;

class CSmartEdit :
	public CWindowImpl< CSmartEdit >
{

public:
	
	virtual BOOL PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet);

BEGIN_MSG_MAP(CSmartEdit)
	
	MESSAGE_HANDLER(WM_CREATE,OnCreate)
	MESSAGE_HANDLER(WM_DESTROY,OnDestroy)
	MESSAGE_HANDLER(WM_SIZE,OnSize)	
	MESSAGE_HANDLER(WM_CTLCOLOREDIT,OnCtlColorEdit)		

ALT_MSG_MAP(1)
	
	MESSAGE_HANDLER(WM_CAPTURECHANGED,OnCaptureChanged)
	MESSAGE_HANDLER(WM_RBUTTONDOWN,OnRButtonDown)
	MESSAGE_HANDLER(WM_LBUTTONDOWN,OnLButtonDown)
	MESSAGE_HANDLER(WM_RBUTTONDBLCLK,OnRButtonDblClk)
	MESSAGE_HANDLER(WM_LBUTTONDBLCLK,OnLButtonDblClk)
	MESSAGE_HANDLER(WM_KEYDOWN,OnKeyDown)

END_MSG_MAP()

public:

	CManageData* m_pManageData;

	CSmartEdit( CManageData* pManageData );
	void SetText( CComBSTR& bstrText );
	CComBSTR GetText();
	
protected:

	CContainedWindow m_wndEditWindow;

	// This window
	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnCtlColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	
	// Edit
	LRESULT OnCaptureChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnLButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
};


class CSmartChoice :
	public CWindowImpl< CSmartChoice >
{

public:
	
	virtual BOOL PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet);

BEGIN_MSG_MAP(CSmartChoice)
	
	MESSAGE_HANDLER(WM_CREATE,OnCreate)
	MESSAGE_HANDLER(WM_DESTROY,OnDestroy)
	MESSAGE_HANDLER(WM_SIZE,OnSize)	
	MESSAGE_HANDLER(WM_ERASEBKGND,OnEraseBkgnd)	
	MESSAGE_HANDLER(WM_CTLCOLOREDIT,OnCtlColorEdit)	
	MESSAGE_HANDLER(WM_CTLCOLORLISTBOX,OnCtlColorListBox)	
	MESSAGE_HANDLER(WM_COMMAND,OnCommand)

ALT_MSG_MAP(1)
	
	MESSAGE_HANDLER(WM_CAPTURECHANGED,OnCaptureChanged)
	MESSAGE_HANDLER(WM_RBUTTONDOWN,OnRButtonDown)
	MESSAGE_HANDLER(WM_LBUTTONDOWN,OnLButtonDown)
	MESSAGE_HANDLER(WM_RBUTTONDBLCLK,OnRButtonDblClk)
	MESSAGE_HANDLER(WM_LBUTTONDBLCLK,OnLButtonDblClk)
	MESSAGE_HANDLER(WM_KEYDOWN,OnKeyDown)

END_MSG_MAP()

public:

	CManageData* m_pManageData;
	BOOL m_bStrict;

	CSmartChoice( CManageData* pManageData, BOOL bStrict = FALSE );
	void SetText( CComBSTR& bstrText );
	CComBSTR GetText();
	void AddItem( CComBSTR& bstrItem );
	void SelectItem( CComBSTR& bstrItem );
	void ShowDropDown( BOOL bShow );
	
protected:

	CContainedWindow m_wndEditWindow;

	// This window
	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
	LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnCtlColorEdit(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnCtlColorListBox(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	
	// Edit
	LRESULT OnCaptureChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnRButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnLButtonDblClk(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
	LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);	
};

/////////////////////////////////////////////////////////////////////////////
// CManageData
class CManageData
{
public:
		
	CSmartGrid* m_pSmartGrid;	

	CManageData();
	virtual ~CManageData();

	void UpdateChanges();
	void CancelEditing();	

public:
	
	void Edit(VARIANT* pvarData, ColumnDefinition* pDefinition, VARTYPE vtType, HWND hWnd, RECT rcBounds, CSmartGrid* pSmartGrid);
	void Draw(VARIANT* pvarData, ColumnDefinition* pDefinition, HDC hDC, RECT rcBounds, CSmartGrid* pSmartGrid);

protected:

	typedef enum tagEditState { EditState_Begin, EditState_Update, EditState_Cancel } EditState;

	HBITMAP m_hbmpChk_Checked, m_hbmpChk_UnChecked, m_hbmpUnknown, m_hbmpNull, m_hbmpObject;
	
	// View
	void Draw_Bool( unsigned char val, HDC hDC, RECT& rcBounds );
	void Draw_Integer( long val, HDC hDC, RECT& rcBounds );
	void Draw_Real( long double val, HDC hDC, RECT& rcBounds );
	void Draw_Code( long val, HDC hDC, RECT& rcBounds );
	void Draw_Currency( CY val, HDC hDC, RECT& rcBounds );
	void Draw_Date( DATE val, HDC hDC, RECT& rcBounds );
	void Draw_String( BSTR val, HDC hDC, RECT& rcBounds );
	void Draw_Object( CComPtr< IUnknown > val, HDC hDC, RECT& rcBounds );
	void Draw_Null( VARIANT val, HDC hDC, RECT& rcBounds );
	void Draw_Unknown( VARIANT val, HDC hDC, RECT& rcBounds );
	void Draw_Option( BSTR val, HDC hDC, RECT& rcBounds );
	void Draw_StrictOption( BSTR val, HDC hDC, RECT& rcBounds );

	// Edit

	typedef void (CManageData::*EditFunction)( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = 1, HWND hWnd = NULL, RECT* prcBounds = NULL);

	EditFunction m_pEditFunction;


	void Edit_Bool( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Integer( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Real( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Code( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Currency( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Date( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_String( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Object( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Null( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Unknown( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Option( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_StrictOption( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );

	CSmartEdit m_wndSmartEdit;
	CSmartChoice m_wndOption;
	CSmartChoice m_wndStrictOption;

	static long m_nImageWidth;
	static long m_nImageHeight;
};

/*
class ATL_NO_VTABLE CManageData : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public CComCoClass<CManageData, &CLSID_ManageData>,
	public IManageData
{
public:
		
	CSmartGrid* m_pSmartGrid;	

	CManageData();

	HRESULT FinalConstruct();
	HRESULT FinalRelease();
	void UpdateChanges();
	void CancelEditing();	

DECLARE_REGISTRY_RESOURCEID(IDR_MANAGEDATA)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CManageData)
	COM_INTERFACE_ENTRY(IManageData)
END_COM_MAP()

// IManageData
public:
	STDMETHOD(Edit)(VARIANT* pvarData, ColumnDefinition* pDefinition, VARTYPE vtType, HWND hWnd, RECT rcBounds, CSmartGrid* pSmartGrid);
	STDMETHOD(Draw)(VARIANT* pvarData, ColumnDefinition* pDefinition, HDC hDC, RECT rcBounds, CSmartGrid* pSmartGrid);

protected:

	typedef enum tagEditState { EditState_Begin, EditState_Update, EditState_Cancel } EditState;

	HBITMAP m_hbmpChk_Checked, m_hbmpChk_UnChecked, m_hbmpUnknown, m_hbmpNull, m_hbmpObject;
	
	// View
	void Draw_Bool( unsigned char val, HDC hDC, RECT& rcBounds );
	void Draw_Integer( long val, HDC hDC, RECT& rcBounds );
	void Draw_Real( long double val, HDC hDC, RECT& rcBounds );
	void Draw_Code( long val, HDC hDC, RECT& rcBounds );
	void Draw_Currency( CY val, HDC hDC, RECT& rcBounds );
	void Draw_Date( DATE val, HDC hDC, RECT& rcBounds );
	void Draw_String( BSTR val, HDC hDC, RECT& rcBounds );
	void Draw_Object( CComPtr< IUnknown > val, HDC hDC, RECT& rcBounds );
	void Draw_Null( VARIANT val, HDC hDC, RECT& rcBounds );
	void Draw_Unknown( VARIANT val, HDC hDC, RECT& rcBounds );
	void Draw_Option( BSTR val, HDC hDC, RECT& rcBounds );
	void Draw_StrictOption( BSTR val, HDC hDC, RECT& rcBounds );

	// Edit

	typedef void (CManageData::*EditFunction)( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = 1, HWND hWnd = NULL, RECT* prcBounds = NULL);

	EditFunction m_pEditFunction;


	void Edit_Bool( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Integer( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Real( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Code( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Currency( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Date( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_String( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Object( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Null( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Unknown( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_Option( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );
	void Edit_StrictOption( EditState state, VARIANT *val = NULL, ColumnDefinition* pDefinition = NULL, VARTYPE vtType = VT_NULL, HWND hWnd = NULL, RECT* prcBounds = NULL );

	CSmartEdit m_wndSmartEdit;
	CSmartChoice m_wndOption;
	CSmartChoice m_wndStrictOption;

	static long m_nImageWidth;
	static long m_nImageHeight;
};
*/
#endif //__MANAGEDATA_H_

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions