OSDN Git Service

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