OSDN Git Service

20021009版ソース
[seraphyscrtools/SeraphyScriptTools.git] / CommDialog.h
1         
2 // CommDialog.h : Declaration of the CCommDialog
3
4 #ifndef __COMMDIALOG_H_
5 #define __COMMDIALOG_H_
6
7 #include "resource.h"       // \83\81\83C\83\93 \83V\83\93\83{\83\8b
8 #include <atlctl.h>
9 #include "SeraphyScriptToolsCP.h"
10
11 /////////////////////////////////////////////////////////////////////////////
12 // CCommDialog
13 class ATL_NO_VTABLE CCommDialog : 
14         public CComObjectRootEx<CComSingleThreadModel>,
15         public CStockPropImpl<CCommDialog, ICommDialog, &IID_ICommDialog, &LIBID_SERAPHYSCRIPTTOOLSLib>,
16         public CComControl<CCommDialog>,
17         public IPersistStreamInitImpl<CCommDialog>,
18         public IOleControlImpl<CCommDialog>,
19         public IOleObjectImpl<CCommDialog>,
20         public IOleInPlaceActiveObjectImpl<CCommDialog>,
21         public IViewObjectExImpl<CCommDialog>,
22         public IOleInPlaceObjectWindowlessImpl<CCommDialog>,
23         public ISupportErrorInfo,
24         public IConnectionPointContainerImpl<CCommDialog>,
25         public IPersistStorageImpl<CCommDialog>,
26         public ISpecifyPropertyPagesImpl<CCommDialog>,
27         public IQuickActivateImpl<CCommDialog>,
28         public IDataObjectImpl<CCommDialog>,
29         public IProvideClassInfo2Impl<&CLSID_CommDialog, &DIID__ICommDialogEvents, &LIBID_SERAPHYSCRIPTTOOLSLib>,
30         public IPropertyNotifySinkCP<CCommDialog>,
31         public CComCoClass<CCommDialog, &CLSID_CommDialog>
32 {
33 public:
34         CCommDialog()
35         {
36                 m_pUnkMarshaler = NULL;
37                 // \83J\83\89\81[\8d\\91¢\91Ì
38                 int i;
39                 for(i=0;i<16;i++){
40                         m_colors[i] = COLORREF(0xC0C0C0);
41                 }
42                 ZeroMemory(&m_color,sizeof(CHOOSECOLOR));
43                 m_color.lStructSize  = sizeof(CHOOSECOLOR);
44                 m_color.lpCustColors = m_colors;
45                 m_color.Flags        = CC_FULLOPEN | CC_SOLIDCOLOR;
46                 //
47                 m_bEnableCreatePrompt = false;
48                 m_bEnableReadonly         = false;
49                 m_bReadonly                       = false;
50                 m_bNoDereferenceLinks = false;
51                 m_hStaticMainWindow   = NULL;  // \83C\83\93\83^\81[\83t\83F\83C\83X\82æ\82è\97D\90æ\82µ\82Ä\8eg\97p\82³\82ê\82é
52                 // \83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8f\89\8aú\89»
53                 m_pMainWindow = NULL;
54         }
55
56 DECLARE_GET_CONTROLLING_UNKNOWN()
57 DECLARE_REGISTRY_RESOURCEID(IDR_COMMDIALOG)
58
59 DECLARE_PROTECT_FINAL_CONSTRUCT()
60
61 BEGIN_COM_MAP(CCommDialog)
62         COM_INTERFACE_ENTRY(ICommDialog)
63         COM_INTERFACE_ENTRY(IDispatch)
64         COM_INTERFACE_ENTRY(IViewObjectEx)
65         COM_INTERFACE_ENTRY(IViewObject2)
66         COM_INTERFACE_ENTRY(IViewObject)
67         COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
68         COM_INTERFACE_ENTRY(IOleInPlaceObject)
69         COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
70         COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
71         COM_INTERFACE_ENTRY(IOleControl)
72         COM_INTERFACE_ENTRY(IOleObject)
73         COM_INTERFACE_ENTRY(IPersistStreamInit)
74         COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
75         COM_INTERFACE_ENTRY(ISupportErrorInfo)
76         COM_INTERFACE_ENTRY(IConnectionPointContainer)
77         COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
78         COM_INTERFACE_ENTRY(IQuickActivate)
79         COM_INTERFACE_ENTRY(IPersistStorage)
80         COM_INTERFACE_ENTRY(IDataObject)
81         COM_INTERFACE_ENTRY(IProvideClassInfo)
82         COM_INTERFACE_ENTRY(IProvideClassInfo2)
83         COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
84         COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
85 END_COM_MAP()
86
87 BEGIN_PROP_MAP(CCommDialog)
88         PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
89         PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
90         PROP_ENTRY("Caption", DISPID_CAPTION, CLSID_NULL)
91         // Example entries
92         // PROP_ENTRY("Property Description", dispid, clsid)
93         // PROP_PAGE(CLSID_StockColorPage)
94 END_PROP_MAP()
95
96 BEGIN_CONNECTION_POINT_MAP(CCommDialog)
97         CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
98 END_CONNECTION_POINT_MAP()
99
100 BEGIN_MSG_MAP(CCommDialog)
101         CHAIN_MSG_MAP(CComControl<CCommDialog>)
102         DEFAULT_REFLECTION_HANDLER()
103 END_MSG_MAP()
104 // Handler prototypes:
105 //  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
106 //  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
107 //  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
108
109
110
111         HRESULT FinalConstruct()
112         {
113                 return CoCreateFreeThreadedMarshaler(
114                         GetControllingUnknown(), &m_pUnkMarshaler.p);
115         }
116
117         void FinalRelease()
118         {
119                 ATLTRACE("CommonDialog::FinalRelease\r\n");
120                 // \83\81\83C\83\93\83E\83B\83\93\83h\83E\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\89ð\95ú
121                 if(m_pMainWindow){
122                         m_pMainWindow->Release();
123                         m_pMainWindow = NULL;
124                 }
125                 m_pUnkMarshaler.Release();
126         }
127
128         CComPtr<IUnknown> m_pUnkMarshaler;
129
130 // ISupportsErrorInfo
131         STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
132         {
133                 static const IID* arr[] = 
134                 {
135                         &IID_ICommDialog,
136                 };
137                 for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
138                 {
139                         if (IsEqualGUID(*arr[i], riid))
140                                 return S_OK;
141                 }
142                 return S_FALSE;
143         }
144
145 // IViewObjectEx
146         DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
147
148         static int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData );
149         _bstr_t m_bstr_BrowseForFolderCaption;
150         STDMETHOD(get_BrowseForFolderCaption)(/*[out, retval]*/ BSTR *pVal);
151         STDMETHOD(put_BrowseForFolderCaption)(/*[in]*/ BSTR newVal);
152         STDMETHOD(BrowseForFolder)(/*[in,optional]*/VARIANT caption,/*[in,optional]*/VARIANT varDir,/*[in,optinal]*/VARIANT varMode,/*[out,retval]*/VARIANT* pvarReturn);
153         STDMETHOD(get_HWND)(/*[out, retval]*/ long *pVal);
154         STDMETHOD(put_HWND)(/*[in]*/ long newVal);
155         STDMETHOD(get_InitialDir)(/*[out, retval]*/ BSTR *pVal);
156         STDMETHOD(put_InitialDir)(/*[in]*/ BSTR newVal);
157         BOOL m_bNoDereferenceLinks;
158         STDMETHOD(get_NoDereferenceLinks)(/*[out, retval]*/ BOOL *pVal);
159         STDMETHOD(put_NoDereferenceLinks)(/*[in]*/ BOOL newVal);
160         STDMETHOD(get_ReadOnly)(/*[out, retval]*/ BOOL *pVal);
161         STDMETHOD(put_ReadOnly)(/*[in]*/ BOOL newVal);
162         STDMETHOD(get_EnableReadOnly)(/*[out, retval]*/ BOOL *pVal);
163         STDMETHOD(put_EnableReadOnly)(/*[in]*/ BOOL newVal);
164         BOOL m_bReadonly;
165         BOOL m_bEnableReadonly;
166         BOOL m_bEnableCreatePrompt;
167         STDMETHOD(get_EnableCreatePrompt)(/*[out, retval]*/ BOOL *pVal);
168         STDMETHOD(put_EnableCreatePrompt)(/*[in]*/ BOOL newVal);
169         _bstr_t m_bstr_InitialDir;
170         _bstr_t m_bstr_SaveFileCaption;
171         _bstr_t m_bstr_OpenFileCaption;
172         STDMETHOD(get_SaveFileCaption)(/*[out, retval]*/ BSTR *pVal);
173         STDMETHOD(put_SaveFileCaption)(/*[in]*/ BSTR newVal);
174         STDMETHOD(get_OpenFileCaption)(/*[out, retval]*/ BSTR *pVal);
175         STDMETHOD(put_OpenFileCaption)(/*[in]*/ BSTR newVal);
176         STDMETHOD(SaveFileDialog)(/*[in,optional]*/VARIANT varPathName,/*[in,optional]*/VARIANT varFilter,/*[out,retval]*/VARIANT* pvarReturn);
177         STDMETHOD(OpenFileDialog)(/*[in,optional]*/VARIANT varPathName,/*[in,optional]*/VARIANT varFilter,/*[out,retval]*/VARIANT* pvarReturn);
178         STDMETHOD(MultiOpenFileDialog)(/*[in,optional]*/VARIANT varMulti,/*[in,optional]*/VARIANT varFilter,/*[out,retval]*/VARIANT* pvarResult);
179         void CommFileDialog(VARIANT* pvarResult,VARIANT varPathName,VARIANT varFilter,BOOL bMode,DWORD flags);
180
181 // ICommDialog
182 public:
183         HRESULT OnDraw(ATL_DRAWINFO& di)
184         {
185                 RECT& rc = *(RECT*)di.prcBounds;
186                 Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
187
188                 SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
189                 LPCTSTR pszText = _T("ATL 3.0 : CommDialog");
190                 TextOut(di.hdcDraw, 
191                         (rc.left + rc.right) / 2, 
192                         (rc.top + rc.bottom) / 2, 
193                         pszText, 
194                         lstrlen(pszText));
195
196                 return S_OK;
197         }
198         CComBSTR m_bstrCaption;
199 public:
200         STDMETHOD(ColorDialog)(/*[out,retval]*/VARIANT* pcolorVal);
201         STDMETHOD(get_MessageCaption)(/*[out, retval]*/ BSTR *pVal);
202         STDMETHOD(put_MessageCaption)(/*[in]*/ BSTR newVal);
203         LPCSTR GetMainCaption();
204         STDMETHOD(MessageBox)(/*[in]*/VARIANT mes,/*[in,optional]*/VARIANT typ,/*[in,optional]*/VARIANT icon,/*[out,retval]*/VARIANT* pRet);
205         STDMETHOD(SetMainWindow)(/*[in]*/VARIANT varUnk);
206         HWND GetMainWindow();
207         HWND m_hStaticMainWindow;
208 protected:
209         CHOOSECOLOR m_color;
210         COLORREF    m_colors[16];
211         IOverlappedWindow* m_pMainWindow;
212         _bstr_t m_bstr_MessageCaption;
213 };
214
215 #endif //__COMMDIALOG_H_