// FormEditor.h : Declaration of the CFormEditor
//
// Author : David Shepherd
// Copyright (c) 2002, DaeDoe-Software
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __FORMEDITOR_H_
#define __FORMEDITOR_H_
#include "resource.h" // main symbols
#include <atlctl.h>
#include "DDAxWindow.h"
#include "DragFrame.h"
#include "EditableForm.h"
#include "TabNumber.h"
#include "UndoRedoStorage.h"
#include "DDFormsCP.h"
// show the context menu
// wparam : unused
// lparam : unused
// return : nothing
#define WM_CONTEXTMENU_INDIRECT (WM_APP+0)
// get extended property page data
// wparam : unused
// lparam : CExtendedPropPageData*
// return : TRUE on success
#define WM_GET_EXTENDED_PROPPAGE_DATA (WM_APP+1)
// set extended property page data
// wparam : unused
// lparam : CExtendedPropPageData*
// return : TRUE on success
#define WM_SET_EXTENDED_PROPPAGE_DATA (WM_APP+2)
namespace AxFormEditor {
/////////////////////////////////////////////////////////////////////////////
// CExtendedPropPageData
class CExtendedPropPageData
{
public:
// name
std::wstring m_Name;
CExtendedPropPageData();
virtual ~CExtendedPropPageData();
};
/////////////////////////////////////////////////////////////////////////////
// CItemInfo
class CItemInfo
{
private:
// disallow standalone instantiation
CItemInfo();
CItemInfo(const CItemInfo &ItemInfo);
// disallow external destruction
virtual ~CItemInfo();
// these private members ensure that an object of this class
// can only be created using CreateObject() and can only be
// destroyed using DeleteObject()
// disallow assignment
const CItemInfo &operator=(const CItemInfo &ItemInfo);
// this works in conjunction with the other private members
// to ensure that there is only ever a single instance of
// this class per item
public:
// creates a new object
static CItemInfo *CreateObject();
// deletes an existing object
static void DeleteObject(const CItemInfo *pItemInfo);
// name
std::wstring m_Name;
// tag
std::wstring m_Tag;
// host window
CDDAxWindow m_HostWindow;
// drag frame
CDragFrame m_DragFrame;
// tab number
CTabNumber m_TabNumber;
// last move or size drag rect
CRect m_LastDragRect;
// todo : add additional item information here as required
};
// CItemInfo pointer list
typedef std::list<CItemInfo *> CItemInfoPtrList;
// CItemInfo pointer vector
typedef std::vector<CItemInfo *> CItemInfoPtrVector;
// CAutoItemInfoPtr
#include "AutoItemInfoPtr.h"
/////////////////////////////////////////////////////////////////////////////
// CEventInfo
class CEventInfo
{
public:
// source name
std::wstring m_SourceName;
// event name
std::wstring m_EventName;
// parameter names
std::wstring m_ParameterNames;
CEventInfo();
virtual ~CEventInfo();
};
/////////////////////////////////////////////////////////////////////////////
// CFormEditorState
class CFormEditorState
{
public:
// this will be set TRUE if the editor is busy
BOOL m_Busy;
// this will be set TRUE if the form is modified
BOOL m_Modified;
// this will be set TRUE if the clipboard format is available
BOOL m_CanPaste;
// this will be set TRUE if the undo storage is not empty
BOOL m_CanUndo;
// this will be set TRUE if the redo storage is not empty
BOOL m_CanRedo;
// the number of items on the form
long m_ItemCount;
// the number of items selected
long m_SelectedItemCount;
CFormEditorState();
virtual ~CFormEditorState();
BOOL operator==(const CFormEditorState &Obj) const;
BOOL operator!=(const CFormEditorState &Obj) const;
};
/////////////////////////////////////////////////////////////////////////////
// type definitions
// maps an object name to an IDispatch interface
typedef std::map<std::wstring,CComPtr<IDispatch> > CObjectNameToIDispatchMap;
// maps a menu item id to a CEventInfo
typedef std::map<DWORD,CEventInfo> CMenuItemIdToEventInfoMap;
// contains a set of available menu item id's
typedef std::set<DWORD> CAvailableMenuItemIdSet;
/////////////////////////////////////////////////////////////////////////////
// CFormEditor
// window traits
typedef CWinTraits<
// standard styles
WS_CHILD|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL|
// clipping
WS_CLIPCHILDREN|WS_CLIPSIBLINGS,
// extended styles
WS_EX_CONTROLPARENT|WS_EX_CLIENTEDGE> CFormEditorWinTraits;
// base class
typedef CWindowImpl<
class CFormEditor,CWindow,CFormEditorWinTraits> CFormEditorBase;
// editor CComControl
typedef CComControl<CFormEditor,CFormEditorBase> CFormEditorComControl;
// all these typedefs are required to make CHAIN_MSG_MAP compile
class ATL_NO_VTABLE CFormEditor :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IFormEditor2, &IID_IFormEditor2, &LIBID_DDFORMSLib, TlbVerMaj, TlbVerMin>,
public CFormEditorComControl,
public IPersistStreamInitImpl<CFormEditor>,
public IOleControlImpl<CFormEditor>,
public IOleObjectImpl<CFormEditor>,
public IOleInPlaceActiveObjectImpl<CFormEditor>,
public IViewObjectExImpl<CFormEditor>,
public IOleInPlaceObjectWindowlessImpl<CFormEditor>,
public IConnectionPointContainerImpl<CFormEditor>,
public IPersistStorageImpl<CFormEditor>,
public IPersistPropertyBagImpl<CFormEditor>,
public ISpecifyPropertyPagesImpl<CFormEditor>,
public IQuickActivateImpl<CFormEditor>,
public IDataObjectImpl<CFormEditor>,
public IProvideClassInfo2Impl<&CLSID_FormEditor, &DIID__IFormEditorEvents, &LIBID_DDFORMSLib, TlbVerMaj, TlbVerMin>,
public IPropertyNotifySinkCP<CFormEditor>,
public CComCoClass<CFormEditor, &CLSID_FormEditor>,
public CProxy_IFormEditorEvents<CFormEditor>,
public CDragFrameNotifySink
{
private:
// the script
CComPtr<IScript> m_spScript;
// the form
CEditableForm m_Form;
// the form name
std::wstring m_FormName;
// the form drag frame
CDragFrame m_FormDragFrame;
// the form tab number
CTabNumber m_FormTabNumber;
// the last form drag rect
CRect m_LastFormDragRect;
// list of items in the form (sorted by zorder)
CItemInfoPtrList m_ItemInfoPtrList;
// the window after which all items will be placed
CWindow m_ItemRootWindow;
// this will be set TRUE if the selection box is active
BOOL m_SelectionBoxActive;
// the selection box anchor position
CPoint m_SelectionBoxAnchorPos;
// the last selection box drag rect
CRect m_LastSelectionBoxDragRect;
// the custom clipboard format id
DWORD m_ClipboardFormatId;
// undo storage
CUndoRedoStorage m_UndoStorage;
// redo storage
CUndoRedoStorage m_RedoStorage;
// this will be set TRUE if the editor is in tab ordering mode
BOOL m_TabOrderingModeActive;
// the next tab number to assign to an item
DWORD m_NextTabNumber;
// this will be set TRUE if the editor is busy
// this can happen for example during an item move or size
BOOL m_Busy;
// this will be set TRUE if the form is modified
BOOL m_Modified;
// this will be set TRUE if the clipboard format is available
BOOL m_CanPaste;
// exposed objects
CObjectNameToIDispatchMap m_ExposedObjects;
// this will be set TRUE if the editor is in locked mode
BOOL m_LockedModeActive;
// properties
// border visible
VARIANT_BOOL m_BorderVisible;
// background color
OLE_COLOR m_BackColor;
// default form width
long m_DefaultFormWidth;
// default form height
long m_DefaultFormHeight;
// default form background color
OLE_COLOR m_DefaultFormBackColor;
// default form foreground color
OLE_COLOR m_DefaultFormForeColor;
// determines if run mode is active
BOOL InRunMode();
// determines if design mode is active
BOOL InDesignMode();
// sets the form dimensions
void SetFormDimensions(long Width,long Height);
// sets the form colors
void SetFormColors(OLE_COLOR BackColor,OLE_COLOR ForeColor);
// determines which item is located at the passed position
CItemInfo *HitTest(const CPoint &Pos);
// selects the form
void SelectForm();
// unselects the form
void UnselectForm();
// determines if the form is selected
BOOL IsFormSelected();
// selects an item
void SelectItem(CItemInfo &ItemInfo);
// selects all items contained in the passed rectangle
void SelectAllItemsInRect(const CRect &Rect);
// selects the passed items
void SelectItems(const CItemInfoPtrList &ItemInfoPtrList);
// selects all items
void SelectAllItems();
// unselects an item
void UnselectItem(CItemInfo &ItemInfo);
// unselects the passed items
void UnselectItems(const CItemInfoPtrList &ItemInfoPtrList);
// unselects all items
void UnselectAllItems();
// determines if an item is selected
BOOL IsItemSelected(CItemInfo &ItemInfo);
// returns a list of selected items
CItemInfoPtrList GetSelectedItems();
// returns the number of selected items
DWORD GetSelectedItemCount();
// hides all drag frames
void HideAllDragFrames();
// restores and repositions all drag frames
void RestoreAndRepositionAllDragFrames();
// hides all tab numbers
void HideAllTabNumbers();
// restores and repositions all tab numbers
void RestoreAndRepositionAllTabNumbers();
// hides all drag frames and tab numbers
void HideAllDragFramesAndTabNumbers();
// restores and repositions all drag frames and tab numbers
void RestoreAndRepositionAllDragFramesAndTabNumbers();
// returns an item rect reletive to the form
CRect GetItemRect(CItemInfo &ItemInfo);
// returns the rectangle which encapsulates the passed items
CRect GetBoundingRectForItems(const CItemInfoPtrList &ItemInfoPtrList);
// returns the rectangle which encapsulates all selected items
CRect GetBoundingRectForSelectedItems();
// returns the rectangle which encapsulates all items
CRect GetBoundingRectForAllItems();
// forces the source rectangle to fit into the destination rectangle
CRect ForceRectIntoRect(const CRect &Destination,const CRect &Source);
// converts client position coordinates to form coordinates
CPoint ClientPosToFormPos(const CPoint &Pos);
// converts client rectangle coordinates to form coordinates
CRect ClientRectToFormRect(const CRect &Rect);
// snaps the passed position to the current gird settings
CPoint SnapPosToGrid(const CPoint &Pos);
// snaps the passed rectangle to the current grid settings
CRect SnapRectToGrid(const CRect &Rect);
// inserts an item by class id
CItemInfo &InsertItem(const CLSID &ClassId,const CRect &Rect);
// inserts an item by prog id
CItemInfo &InsertItem(const std::wstring &ProgId,const CRect &Rect);
// deletes an item
void DeleteItem(CItemInfo &ItemInfo);
// deletes all selected items
void DeleteSelectedItems();
// deletes all items
void DeleteAllItems();
// gets the position of an item (including the tab number)
void GetItemPosition(
CItemInfo &ItemInfo,CRect &Rect,long &TabNumber);
// sets the position of an item (including the tab number)
void SetItemPosition(
CItemInfo &ItemInfo,const CRect &Rect,long TabNumber);
// cuts selected items to the clipboard
void CutSelectedItemsToClipboard();
// copies selected items to the clipboard
void CopySelectedItemsToClipboard();
// pastes items from the clipboard
CItemInfoPtrList PasteItemsFromClipboard();
// saves the current form into the undo storage
void UpdateUndoStorage(BOOL PreserveRedoStorage=FALSE);
// saves the current form into the redo storage
void UpdateRedoStorage();
// undoes the last change
void UndoLastChange();
// redoes the last undo
void RedoLastUndo();
// clears the undo storage
void ClearUndoStorage();
// clears the redo storage
void ClearRedoStorage();
// clears the undo and redo storage
void ClearUndoAndRedoStorage();
// switches the editor into tab ordering mode
void BeginSetTabOrder();
// switches the editor back from tab ordering mode
void EndSetTabOrder();
// updates an items tab order
void UpdateItemTabOrder(CItemInfo &ItemInfo);
// sets the busy flag
void SetBusy(BOOL Busy);
// sets the modified flag
void SetModified(BOOL Modified);
// returns the state of the editor
CFormEditorState GetState();
// fires a state changed event
void FireStateChangedEvent(
const CFormEditorState &OldState,BOOL Force=FALSE);
// determines if the passed name is valid
BOOL IsNameValid(const std::wstring &Name);
// determines if the passed name is unique
BOOL IsNameUnique(const std::wstring &Name,const CWindow &Ignore=NULL);
// creates a unique item name given the base name
std::wstring CreateUniqueItemName(const std::wstring &BaseName);
// creates a unique item name from the item provided base name
std::wstring CreateUniqueItemName(const CComPtr<IOleObject> &spOleObject);
// initialises the form using raw information
void InitialiseForm(
const std::wstring &Name,const CSize &Size,
OLE_COLOR BackColor,OLE_COLOR ForeColor);
// initialises the form from the passed stream
void InitialiseFormFromStream(
const CComPtr<IStream> &spStream,DWORD StreamVersion);
// saves the form to the passed stream
void SaveFormToStream(const CComPtr<IStream> &spStream);
// creates an item using raw information
CItemInfo &CreateItem(
const std::wstring &Name,const std::wstring &Tag,
const CRect &Rect,const CLSID &ClassId,
const CComPtr<IStream> &spStream);
// creates items from the passed stream
CItemInfoPtrList CreateItemsFromStream(
const CComPtr<IStream> &spStream,DWORD StreamVersion,
BOOL IsPasting);
// saves items to the passed stream
void SaveItemsToStream(const CComPtr<IStream> &spStream,
const CItemInfoPtrList &ItemInfoPtrList);
// resets the script
void ResetScript();
// loads the script from the passed stream
void LoadScriptFromStream(
const CComPtr<IStream> &spStream,DWORD StreamVersion);
// saves the script to the passed stream
void SaveScriptToStream(const CComPtr<IStream> &spStream);
// stream type
enum StreamType {
// full stream (form,items,script)
StreamTypeFull,
// clipboard stream (items only)
StreamTypeClipboard,
// undo or redo stream (form,items)
StreamTypeUndoRedo };
// loads components from the passed stream
CItemInfoPtrList InternalLoad(
const CComPtr<IStream> &spStream,StreamType Type);
// saves components to the passed stream
void InternalSave(
const CComPtr<IStream> &spStream,StreamType Type);
// validates the script
BOOL InternalValidateScript();
// move type
enum MoveType {
// move left
MoveTypeLeft,
// move right
MoveTypeRight,
// move up
MoveTypeUp,
// move down
MoveTypeDown };
// moves selected items
void MoveSelectedItems(MoveType Type);
// align type
enum AlignType {
// align left
AlignTypeLeft,
// align right
AlignTypeRight,
// align top
AlignTypeTop,
// align bottom
AlignTypeBottom };
// aligns selected items to one another
void AlignSelectedItems(AlignType Type);
// form align type
enum FormAlignType {
// align horizontal center
FormAlignTypeHCenter,
// align vertical center
FormAlignTypeVCenter,
// align both horizontal and vertical center
FormAlignTypeBoth };
// aligns selected items to the form
void AlignSelectedItemsToForm(FormAlignType Type);
// size type
enum SizeType {
// size width
SizeTypeWidth,
// size height
SizeTypeHeight,
// size both width and height
SizeTypeBoth };
// sizes selected items to the largest
void SizeSelectedItemsToLargest(SizeType Type);
// sizes selected items to the smallest
void SizeSelectedItemsToSmallest(SizeType Type);
// todo : modify the editor to have a dominant control
// spaces selected items horizontally
void SpaceSelectedItemsHorizontally();
// spaces selected items vertically
void SpaceSelectedItemsVertically();
// determines if the passed item requires property pages
BOOL DoesItemRequirePropertyPages(CItemInfo &ItemInfo);
// shows property pages for the form
void ShowFormProperties();
// shows property pages for the selected item
void ShowSelectedItemProperties();
// adds an object to the exposed objects map
void AddExposedObject(
const std::wstring &Name,const CComPtr<IDispatch> &spDispatch);
// determines if an event is handled by the script
BOOL IsEventHandled(const std::wstring &Source,const std::wstring &Event);
// adds an event handler to the script
void AddEventHandler(const CEventInfo &EventInfo);
// edits an event handler in the script
void EditEventHandler(const std::wstring &Source,const std::wstring &Event);
// creates an event menu given an objects IDispatch interface
CMenuHandle CreateEventMenu(
const std::wstring &SourceName,
const CComPtr<IDispatch> &spDispatch,
CAvailableMenuItemIdSet &AvailableMenuItemIdSet,
CMenuItemIdToEventInfoMap &MenuItemIdToEventInfoMap);
// creates an event menu given an objects event interface type info
CMenuHandle CreateEventMenu(
const std::wstring &SourceName,
const CComPtr<ITypeInfo> &spTypeInfo,
CAvailableMenuItemIdSet &AvailableMenuItemIdSet,
CMenuItemIdToEventInfoMap &MenuItemIdToEventInfoMap);
// creates an event menu for the form
CMenuHandle CreateFormEventMenu(
CAvailableMenuItemIdSet &AvailableMenuItemIdSet,
CMenuItemIdToEventInfoMap &MenuItemIdToEventInfoMap);
// creates an event menu for the passed item
CMenuHandle CreateItemEventMenu(
CItemInfo &ItemInfo,
CAvailableMenuItemIdSet &AvailableMenuItemIdSet,
CMenuItemIdToEventInfoMap &MenuItemIdToEventInfoMap);
// creates an event menu for the exposed object with the passed name
CMenuHandle CreateExposedObjectEventMenu(
const std::wstring &Name,
CAvailableMenuItemIdSet &AvailableMenuItemIdSet,
CMenuItemIdToEventInfoMap &MenuItemIdToEventInfoMap);
// creates an exposed objects menu
CMenuHandle CreateExposedObjectsMenu(
CAvailableMenuItemIdSet &AvailableMenuItemIdSet,
CMenuItemIdToEventInfoMap &MenuItemIdToEventInfoMap);
public:
CFormEditor();
virtual ~CFormEditor();
DECLARE_REGISTRY_RESOURCEID(IDR_FORMEDITOR)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CFormEditor)
COM_INTERFACE_ENTRY(IFormEditor2)
COM_INTERFACE_ENTRY(IFormEditor)
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(IConnectionPointContainer)
COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
COM_INTERFACE_ENTRY(IQuickActivate)
COM_INTERFACE_ENTRY(IPersistStorage)
COM_INTERFACE_ENTRY(IPersistPropertyBag)
COM_INTERFACE_ENTRY(IDataObject)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
END_COM_MAP()
BEGIN_PROP_MAP(CFormEditor)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY("BorderVisible", DISPID_BORDERVISIBLE, CLSID_PropPageFormEditor)
PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage)
PROP_ENTRY("FormWidth", DISPID_FORMWIDTH, CLSID_PropPageFormEditor)
PROP_ENTRY("FormHeight", DISPID_FORMHEIGHT, CLSID_PropPageFormEditor)
PROP_ENTRY("FormBackColor", DISPID_FORMBACKCOLOR, CLSID_StockColorPage)
PROP_ENTRY("FormForeColor", DISPID_FORMFORECOLOR, CLSID_StockColorPage)
PROP_ENTRY("GridWidth", DISPID_GRIDWIDTH, CLSID_PropPageFormEditor)
PROP_ENTRY("GridHeight", DISPID_GRIDHEIGHT, CLSID_PropPageFormEditor)
PROP_ENTRY("GridVisible", DISPID_GRIDVISIBLE, CLSID_PropPageFormEditor)
PROP_ENTRY("DragFrameBackColor", DISPID_DRAGFRAMEBACKCOLOR, CLSID_StockColorPage)
PROP_ENTRY("DragFrameForeColor", DISPID_DRAGFRAMEFORECOLOR, CLSID_StockColorPage)
PROP_ENTRY("TabNumberBackColor", DISPID_TABNUMBERBACKCOLOR, CLSID_StockColorPage)
PROP_ENTRY("TabNumberForeColor", DISPID_TABNUMBERFORECOLOR, CLSID_StockColorPage)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
BEGIN_CONNECTION_POINT_MAP(CFormEditor)
CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
CONNECTION_POINT_ENTRY(DIID__IFormEditorEvents)
END_CONNECTION_POINT_MAP()
BEGIN_MSG_MAP(CFormEditor)
CHAIN_MSG_MAP(CFormEditorComControl)
DEFAULT_REFLECTION_HANDLER()
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
MESSAGE_HANDLER(WM_HSCROLL, OnHScroll)
MESSAGE_HANDLER(WM_VSCROLL, OnVScroll)
MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUP)
MESSAGE_HANDLER(WM_RBUTTONDOWN, OnRButtonDown)
MESSAGE_HANDLER(WM_RBUTTONUP, OnRButtonUp)
MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
MESSAGE_HANDLER(WM_CAPTURECHANGED, OnCaptureChanged)
MESSAGE_HANDLER(WM_CONTEXTMENU_INDIRECT, OnContextMenuIndirect)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
MESSAGE_HANDLER(WM_TIMER, OnTimer)
MESSAGE_HANDLER(WM_GET_EXTENDED_PROPPAGE_DATA, OnGetExtendedPropPageData)
MESSAGE_HANDLER(WM_SET_EXTENDED_PROPPAGE_DATA, OnSetExtendedPropPageData)
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);
// drag frame notify sink
void DFNS_BeginMove();
void DFNS_Move(long cx,long cy);
void DFNS_EndMove();
void DFNS_BeginSize();
void DFNS_Size(CDragFrame::DragHandle Handle,long cx,long cy);
void DFNS_EndSize();
void DFNS_ContextMenu();
// simulated notification messages
void DFNS_BeginSizeForm();
void DFNS_SizeForm(CDragFrame::DragHandle Handle,long cx,long cy);
void DFNS_EndSizeForm();
// base class overrides
HRESULT OnDraw(ATL_DRAWINFO &di);
// IOleControl
STDMETHOD(OnAmbientPropertyChange)(DISPID dispid);
// IViewObjectEx
DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
// message handlers
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnHScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnVScroll(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnLButtonUP(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnRButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnRButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCaptureChanged(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenuIndirect(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnTimer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnGetExtendedPropPageData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSetExtendedPropPageData(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// IFormEditor
public:
STDMETHOD(About)();
STDMETHOD(SelectAll)();
STDMETHOD(SelectNone)();
STDMETHOD(New)();
STDMETHOD(NewEx)(
/*[in]*/ long Width,
/*[in]*/ long Height,
/*[in]*/ OLE_COLOR BackColor,
/*[in]*/ OLE_COLOR ForeColor);
STDMETHOD(ShowInsertDialog)(/*[out, retval]*/ BSTR *pProgID);
STDMETHOD(Insert)(
/*[in]*/ BSTR ProgID,
/*[out, retval]*/ IDispatch **ppDispatch);
STDMETHOD(InsertEx)(
/*[in]*/ BSTR ProgID,
/*[in]*/ long Left,
/*[in]*/ long Top,
/*[in]*/ long Width,
/*[in]*/ long Height,
/*[out, retval]*/ IDispatch **ppDispatch);
STDMETHOD(Delete)();
STDMETHOD(Cut)();
STDMETHOD(Copy)();
STDMETHOD(Paste)();
STDMETHOD(Undo)();
STDMETHOD(Redo)();
STDMETHOD(SetTabOrder)();
STDMETHOD(RefreshState)();
STDMETHOD(LoadFromFile)(/*[in]*/ BSTR FileName);
STDMETHOD(SaveToFile)(/*[in]*/ BSTR FileName);
STDMETHOD(ValidateScript)(/*[out, retval]*/ VARIANT_BOOL *pRet);
STDMETHOD(MoveLeft)();
STDMETHOD(MoveRight)();
STDMETHOD(MoveUp)();
STDMETHOD(MoveDown)();
STDMETHOD(AlignLeft)();
STDMETHOD(AlignRight)();
STDMETHOD(AlignTop)();
STDMETHOD(AlignBottom)();
STDMETHOD(FormAlignHCenter)();
STDMETHOD(FormAlignVCenter)();
STDMETHOD(FormAlignBoth)();
STDMETHOD(SizeWidthToLargest)();
STDMETHOD(SizeHeightToLargest)();
STDMETHOD(SizeToLargest)();
STDMETHOD(SizeWidthToSmallest)();
STDMETHOD(SizeHeightToSmallest)();
STDMETHOD(SizeToSmallest)();
STDMETHOD(SpaceHorizontally)();
STDMETHOD(SpaceVertically)();
STDMETHOD(Properties)();
STDMETHOD(Expose)(
/*[in]*/ BSTR Name,
/*[in]*/ IDispatch *pDispatch);
STDMETHOD(DDUnlock)(
/*[in]*/ long Data1_High,
/*[in]*/ long Data1_Low,
/*[in]*/ long Data2_High,
/*[in]*/ long Data2_Low);
STDMETHOD(get_Script)(/*[out, retval]*/ IScript2 **ppScript2);
STDMETHOD(get_BorderVisible)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_BorderVisible)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_BackColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_BackColor)(/*[in]*/ OLE_COLOR newVal);
STDMETHOD(get_FormWidth)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_FormWidth)(/*[in]*/ long newVal);
STDMETHOD(get_FormHeight)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_FormHeight)(/*[in]*/ long newVal);
STDMETHOD(get_FormBackColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_FormBackColor)(/*[in]*/ OLE_COLOR newVal);
STDMETHOD(get_FormForeColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_FormForeColor)(/*[in]*/ OLE_COLOR newVal);
STDMETHOD(get_GridWidth)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_GridWidth)(/*[in]*/ long newVal);
STDMETHOD(get_GridHeight)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_GridHeight)(/*[in]*/ long newVal);
STDMETHOD(get_GridVisible)(/*[out, retval]*/ VARIANT_BOOL *pVal);
STDMETHOD(put_GridVisible)(/*[in]*/ VARIANT_BOOL newVal);
STDMETHOD(get_DragFrameBackColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_DragFrameBackColor)(/*[in]*/ OLE_COLOR newVal);
STDMETHOD(get_DragFrameForeColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_DragFrameForeColor)(/*[in]*/ OLE_COLOR newVal);
STDMETHOD(get_TabNumberBackColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_TabNumberBackColor)(/*[in]*/ OLE_COLOR newVal);
STDMETHOD(get_TabNumberForeColor)(/*[out, retval]*/ OLE_COLOR *pVal);
STDMETHOD(put_TabNumberForeColor)(/*[in]*/ OLE_COLOR newVal);
// IFormEditor2
STDMETHOD(SendToBack)();
STDMETHOD(BringToFront)();
STDMETHOD(GetItemDetails)(
/*[in]*/ IDispatch *pDispatch,
/*[out, retval]*/ IFormEditorItemDetails **ppFormEditorItemDetails);
STDMETHOD(GetItemClassId)(
/*[in]*/ IDispatch *pDispatch,
/*[out, retval]*/ BSTR *pClassId);
STDMETHOD(GetItemName)(
/*[in]*/ IDispatch *pDispatch,
/*[out, retval]*/ BSTR *pName);
STDMETHOD(SetItemName)(
/*[in]*/ IDispatch *pDispatch,
/*[in]*/ BSTR Name);
STDMETHOD(GetItemTag)(
/*[in]*/ IDispatch *pDispatch,
/*[out, retval]*/ BSTR *pTag);
STDMETHOD(SetItemTag)(
/*[in]*/ IDispatch *pDispatch,
/*[in]*/ BSTR Tag);
STDMETHOD(GetItemPosition)(
/*[in]*/ IDispatch *pDispatch,
/*[out]*/ long *pLeft,
/*[out]*/ long *pTop,
/*[out]*/ long *pWidth,
/*[out]*/ long *pHeight,
/*[out]*/ long *pTabNumber);
STDMETHOD(SetItemPosition)(
/*[in]*/ IDispatch *pDispatch,
/*[in]*/ long Left,
/*[in]*/ long Top,
/*[in]*/ long Width,
/*[in]*/ long Height,
/*[in]*/ long TabNumber);
STDMETHOD(IsItemSelected)(
/*[in]*/ IDispatch *pDispatch,
/*[out, retval]*/ VARIANT_BOOL *pIsSelected);
STDMETHOD(SelectItem)(
/*[in]*/ IDispatch *pDispatch,
/*[in]*/ VARIANT_BOOL KeepCurrentSelection);
STDMETHOD(UnselectItem)(
/*[in]*/ IDispatch *pDispatch);
STDMETHOD(IsItemDeleted)(
/*[in]*/ IDispatch *pDispatch,
/*[out, retval]*/ VARIANT_BOOL *pIsDeleted);
STDMETHOD(get_Items)(
/*[out, retval]*/ IFormEditorItemCollection **ppFormEditorItemCollection);
STDMETHOD(get_SelectedItems)(
/*[out, retval]*/ IFormEditorItemCollection **ppFormEditorItemCollection);
};
} // namespace AxFormEditor
#endif //__FORMEDITOR_H_