// AsciiCE2.h : Declaration of the CAsciiCE2

//#include "Defines.h"
#ifdef USE_ATLCOM
#ifdef USE_ASCII

#ifndef __ASCIICE2_H_
#define __ASCIICE2_H_

//#include "resource.h"       // main symbols
//#include <atlctl.h>


/////////////////////////////////////////////////////////////////////////////
// CAsciiCE2
class ATL_NO_VTABLE CAsciiCE2 : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispatchImpl<IAsciiCE2, &IID_IAsciiCE2, &LIBID_PRENGINECELib>,
	public CComControl<CAsciiCE2>,
	public IPersistStreamInitImpl<CAsciiCE2>,
	public IOleControlImpl<CAsciiCE2>,
	public IOleObjectImpl<CAsciiCE2>,
	public IOleInPlaceActiveObjectImpl<CAsciiCE2>,
	public IViewObjectExImpl<CAsciiCE2>,
	public IOleInPlaceObjectWindowlessImpl<CAsciiCE2>,
	public IPersistStorageImpl<CAsciiCE2>,
	public ISpecifyPropertyPagesImpl<CAsciiCE2>,
	public IQuickActivateImpl<CAsciiCE2>,
	public IDataObjectImpl<CAsciiCE2>,
	public IProvideClassInfo2Impl<&CLSID_AsciiCE2, NULL, &LIBID_PRENGINECELib>,
	public CComCoClass<CAsciiCE2, &CLSID_AsciiCE2>
{
public:

	CAsciiCE2();
	~CAsciiCE2();
DECLARE_REGISTRY_RESOURCEID(IDR_ASCIICE2)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CAsciiCE2)
	COM_INTERFACE_ENTRY(IAsciiCE2)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY(IViewObjectEx)
	COM_INTERFACE_ENTRY(IViewObject2)
	COM_INTERFACE_ENTRY(IViewObject)
	COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
	COM_INTERFACE_ENTRY(IOleInPlaceObject)
	COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
	COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
	COM_INTERFACE_ENTRY(IOleControl)
	COM_INTERFACE_ENTRY(IOleObject)
	COM_INTERFACE_ENTRY(IPersistStreamInit)
	COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
	COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
	COM_INTERFACE_ENTRY(IQuickActivate)
	COM_INTERFACE_ENTRY(IPersistStorage)
	COM_INTERFACE_ENTRY(IDataObject)
	COM_INTERFACE_ENTRY(IProvideClassInfo)
	COM_INTERFACE_ENTRY(IProvideClassInfo2)
END_COM_MAP()

BEGIN_PROP_MAP(CAsciiCE2)
	PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
	PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
	// Example entries
	// PROP_ENTRY("Property Description", dispid, clsid)
	// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

BEGIN_MSG_MAP(CAsciiCE2)
	CHAIN_MSG_MAP(CComControl<CAsciiCE2>)
	DEFAULT_REFLECTION_HANDLER()
END_MSG_MAP()
// Handler prototypes:
//  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
//  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
//  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);



// IViewObjectEx
	DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)

// IAsciiCE2
// IAsciiCE
//private:
//	long CopyBufferToVariantArray(VARIANT *inVar,BYTE* buff,long bcnt);
//	long CopyVariantArrayToBuffer(VARIANT *inVar,BYTE* buff,long bcnt);

public:
	STDMETHOD(WriteVar)(/*[in]*/VARIANT* lpBuffer,/*[in]*/ long nNumberOfBytesToWrite,/*[out]*/ VARIANT* lpNumberOfBytesWritten);
	STDMETHOD(Write)(/*[in]*/ unsigned char * lpBuffer,/*[in]*/ long nNumberOfBytesToWrite,/*[out]*/ long* lpNumberOfBytesWritten);
	STDMETHOD(ReadStringVar)(/*[in]*/ long nMaxChars,/*[in]*/ long nLastChar,/*[in]*/ long nModeFlags,/*[in]*/ long nTimeToWait,/*[out]*/ VARIANT* lpResultFlags,/*[out]*/ VARIANT* lpCharsRead,/*[out,retval]*/ BSTR* lpString);
	STDMETHOD(ReadVar)(/*[in]*/ long nMaxBytes,/*[in]*/ long nLastChar,/*[in]*/ long nModeFlags,/*[in]*/ long nTimeToWait,/*[out]*/ VARIANT* lpResultFlags,/*[out]*/ VARIANT* lpBytesRead,/*[out,retval]*/ VARIANT* lpBuffer);
	STDMETHOD(Read)(/*[in]*/ long nMaxBytes,/*[in]*/ long nLastChar,/*[in]*/ long nModeFlags,/*[in]*/ long nTimeToWait,/*[out]*/ long* lpResultFlags,/*[out]*/ long* lpBytesRead,/*[out]*/ unsigned char * lpBuffer);
	STDMETHOD(ReadString)(/*[in]*/ long nMaxChars,/*[in]*/ long nLastChar,/*[in]*/ long nModeFlags,/*[in]*/ long nTimeToWait,/*[out]*/ long* lpResultFlags,/*[out]*/ long* lpCharsRead,/*[out,retval]*/ BSTR* lpString);
	STDMETHOD(ReadChar)(/*[out, retval]*/ short* bval);
	STDMETHOD(SelectPortEx)(/*[in]*/ long Port,/*[in]*/ long BaudRate,/*[in]*/ long Handshake,/*[in]*/ long ReadBufferSize,/*[out,retval]*/ long* ErrVal);
	STDMETHOD(PrDialogBoxText)(/*[in]*/ BSTR MainText,/*[in]*/ BSTR TitleText,/*[in]*/ BSTR CancelBtnText);
	STDMETHOD(PrDialogBox)(/*[in]*/ long Operation, /*[out,retval]*/ long* Status);
	STDMETHOD(get_About)(/*[out, retval]*/ BSTR *pVal);
	STDMETHOD(get_GetVersion)(/*[out, retval]*/ long *pVal);
	STDMETHOD(put_SetReportLevel)(/*[in]*/ long newVal);
	STDMETHOD(put_SetErrorLevel)(/*[in]*/ long newVal);
	STDMETHOD(get_StatusCheck)(/*[out, retval]*/ long *pVal);
	STDMETHOD(get_Peek)(/*[out, retval]*/ long *pVal);
	STDMETHOD(get_Capabilities)(/*[out, retval]*/ long *pVal);
	STDMETHOD(Text)(/*[in]*/ BSTR TextString);
	STDMETHOD(ClosePort)();
	STDMETHOD(Init)(/*[in]*/ BSTR RegID,/*[out,retval]*/ BOOL* pSuccess);
	STDMETHOD(SelectPort)(/*[in]*/ long Port,/*[in]*/ long BaudRate,/*[in]*/ long Handshake,/*[out,retval]*/ long* ErrVal);
	STDMETHOD(FormFeed)();
	STDMETHOD(RepeatChar)(/*[in]*/ long ch,/*[in]*/ long repeatcnt);
	STDMETHOD(Char)(/*[in]*/ long ch);
	STDMETHOD(CrLf)();

	HRESULT OnDraw(ATL_DRAWINFO& di);
};

#endif //__ASCIICE2_H_

#endif
#endif