2 // OverlappedWindow.h : Declaration of the COverlappedWindow
4 #ifndef __OverlappedWindow_H_
5 #define __OverlappedWindow_H_
7 #include "resource.h" //
\83\81\83C
\83\93 \83V
\83\93\83{
\83\8b
12 #include "seraphyscripttools.h"
14 #include "SeraphyScriptToolsCP.h"
18 #include "objectmap.h"
25 ///////////////////////////////////////////////////////////////////////
26 //
\83h
\83\8d\83b
\83v
\82³
\82ê
\82½
\83t
\83@
\83C
\83\8b\82Ì
\95Û
\8e\9d
38 list<LPSTR>::iterator p = m_lstPath.begin();
39 while(p != m_lstPath.end()){
41 p = m_lstPath.erase(p);
44 void DropFiles(HDROP hDrop)
47 int count = ::DragQueryFile(hDrop,-1,NULL,0);
50 DWORD sz = ::DragQueryFile(hDrop,i,NULL,0);
51 LPSTR pBuf = new CHAR[sz+1];
52 ::DragQueryFile(hDrop,i,pBuf,MAX_PATH);
53 m_lstPath.push_back(pBuf);
56 void GetPathArray(VARIANT *pvarPathName)
58 if(m_lstPath.empty()){
60 pvarPathName->vt = VT_EMPTY;
63 SAFEARRAY* pArray = SafeArrayCreateVector(VT_VARIANT,0,m_lstPath.size());
65 if(SafeArrayAccessData(pArray,(void**)&pvars) == S_OK){
67 list<LPSTR>::iterator p = m_lstPath.begin();
68 while(p != m_lstPath.end()){
70 MultiByteToWideChar(GetACP(),0,*p,-1,wbuf,MAX_PATH);
71 VariantInit(&pvars[i]);
72 pvars[i].vt = VT_BSTR;
73 pvars[i].bstrVal = SysAllocString(wbuf);
77 SafeArrayUnaccessData(pArray);
79 VariantInit(pvarPathName);
80 pvarPathName->vt = VT_ARRAY | VT_VARIANT;
81 pvarPathName->parray = pArray;
84 list<LPSTR> m_lstPath;
87 /////////////////////////////////////////////////////////////////////////////
89 class CreateOverlappedWindow
92 CreateOverlappedWindow()
104 automessageloop = true;
105 ZeroMemory(szClassName,MAX_PATH);
106 posX = posY = width = height = 0;
110 DWORD style = WS_CLIPCHILDREN | WS_OVERLAPPED;
111 if(captionbar){ style |= WS_CAPTION; }
112 if(frametype ){ style |= WS_THICKFRAME; }
113 if(systemmenu){ style |= WS_SYSMENU|WS_CAPTION; }
114 if(minbox ){ style |= WS_MINIMIZEBOX|WS_SYSMENU|WS_CAPTION; }
115 if(maxbox ){ style |= WS_MAXIMIZEBOX|WS_SYSMENU|WS_CAPTION|WS_THICKFRAME; }
118 inline void SetWindowPlacement(int x,int y,int w,int h)
125 inline void SetWindowClassName(LPCSTR name)
127 lstrcpy(szClassName,name);
129 CHAR szClassName[MAX_PATH];
145 BOOL automessageloop;
149 class ATL_NO_VTABLE COverlappedWindow :
150 public CComObjectRootEx<CComSingleThreadModel>,
151 public CStockPropImpl<COverlappedWindow, IOverlappedWindow, &IID_IOverlappedWindow, &LIBID_SERAPHYSCRIPTTOOLSLib>,
152 public CComControl<COverlappedWindow>,
153 public IPersistStreamInitImpl<COverlappedWindow>,
154 public IOleControlImpl<COverlappedWindow>,
155 public IOleObjectImpl<COverlappedWindow>,
156 public IOleInPlaceActiveObjectImpl<COverlappedWindow>,
157 public IViewObjectExImpl<COverlappedWindow>,
158 public IOleInPlaceObjectWindowlessImpl<COverlappedWindow>,
159 public ISupportErrorInfo,
160 public IConnectionPointContainerImpl<COverlappedWindow>,
161 public IPersistStorageImpl<COverlappedWindow>,
162 public ISpecifyPropertyPagesImpl<COverlappedWindow>,
163 public IQuickActivateImpl<COverlappedWindow>,
164 public IDataObjectImpl<COverlappedWindow>,
165 public IProvideClassInfo2Impl<&CLSID_OverlappedWindow, &DIID__IOverlappedWindowEvents, &LIBID_SERAPHYSCRIPTTOOLSLib>,
166 public IPropertyNotifySinkCP<COverlappedWindow>,
167 public CComCoClass<COverlappedWindow, &CLSID_OverlappedWindow>,
168 public CProxy_IOverlappedWindowEvents< COverlappedWindow >
173 DECLARE_GET_CONTROLLING_UNKNOWN()
174 DECLARE_REGISTRY_RESOURCEID(IDR_OVERLAPPEDWINDOW)
176 DECLARE_PROTECT_FINAL_CONSTRUCT()
178 BEGIN_COM_MAP(COverlappedWindow)
179 COM_INTERFACE_ENTRY(IOverlappedWindow)
180 COM_INTERFACE_ENTRY(IDispatch)
181 COM_INTERFACE_ENTRY(IViewObjectEx)
182 COM_INTERFACE_ENTRY(IViewObject2)
183 COM_INTERFACE_ENTRY(IViewObject)
184 COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
185 COM_INTERFACE_ENTRY(IOleInPlaceObject)
186 COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
187 COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
188 COM_INTERFACE_ENTRY(IOleControl)
189 COM_INTERFACE_ENTRY(IOleObject)
190 COM_INTERFACE_ENTRY(IPersistStreamInit)
191 COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
192 COM_INTERFACE_ENTRY(ISupportErrorInfo)
193 COM_INTERFACE_ENTRY(IConnectionPointContainer)
194 COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
195 COM_INTERFACE_ENTRY(IQuickActivate)
196 COM_INTERFACE_ENTRY(IPersistStorage)
197 COM_INTERFACE_ENTRY(IDataObject)
198 COM_INTERFACE_ENTRY(IProvideClassInfo)
199 COM_INTERFACE_ENTRY(IProvideClassInfo2)
200 COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
201 COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
204 BEGIN_PROP_MAP(COverlappedWindow)
205 PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
206 PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
207 PROP_ENTRY("Caption", DISPID_CAPTION, CLSID_NULL)
209 // PROP_ENTRY("Property Description", dispid, clsid)
210 // PROP_PAGE(CLSID_StockColorPage)
213 BEGIN_CONNECTION_POINT_MAP(COverlappedWindow)
214 CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
215 CONNECTION_POINT_ENTRY(DIID__IOverlappedWindowEvents)
216 END_CONNECTION_POINT_MAP()
218 BEGIN_MSG_MAP(COverlappedWindow)
219 CHAIN_MSG_MAP(CComControl<COverlappedWindow>)
220 DEFAULT_REFLECTION_HANDLER()
222 // Handler prototypes:
223 // LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
224 // LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
225 // LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
227 HRESULT FinalConstruct();
230 CComPtr<IUnknown> m_pUnkMarshaler;
232 // ISupportsErrorInfo
233 STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
235 static const IID* arr[] =
237 &IID_IOverlappedWindow,
239 for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
241 if (IsEqualGUID(*arr[i], riid))
248 DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
252 STDMETHOD(GetClipboardText)(/*[out]*/VARIANT* pVarText);
253 STDMETHOD(SetClipboardText)(/*[in]*/BSTR text);
254 STDMETHOD(get_DefaultAction)(/*[out, retval]*/ BOOL *pVal);
255 STDMETHOD(put_DefaultAction)(/*[in]*/ BOOL newVal);
256 STDMETHOD(get_AutoReleaseClassObject)(/*[out, retval]*/ BOOL *pVal);
257 STDMETHOD(put_AutoReleaseClassObject)(/*[in]*/ BOOL newVal);
258 STDMETHOD(get_innerHeight)(/*[out, retval]*/ double *pVal);
259 STDMETHOD(get_innerWidth)(/*[out, retval]*/ double *pVal);
260 STDMETHOD(get_ClientHeight)(/*[out, retval]*/ long *pVal);
261 STDMETHOD(get_ClientWidth)(/*[out, retval]*/ long *pVal);
262 void ClassObjectInvoke(LPCWSTR handler);
263 STDMETHOD(get_ClassObject)(/*[out, retval]*/ VARIANT *pVal);
264 STDMETHOD(put_ClassObject)(/*[in]*/ VARIANT newVal);
265 STDMETHOD(CenterWindow)();
266 STDMETHOD(LoadIcon)(/*[in]*/VARIANT text);
267 STDMETHOD(get_WaitCursor)(/*[out, retval]*/ short *pVal);
268 STDMETHOD(put_WaitCursor)(/*[in]*/ short newVal);
269 STDMETHOD(get_ExitCode)(/*[out, retval]*/ short *pVal);
270 STDMETHOD(put_ExitCode)(/*[in]*/ short newVal);
271 STDMETHOD(get_Object)(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal);
272 void MoveNextOverlapped();
273 void CreateWindowList(list<HWND>& lstWnd,BOOL bSearchRoot);
274 STDMETHOD(get_AutoClose)(/*[out, retval]*/ BOOL *pVal);
275 STDMETHOD(put_AutoClose)(/*[in]*/ BOOL newVal);
276 STDMETHOD(DoModal)(/*[out,retval]*/VARIANT* retcode);
277 STDMETHOD(get_AutoMessageLoop)(/*[out, retval]*/ BOOL *pVal);
278 STDMETHOD(put_AutoMessageLoop)(/*[in]*/ BOOL newVal);
279 static DWORD MessageLoop(DWORD sleeptim,int count,HWND* hWnd,HANDLE* hEvent);
280 void SetWaitParam(int* count,HWND* phWnd,HANDLE* phWaitHandle);
281 HANDLE GetEventHandle();
282 void SetParent(HWND hParent);
283 STDMETHOD(CreateChild)(/*[out,retval]*/VARIANT* pvarUnk);
284 STDMETHOD(SetWindowStyle)(/*[in]*/VARIANT frametype,/*[in,optional]*/VARIANT caption_system,/*[in,optional]*/VARIANT maxmin,/*[out,retval]*/VARIANT* pvarUnk);
285 STDMETHOD(SetPlacement)(/*[in]*/VARIANT x,/*[in]*/VARIANT y,/*[in,optional]*/VARIANT w,/*[in,optional]*/VARIANT h,/*[out,retval]*/VARIANT* pvarUnk);
286 STDMETHOD(Refresh)();
287 STDMETHOD(get_WindowClassName)(/*[out, retval]*/ BSTR *pVal);
288 STDMETHOD(get_Exstyle)(/*[out, retval]*/ long *pVal);
289 STDMETHOD(put_Exstyle)(/*[in]*/ long newVal);
290 STDMETHOD(get_Style)(/*[out, retval]*/ long *pVal);
291 STDMETHOD(put_Style)(/*[in]*/ long newVal);
294 STDMETHOD(Open)(/*[in]*/VARIANT caption,/*[out,retval]*/VARIANT* pvarUnk);
295 STDMETHOD(DoEvent)(/*[out,retval]*/VARIANT* varResult);
296 STDMETHOD(get_IsEventEmpty)(/*[out, retval]*/ BOOL *pVal);
297 STDMETHOD(SetTimer)(/*[in]*/VARIANT tim,/*[out,retval]*/BOOL* pVal);
299 HRESULT OnDraw(ATL_DRAWINFO& di)
301 RECT& rc = *(RECT*)di.prcBounds;
302 Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
304 SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
305 LPCTSTR pszText = _T("SeraphyScriptTools.OverlappedWindow");
307 (rc.left + rc.right) / 2,
308 (rc.top + rc.bottom) / 2,
315 STDMETHOD(get_Caption)(/*[out, retval]*/ BSTR *pVal);
316 STDMETHOD(put_Caption)(/*[in]*/ BSTR newVal);
317 STDMETHOD(get_backColor)(/*[out, retval]*/ long *pVal);
318 STDMETHOD(put_backColor)(/*[in]*/ long newVal);
319 STDMETHOD(get_Form)(/*[out, retval]*/ VARIANT *pVal);
320 STDMETHOD(get_Quit)(/*[out, retval]*/ BOOL *pVal);
321 STDMETHOD(put_Quit)(/*[in]*/ BOOL newVal);
322 STDMETHOD(get_DropFiles)(/*[out, retval]*/ VARIANT *pVal);
323 STDMETHOD(get_Event)(/*[out, retval]*/ VARIANT *pVal);
324 STDMETHOD(get_Canvas)(/*[out, retval]*/ VARIANT *pVal);
325 STDMETHOD(get_CreateNoCloseWindow)(/*[out, retval]*/ BOOL *pVal);
326 STDMETHOD(put_CreateNoCloseWindow)(/*[in]*/ BOOL newVal);
327 STDMETHOD(EnableMenu)(/*[in]*/VARIANT cmd,/*[in]*/VARIANT mode);
328 STDMETHOD(CheckMenu)(/*[in]*/VARIANT cmd,/*[in]*/VARIANT mode);
329 STDMETHOD(GetSysColor)(/*[in]*/VARIANT typ,/*[out,retval]*/VARIANT* col);
330 STDMETHOD(get_HWND)(/*[out, retval]*/ long *pVal);
331 STDMETHOD(TrackPopupMenu)(/*[in]*/VARIANT text,/*[in,optional]*/VARIANT cmd,/*[out,retval]*/VARIANT* pRet);
332 STDMETHOD(SetMenu)(/*[in]*/VARIANT fmt);
333 STDMETHOD(WaitEvent)(/*[in,optional]*/VARIANT varTim,/*[out,retval]*/BOOL* pRet);
334 STDMETHOD(get_Visible)(/*[out, retval]*/ BOOL *pVal);
335 STDMETHOD(put_Visible)(/*[in]*/ BOOL newVal);
336 STDMETHOD(get_Zoomed)(/*[out, retval]*/ BOOL *pVal);
337 STDMETHOD(put_Zoomed)(/*[in]*/ BOOL newVal);
338 STDMETHOD(get_Iconic)(/*[out, retval]*/ BOOL *pVal);
339 STDMETHOD(put_Iconic)(/*[in]*/ BOOL newVal);
340 STDMETHOD(get_Enable)(/*[out, retval]*/ BOOL *pVal);
341 STDMETHOD(put_Enable)(/*[in]*/ BOOL newVal);
342 STDMETHOD(SetFocus)();
343 STDMETHOD(SetForegroundWindow)();
344 STDMETHOD(get_AcceptFiles)(/*[out, retval]*/ BOOL *pVal);
345 STDMETHOD(put_AcceptFiles)(/*[in]*/ BOOL newVal);
346 STDMETHOD(get_Height)(/*[out, retval]*/ short *pVal);
347 STDMETHOD(put_Height)(/*[in]*/ short newVal);
348 STDMETHOD(get_Width)(/*[out, retval]*/ short *pVal);
349 STDMETHOD(put_Width)(/*[in]*/ short newVal);
350 STDMETHOD(get_PosY)(/*[out, retval]*/ short *pVal);
351 STDMETHOD(put_PosY)(/*[in]*/ short newVal);
352 STDMETHOD(get_PosX)(/*[out, retval]*/ short *pVal);
353 STDMETHOD(put_PosX)(/*[in]*/ short newVal);
354 STDMETHOD(get_TopMost)(/*[out, retval]*/ BOOL *pVal);
355 STDMETHOD(put_TopMost)(/*[in]*/ BOOL newVal);
356 STDMETHOD(get_DoubleBuffer)(/*[out, retval]*/ BOOL *pVal);
357 STDMETHOD(put_DoubleBuffer)(/*[in]*/ BOOL newVal);
358 CComBSTR m_bstrCaption;
360 HWND SafeCreateWnd();
361 CreateOverlappedWindow windowParam;
362 CComObject<CCanvas>* m_pCanvas;
363 CComObject<CForm>* m_pForm;
364 CComObject<CEvent>* m_pEvent;
365 CComObject<CObjectMap>* m_pObject;
366 list<CComObject<CEvent>*> m_lstEvent;
367 list<CComObject<COverlappedWindow>*> m_lstChild;
368 vector<CComVariant> m_vectorObject;
369 dropfiledata m_dropfiles;
370 CRITICAL_SECTION m_objEventDataProtection;
371 BOOL m_bAutoReleaseClassObject;
372 BOOL m_bDefaultAction;
374 static LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
375 void AddEvent(int message,WPARAM wParam,LPARAM lParam);
376 void AddEventSingle(int message,WPARAM wParam,LPARAM lParam);
377 void CreateThisInterface(VARIANT* pvarUnk);
380 IDispatch* m_pClassDisp;
383 int m_dModalExitCode;
386 HWND m_hLastFocusControl;
393 map<int,_bstr_t> m_cMenuMap;
396 #endif //__OverlappedWindow_H_