	[!crlf]
	[
		object,
		uuid([!InterfaceGUID]),
	[!if=(Dual, "TRUE")]	dual,[!endif]
		helpstring("[!InterfaceName] Interface"),
		pointer_default(unique)
	]
	interface [!InterfaceName] : [!if=(Dual, "TRUE")]IDispatch[!else]IUnknown[!endif]
	{
[!if=(SP_AUTOSIZE, "TRUE")]
		[propput, id(DISPID_AUTOSIZE)]
		HRESULT AutoSize([in]VARIANT_BOOL vbool);
		[propget, id(DISPID_AUTOSIZE)]
		HRESULT AutoSize([out,retval]VARIANT_BOOL* pbool);
[!endif]
[!if=(SP_BACKCOLOR, "TRUE")]
		[propput, id(DISPID_BACKCOLOR)]
		HRESULT BackColor([in]OLE_COLOR clr);
		[propget, id(DISPID_BACKCOLOR)]
		HRESULT BackColor([out,retval]OLE_COLOR* pclr);
[!endif]
[!if=(SP_BACKSTYLE, "TRUE")]
		[propput, id(DISPID_BACKSTYLE)]
		HRESULT BackStyle([in]long style);
		[propget, id(DISPID_BACKSTYLE)]
		HRESULT BackStyle([out,retval]long* pstyle);
[!endif]
[!if=(SP_BORDERCOLOR, "TRUE")]
		[propput, id(DISPID_BORDERCOLOR)]
		HRESULT BorderColor([in]OLE_COLOR clr);
		[propget, id(DISPID_BORDERCOLOR)]
		HRESULT BorderColor([out, retval]OLE_COLOR* pclr);
[!endif]
[!if=(SP_BORDERSTYLE, "TRUE")]
		[propput, id(DISPID_BORDERSTYLE)]
		HRESULT BorderStyle([in]long style);
		[propget, id(DISPID_BORDERSTYLE)]
		HRESULT BorderStyle([out, retval]long* pstyle);
[!endif]
[!if=(SP_BORDERWIDTH, "TRUE")]
		[propput, id(DISPID_BORDERWIDTH)]
		HRESULT BorderWidth([in]long width);
		[propget, id(DISPID_BORDERWIDTH)]
		HRESULT BorderWidth([out, retval]long* width);
[!endif]
[!if=(SP_DRAWMODE, "TRUE")]
		[propput, id(DISPID_DRAWMODE)]
		HRESULT DrawMode([in]long mode);
		[propget, id(DISPID_DRAWMODE)]
		HRESULT DrawMode([out, retval]long* pmode);
[!endif]
[!if=(SP_DRAWSTYLE, "TRUE")]
		[propput, id(DISPID_DRAWSTYLE)]
		HRESULT DrawStyle([in]long style);
		[propget, id(DISPID_DRAWSTYLE)]
		HRESULT DrawStyle([out, retval]long* pstyle);
[!endif]
[!if=(SP_DRAWWIDTH, "TRUE")]
		[propput, id(DISPID_DRAWWIDTH)]
		HRESULT DrawWidth([in]long width);
		[propget, id(DISPID_DRAWWIDTH)]
		HRESULT DrawWidth([out, retval]long* pwidth);
[!endif]
[!if=(SP_FILLCOLOR, "TRUE")]
		[propput, id(DISPID_FILLCOLOR)]
		HRESULT FillColor([in]OLE_COLOR clr);
		[propget, id(DISPID_FILLCOLOR)]
		HRESULT FillColor([out, retval]OLE_COLOR* pclr);
[!endif]
[!if=(SP_FILLSTYLE, "TRUE")]
		[propput, id(DISPID_FILLSTYLE)]
		HRESULT FillStyle([in]long style);
		[propget, id(DISPID_FILLSTYLE)]
		HRESULT FillStyle([out, retval]long* pstyle);
[!endif]
[!if=(SP_FONT, "TRUE")]
		[propputref, id(DISPID_FONT)]
		HRESULT Font([in]IFontDisp* pFont);
		[propput, id(DISPID_FONT)]
		HRESULT Font([in]IFontDisp* pFont);
		[propget, id(DISPID_FONT)]
		HRESULT Font([out, retval]IFontDisp** ppFont);
[!endif]
[!if=(SP_FORECOLOR, "TRUE")]
		[propput, id(DISPID_FORECOLOR)]
		HRESULT ForeColor([in]OLE_COLOR clr);
		[propget, id(DISPID_FORECOLOR)]
		HRESULT ForeColor([out,retval]OLE_COLOR* pclr);
[!endif]
[!if=(SP_ENABLED, "TRUE")]
		[propput, id(DISPID_ENABLED)]
		HRESULT Enabled([in]VARIANT_BOOL vbool);
		[propget, id(DISPID_ENABLED)]
		HRESULT Enabled([out,retval]VARIANT_BOOL* pbool);
[!endif]
[!if=(SP_HWND, "TRUE")]
		[propget, id(DISPID_HWND)]
		HRESULT Window([out, retval]long* phwnd);
[!endif]
[!if=(SP_TABSTOP, "TRUE")]
		[propput, id(DISPID_TABSTOP)]
		HRESULT TabStop([in]VARIANT_BOOL vbool);
		[propget, id(DISPID_TABSTOP)]
		HRESULT TabStop([out, retval]VARIANT_BOOL* pbool);
[!endif]
[!if=(SP_TEXT, "TRUE")]
		[propput, id(DISPID_TEXT)]
		HRESULT Text([in]BSTR strText);
		[propget, id(DISPID_TEXT)]
		HRESULT Text([out, retval]BSTR* pstrText);
[!endif]
[!if=(SP_CAPTION, "TRUE")]
		[propput, id(DISPID_CAPTION)]
		HRESULT Caption([in]BSTR strCaption);
		[propget, id(DISPID_CAPTION)]
		HRESULT Caption([out,retval]BSTR* pstrCaption);
[!endif]
[!if=(SP_BORDERVISIBLE, "TRUE")]
		[propput, id(DISPID_BORDERVISIBLE)]
		HRESULT BorderVisible([in]VARIANT_BOOL vbool);
		[propget, id(DISPID_BORDERVISIBLE)]
		HRESULT BorderVisible([out, retval]VARIANT_BOOL* pbool);
[!endif]
[!if=(SP_APPEARANCE, "TRUE")]
		[propput, id(DISPID_APPEARANCE)]
		HRESULT Appearance([in]short appearance);
		[propget, id(DISPID_APPEARANCE)]
		HRESULT Appearance([out, retval]short* pappearance);
[!endif]
[!if=(SP_MOUSEPOINTER, "TRUE")]
		[propput, id(DISPID_MOUSEPOINTER)]
		HRESULT MousePointer([in]long pointer);
		[propget, id(DISPID_MOUSEPOINTER)]
		HRESULT MousePointer([out, retval]long* ppointer);
[!endif]
[!if=(SP_MOUSEICON, "TRUE")]
		[propputref, id(DISPID_MOUSEICON)]
		HRESULT MouseIcon([in]IPictureDisp* pMouseIcon);
		[propput, id(DISPID_MOUSEICON)]
		HRESULT MouseIcon([in]IPictureDisp* pMouseIcon);
		[propget, id(DISPID_MOUSEICON)]
		HRESULT MouseIcon([out, retval]IPictureDisp** ppMouseIcon);
[!endif]
[!if=(SP_PICTURE, "TRUE")]
		[propputref, id(DISPID_PICTURE)]
		HRESULT Picture([in]IPictureDisp* pPicture);
		[propput, id(DISPID_PICTURE)]
		HRESULT Picture([in]IPictureDisp* pPicture);
		[propget, id(DISPID_PICTURE)]
		HRESULT Picture([out, retval]IPictureDisp** ppPicture);
[!endif]
[!if=(SP_VALID, "TRUE")]
		[propput, id(DISPID_VALID)]
		HRESULT Valid([in]VARIANT_BOOL vbool);
		[propget, id(DISPID_VALID)]
		HRESULT Valid([out, retval]VARIANT_BOOL* pbool);
[!endif]
[!if=(SP_READYSTATE, "TRUE")]
		[propput, id(DISPID_READYSTATE)]
		HRESULT ReadyState([in]long state);
		[propget, id(DISPID_READYSTATE)]
		HRESULT ReadyState([out, retval]long* pstate);
[!endif]
	};
[!if=(HTMLControl, "TRUE")]
	[!crlf]
	[!newguid(InterfaceGUIDUI)]
	[
		object, dual,
		uuid([!InterfaceGUIDUI]),
		helpstring("[!InterfaceName]UI Interface"),
		pointer_default(unique)
	]
	interface [!InterfaceName]UI : IDispatch
	{
		// Example method that will be called by the HTML
		HRESULT OnClick([in]IDispatch* pdispBody, [in]VARIANT varColor);
	};
[!endif]
