OSDN Git Service

セットアップの追加、ヘルプの修正
[seraphyscrtools/SeraphyScriptTools.git] / Form.cpp
1 // Form.cpp : CForm \82Ì\83C\83\93\83v\83\8a\83\81\83\93\83e\81[\83V\83\87\83\93
2 #include "stdafx.h"
3 #include "SeraphyScriptTools.h"
4 #include "Form.h"
5
6 /////////////////////////////////////////////////////////////////////////////
7 // CForm
8
9 void CForm::FinalRelease()
10 {
11         ATLTRACE("CForm::FinalRelease\r\n");
12         // \8f\89\8aú\89»
13         ClearControls();
14         // \83R\83\93\83g\83\8d\81[\83\8b\94w\8ci\83u\83\89\83V\82Ì\94j\8aü
15         if (m_hBrushControlBkColor) {
16                 DeleteObject(m_hBrushControlBkColor);
17                 m_hBrushControlBkColor = NULL;
18         }
19         // \83t\83H\83\93\83g\82Ì\94j\8aü
20         if (m_hControlFont) {
21                 DeleteObject(m_hControlFont);
22                 m_hControlFont = NULL;
23         }
24 }
25
26 STDMETHODIMP CForm::get_Control(VARIANT varNum, VARIANT *pVal)
27 {
28         ::VariantInit(pVal);
29         CComVariant tmp;
30         int nID = -1;
31         if (tmp.ChangeType(VT_I2, &varNum) == S_OK) {
32                 nID = tmp.iVal;
33         }
34         if (nID > 0) {
35                 std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
36                 while (p != m_lstControl.end()) {
37                         if ((*p)->GetID() == nID) {
38                                 // \93¯\88êID\82ð\94­\8c©\82µ\82½\82Ì\82Å\81A\82±\82ê\82ð\95Ô\82·
39                                 IUnknown* pUnk = NULL;
40                                 if ((*p)->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
41                                         pVal->vt = VT_UNKNOWN;
42                                         pVal->punkVal = pUnk;
43                                 }
44                                 break;
45                         }
46                         p++;
47                 }
48         }
49         return S_OK;
50 }
51
52 STDMETHODIMP CForm::SetControlFont(VARIANT fontname, VARIANT fontsize)
53 {
54         CComVariant varName;
55         ATL::CString szFontName;
56         if (varName.ChangeType(VT_BSTR, &fontname) == S_OK) {
57                 szFontName = varName.bstrVal;
58         }
59
60         CComVariant varSize;
61         int siz = 20;
62         if (varSize.ChangeType(VT_I2, &fontsize) == S_OK) {
63                 siz = varSize.iVal;
64         }
65
66         // \8am\95Û\8dÏ\82Ý\83t\83H\83\93\83g\82ð\89ð\95ú\82·\82é
67         if (m_hControlFont) {
68                 DeleteObject(m_hControlFont);
69         }
70
71         // \90V\82µ\82¢\83t\83H\83\93\83g\82ð\8dì\90¬\82·\82é
72         m_hControlFont = CreateFont(
73                 siz,
74                 0, 0, 0, 0, false, false, false,
75                 SHIFTJIS_CHARSET,
76                 OUT_DEFAULT_PRECIS,
77                 CLIP_DEFAULT_PRECIS,
78                 DEFAULT_QUALITY,
79                 FF_DONTCARE,
80                 szFontName);
81
82         m_nControlFontSize = siz;
83
84         // \8c»\8dÝ\82Ì\83R\83\93\83g\83\8d\81[\83\8b\82·\82×\82Ä\82É\93K\97p\82·\82é(\90\90¬\82³\82ê\82Ä\82¢\82ê\82Î)
85         std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
86         while (p != m_lstControl.end()) {
87                 (*p)->SetFont(m_hControlFont);
88                 p++;
89         }
90         return S_OK;
91 }
92
93 STDMETHODIMP CForm::Label(VARIANT text, VARIANT width, VARIANT *pvarUnk)
94 {
95         CComVariant dmy;
96         CreateControlCore(text, width, dmy, pvarUnk, 0, SS_NOTIFY, 0, _TEXT("STATIC"));
97         return S_OK;
98 }
99
100 STDMETHODIMP CForm::Button(VARIANT text, VARIANT width, VARIANT *pvarUnk)
101 {
102         CComVariant dmy;
103         CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_PUSHBUTTON, 0, _TEXT("BUTTON"));
104         return S_OK;
105 }
106
107 STDMETHODIMP CForm::CheckBox(VARIANT text, VARIANT width, VARIANT *pvarUnk)
108 {
109         CComVariant dmy;
110         CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_AUTOCHECKBOX, 0, _TEXT("BUTTON"));
111         return S_OK;
112 }
113
114 STDMETHODIMP CForm::RadioButton(VARIANT text, VARIANT width, VARIANT *pvarUnk)
115 {
116         CComVariant dmy;
117         CreateControlCore(text, width, dmy, pvarUnk, 0, BS_AUTORADIOBUTTON | (m_bControlNextIsGroupHead ? WS_TABSTOP : 0), 0, _TEXT("BUTTON"));
118         return S_OK;
119 }
120
121 STDMETHODIMP CForm::CheckBox3state(VARIANT text, VARIANT width, VARIANT *pvarUnk)
122 {
123         CComVariant dmy;
124         CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_AUTO3STATE, 0, _TEXT("BUTTON"));
125         return S_OK;
126 }
127
128 STDMETHODIMP CForm::PushCheckButton(VARIANT text, VARIANT width, VARIANT *pvarUnk)
129 {
130         CComVariant dmy;
131         CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_AUTOCHECKBOX | BS_PUSHLIKE, 0, _TEXT("BUTTON"));
132         return S_OK;
133 }
134
135 STDMETHODIMP CForm::PushRadioButton(VARIANT text, VARIANT width, VARIANT *pvarUnk)
136 {
137         CComVariant dmy;
138         CreateControlCore(text, width, dmy, pvarUnk, 0, BS_AUTORADIOBUTTON | BS_PUSHLIKE | (m_bControlNextIsGroupHead ? WS_TABSTOP : 0), 0, _TEXT("BUTTON"));
139         return S_OK;
140 }
141
142 STDMETHODIMP CForm::ReadonlyEdit(VARIANT text, VARIANT width, VARIANT height, VARIANT *punkVal)
143 {
144         DWORD style = WS_TABSTOP | ES_READONLY;
145         if (height.vt != VT_ERROR && height.vt != VT_NULL && height.vt != VT_EMPTY) {
146                 // \8d\82\82³\8ew\92è\82ª\82 \82é\8fê\8d\87\82Í\95¡\90\94\8ds
147                 style |= ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL;
148         }
149         else {
150                 // \92P\88ê\8ds
151                 style |= ES_AUTOHSCROLL;
152         }
153         CreateControlCore(text, width, height, punkVal, m_bControlUseStaticEdge ? WS_EX_STATICEDGE : WS_EX_CLIENTEDGE, style, 0, _TEXT("EDIT"));
154         return S_OK;
155 }
156
157 STDMETHODIMP CForm::Edit(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
158 {
159         DWORD style = WS_TABSTOP;
160         if (height.vt != VT_ERROR && height.vt != VT_NULL && height.vt != VT_EMPTY) {
161                 // \8d\82\82³\8ew\92è\82ª\82 \82é\8fê\8d\87\82Í\95¡\90\94\8ds
162                 style |= ES_MULTILINE | WS_VSCROLL | ES_WANTRETURN;
163         }
164         else {
165                 // \92P\88ê\8ds
166                 style |= ES_AUTOHSCROLL;
167         }
168         CreateControlCore(text, width, height, pvarUnk, WS_EX_CLIENTEDGE, style, 0, _TEXT("EDIT"));
169         return S_OK;
170 }
171
172 STDMETHODIMP CForm::PasswordEdit(VARIANT text, VARIANT width, VARIANT *pvarUnk)
173 {
174         CComVariant dmy;
175         CreateControlCore(text, width, dmy, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | ES_PASSWORD, 0, _TEXT("EDIT"));
176         return S_OK;
177 }
178
179 STDMETHODIMP CForm::ListBox(VARIANT width, VARIANT height, VARIANT* pvarUnk)
180 {
181         CComVariant text;
182         CreateControlCore(text, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | LBS_NOTIFY | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_DISABLENOSCROLL, 0, _TEXT("LISTBOX"));
183         return S_OK;
184 }
185
186 STDMETHODIMP CForm::MultiListBox(VARIANT width, VARIANT height, VARIANT *pvarUnk)
187 {
188         CComVariant text;
189         CreateControlCore(text, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | LBS_NOTIFY | LBS_USETABSTOPS | LBS_NOINTEGRALHEIGHT | LBS_MULTIPLESEL |/*LBS_EXTENDEDSEL|*/LBS_DISABLENOSCROLL | LBS_HASSTRINGS, 0, _TEXT("LISTBOX"));
190         return S_OK;
191 }
192
193 STDMETHODIMP CForm::DropdownList(VARIANT width, VARIANT height, VARIANT *pvarUnk)
194 {
195         CComVariant dmy;
196         CreateControlCore(dmy, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | CBS_DROPDOWNLIST | CBS_SORT, 0, _TEXT("COMBOBOX"));
197         return S_OK;
198 }
199
200 STDMETHODIMP CForm::DropdownEdit(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
201 {
202         CreateControlCore(text, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT, 0, _TEXT("COMBOBOX"));
203         return S_OK;
204 }
205
206 STDMETHODIMP CForm::TreeView(VARIANT width, VARIANT height, VARIANT *pvarUnk)
207 {
208         CComVariant dmy;
209         CreateControlCore(dmy, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | TVS_DISABLEDRAGDROP | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS, 0, WC_TREEVIEW);
210         return S_OK;
211 }
212
213 STDMETHODIMP CForm::ListView(VARIANT colum, VARIANT width, VARIANT height, VARIANT *pvarUnk)
214 {
215         CComVariant dmy;
216         CreateControlCore(colum, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | LVS_REPORT | LVS_SHOWSELALWAYS, 0, WC_LISTVIEW);
217         return S_OK;
218 }
219
220 STDMETHODIMP CForm::EditListView(VARIANT colum, VARIANT width, VARIANT height, VARIANT *pvarUnk)
221 {
222         CComVariant dmy;
223         CreateControlCore(colum, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | LVS_REPORT | LVS_EDITLABELS | LVS_SHOWSELALWAYS, 0, WC_LISTVIEW);
224         return S_OK;
225 }
226
227 STDMETHODIMP CForm::CheckListView(VARIANT colum, VARIANT width, VARIANT height, VARIANT *pvarUnk)
228 {
229         CComVariant dmy;
230         CreateControlCore(colum, width, height, pvarUnk, WS_EX_CLIENTEDGE, WS_TABSTOP | LVS_SINGLESEL | LVS_REPORT, LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT, WC_LISTVIEW);
231         return S_OK;
232 }
233
234 STDMETHODIMP CForm::ClearControls()
235 {
236         // \83R\83\93\83g\83\8d\81[\83\8b\82ð\82·\82×\82Ä\94j\8aü\82·\82é
237         std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
238         while (p != m_lstControl.end()) {
239                 (*p)->Destroy(); // \83E\83B\83\93\83h\83E\82ð\94j\8aü\82µ\8eQ\8fÆ\82ª\8ec\82Á\82Ä\82à\83A\83N\83Z\83X\95s\89Â\82É\82·\82é
240                 (*p)->Release();
241                 p = m_lstControl.erase(p);
242         }
243         m_nControlNextY = 0;
244         m_nControlNextY0 = 0;
245         m_nCommandID = 10;
246         m_nControlLeftMargin = 5;
247         m_nControlRightMargin = 5;
248         m_nControlNextX = m_nControlLeftMargin;
249         m_bControlNextIsGroupHead = false;
250         m_bControlUseStaticEdge = true;
251         //
252         // \83R\83\93\83g\83\8d\81[\83\8b\97p\83t\83H\83\93\83g\82Ì\8dì\90¬
253         if (m_hControlFont) {
254                 DeleteObject(m_hControlFont);
255         }
256         m_nControlFontSize = 16;
257         m_hControlFont = CreateFont(m_nControlFontSize, 0, 0, 0, 0, false, false, false, SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, NULL);
258         return S_OK;
259 }
260
261 CControl* CForm::CreateControlCore(VARIANT &text, VARIANT &width, VARIANT &height, VARIANT *pvarUnk, DWORD extstyle, DWORD style, DWORD afterstyle, LPCTSTR classname)
262 {
263         CComVariant varText;
264         ATL::CString szCaption;
265         if (varText.ChangeType(VT_BSTR, &text) == S_OK) {
266                 szCaption = varText.bstrVal;
267         }
268
269         // \94z\92u\83T\83C\83Y\82Ì\8eæ\93¾
270         int nWidth = (m_nWindowWidth - m_nControlRightMargin) - m_nControlNextX;
271         if (nWidth <= 0) {
272                 ControlBreak();
273                 nWidth = (m_nWindowWidth - m_nControlRightMargin) - m_nControlNextX;
274         }
275         CComVariant varWidth;
276         if (varWidth.ChangeType(VT_I2, &width) == S_OK) {
277                 nWidth = varWidth.iVal * m_nControlFontSize;
278                 if (nWidth + m_nControlNextX > m_nWindowWidth) {
279                         ControlBreak();
280                 }
281         }
282
283         int nHeight = m_nControlFontSize;
284         CComVariant varHeight;
285         if ((height.vt != VT_EMPTY && height.vt != VT_ERROR && height.vt != VT_NULL)
286                 && varHeight.ChangeType(VT_I2, &height) == S_OK) {
287                 nHeight = varHeight.iVal * m_nControlFontSize;
288         }
289
290         // \83O\83\8b\81[\83v\83w\83b\83_
291         if (m_bControlNextIsGroupHead) {
292                 style |= WS_GROUP;
293                 m_bControlNextIsGroupHead = false;
294         }
295
296         // \83C\83\93\83X\83^\83\93\83X\82Ì\90\90¬
297         CComObject<CControl>* pControl = NULL;
298         HRESULT hRet = CComObject<CControl>::CreateInstance(&pControl);
299         // FIXME: \83G\83\89\81[\82ð\95Ô\82¹\82é\82æ\82¤\82É\82·\82×\82«
300         ATLASSERT(SUCCEEDED(hRet));
301
302         // \8eQ\8fÆ\83J\83E\83\93\83g\81A\83|\83C\83\93\83^\82Ì\95Û\91
303         pControl->AddRef();
304         pControl->SetParam(afterstyle, extstyle, classname, szCaption, style, m_nControlNextX, m_nControlNextY, nWidth, nHeight + 6, m_nCommandID);
305         // \83\8a\83X\83g\82É\93o\98^
306         m_lstControl.push_back(pControl);
307
308         // \83E\83B\83\93\83h\83E\82ª\90\90¬\8dÏ\82Ý\82Å\82 \82ê\82Î\81A\82½\82¾\82¿\82É\90\90¬\82ð\8ds\82¤
309         // \82»\82¤\82Å\82È\82¯\82ê\82Î\83E\83B\83\93\83h\83E\90\90¬\8cã\82É\8eæ\93¾
310         if (m_hOwner) {
311                 pControl->Create(m_hOwner);
312                 pControl->SetFont(m_hControlFont);
313                 pControl->SetColor(m_dwControlColor);
314         }
315
316         // \82±\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\96ß\82è\92l\82Æ\82·\82é
317         IUnknown* pUnk = NULL;
318         hRet = pControl->QueryInterface(IID_IUnknown, (void**)&pUnk);
319         ATLASSERT(SUCCEEDED(hRet));
320         ::VariantInit(pvarUnk);
321         pvarUnk->vt = VT_UNKNOWN;
322         pvarUnk->punkVal = pUnk;
323
324         // \8e\9f\82É\89ü\8ds\82µ\82½\82Æ\82«\82É\88Ú\93®\82·\82é\97Ê
325         if (!lstrcmp(classname, _TEXT("COMBOBOX"))) {
326                 // \83R\83\93\83{\83{\83b\83N\83X\82Í\95\\8e¦\82³\82ê\82Ä\82¢\82é\82Ì\82Í1\8ds\95ª\82¾\82¯\81B
327                 nHeight = m_nControlFontSize;
328         }
329         int ny = m_nControlNextY + nHeight + 7;
330         if (m_nControlNextY0 < ny) {
331                 m_nControlNextY0 = ny;
332         }
333         // \8d\95û\8cü\82Ö\89ü\8ds\82·\82é
334         m_nControlNextX += nWidth + 2;
335         if (m_nControlNextX >= m_nWindowWidth) {
336                 // \83I\81[\83o\81[\82µ\82½\82ç\90Ü\82è\95Ô\82·\81B
337                 ControlBreak();
338         }
339         m_nCommandID++;
340         return pControl;
341 }
342
343 STDMETHODIMP CForm::get_LeftMargin(short *pVal)
344 {
345         *pVal = m_nControlLeftMargin;
346         return S_OK;
347 }
348
349 STDMETHODIMP CForm::put_LeftMargin(short newVal)
350 {
351         m_nControlLeftMargin = newVal;
352         return S_OK;
353 }
354
355 STDMETHODIMP CForm::ControlBreak()
356 {
357         m_nControlNextX = m_nControlLeftMargin;
358         m_nControlNextY = m_nControlNextY0;
359         return S_OK;
360 }
361
362 STDMETHODIMP CForm::ControlGroup()
363 {
364         m_bControlNextIsGroupHead = true;
365         return S_OK;
366 }
367
368 STDMETHODIMP CForm::ControlPad(VARIANT width, VARIANT height)
369 {
370         // \8bó\94\92\82ð\82Â\82­\82é
371         CComVariant varWidth, varHeight;
372         if (varHeight.ChangeType(VT_I2, &height) == S_OK) {
373                 ControlBreak();
374                 m_nControlNextY += varHeight.iVal;
375         }
376         if (varWidth.ChangeType(VT_I2, &width) == S_OK) {
377                 m_nControlNextX += varWidth.iVal;
378         }
379         return S_OK;
380 }
381
382
383 STDMETHODIMP CForm::StatusLabel(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
384 {
385         CreateControlCore(text, width, height, pvarUnk, m_bControlUseStaticEdge ? WS_EX_STATICEDGE : WS_EX_CLIENTEDGE, SS_NOTIFY, 0, _TEXT("STATIC"));
386         return S_OK;
387 }
388
389 STDMETHODIMP CForm::ControlUseStaticEdge(VARIANT mode)
390 {
391         int nMode = true;
392         CComVariant varMode;
393         if ((mode.vt != VT_EMPTY && mode.vt != VT_ERROR && mode.vt != VT_NULL)
394                 && (varMode.ChangeType(VT_I2, &mode) == S_OK)) {
395                 nMode = varMode.iVal;
396         }
397         m_bControlUseStaticEdge = nMode;
398         return S_OK;
399 }
400
401 void CForm::AttachOwner(HWND hOwner)
402 {
403         m_hOwner = hOwner;
404         // \8e\96\91O\8dì\90¬\82³\82ê\82Ä\82¢\82½\83R\83\93\83g\83\8d\81[\83\8b\82ð\82·\82×\82Ä\90\90¬\82·\82é
405         std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
406         while (p != m_lstControl.end()) {
407                 (*p)->Create(hOwner);
408                 (*p)->SetFont(m_hControlFont);
409                 (*p)->SetColor(m_dwControlColor);
410                 p++;
411         }
412 }
413
414 void CForm::DetachOwner()
415 {
416         // \82·\82×\82Ä\82Ì\83R\83\93\83g\83\8d\81[\83\8b\82ð\94j\8aü\82·\82é
417         ClearControls();
418         // \83I\81[\83i\81[\82ð\96³\8cø\82É\82·\82é
419         m_hOwner = NULL;
420 }
421
422 void CForm::SetWindowSize(int width, int height, DWORD style, DWORD styleEx)
423 {
424         // \83E\83B\83\93\83h\83E\82Ì\83T\83C\83Y\82ð\8ew\92è\82·\82é
425         // \82½\82¾\82µ\81A\8e©\93®\93I\82É\8d\89E\82Ì\98g\95ª\82ð\88ø\82­
426
427         // \81¦ Windows\82Ì\98g\95\9d\82Ì\8eZ\92è\95û\96@\95Ï\8dX.(2015/08)
428         // \83N\83\89\83C\83A\83\93\83g\95\9d\82ð\89¼\92è\82µ\82Ä\83E\83B\83\93\83h\83E\95\9d\82ð\8b\81\82ß\82½\82 \82Æ\81A
429         // \82»\82Ì\8d·\82©\82ç\8eÀ\8dÛ\82Ì\98g\95\9d\82ð\8b\81\82ß\82é\81B
430         RECT rct = {0, 0, width, height};
431         AdjustWindowRectEx(&rct, style, false, styleEx);
432
433         int diff_w = rct.right - width;
434         int diff_h = rct.bottom - height;
435
436         m_nWindowWidth = width - diff_w * 2;
437         m_nWindowHeight = height - diff_h * 2;
438 }
439
440 STDMETHODIMP CForm::get_RightMargin(short *pVal)
441 {
442         *pVal = m_nControlRightMargin;
443         return S_OK;
444 }
445
446 STDMETHODIMP CForm::put_RightMargin(short newVal)
447 {
448         m_nControlRightMargin = newVal;
449         return S_OK;
450 }
451
452 void CForm::EnableAllControl(BOOL mode)
453 {
454         // \91S\83R\83\93\83g\83\8d\81[\83\8b\82Ì\83C\83l\81[\83u\83\8b\81E\83f\83B\83Z\81[\83u\83\8b\82Ì\90Ø\91Ö
455         if (!::IsWindow(m_hOwner)) {
456                 // \83\81\83C\83\93\83E\83B\83\93\83h\83E\82ª\8dì\90¬\82³\82ê\82Ä\82¢\82È\82¯\82ê\82Î\89½\82à\82µ\82È\82¢
457                 return;
458         }
459         std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
460         while (p != m_lstControl.end()) {
461                 (*p)->put_Enable(mode);
462                 p++;
463         }
464 }
465
466 STDMETHODIMP CForm::get_ControlColor(long *pVal)
467 {
468         *pVal = (long)m_dwControlColor;
469         return S_OK;
470 }
471
472 STDMETHODIMP CForm::put_ControlColor(long newVal)
473 {
474         if (m_hBrushControlBkColor) {
475                 DeleteObject(m_hBrushControlBkColor);
476         }
477         m_hBrushControlBkColor = CreateSolidBrush(m_dwControlColor);
478         m_dwControlColor = newVal;
479         return S_OK;
480 }
481
482 DWORD CForm::GetControlColor()
483 {
484         return m_dwControlColor;
485 }
486
487 HBRUSH CForm::GetControlColorBrush()
488 {
489         return m_hBrushControlBkColor;
490 }
491
492 BOOL CForm::FindControlEventName(int eventcode, BSTR *pEventName)
493 {
494         // pEventName\82Í\8f\89\8aú\89»\82³\82ê\82Ä\82¢\82È\82¢BSTR\82Ö\82Ì\83|\83C\83\93\83^\82ð\93n\82·
495         // \8cÄ\82Ñ\8fo\82µ\8c³\82Ítrue\82ª\8bA\82Á\82½\82ç\81A\82±\82ÌBSTR\82ð\89ð\95ú\82·\82é\95K\97v\82ª\82 \82é
496         std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
497         while (p != m_lstControl.end()) {
498                 if ((*p)->GetID() == eventcode) {
499                         (*p)->GetClassEvent(pEventName);
500                         return true;
501                 }
502                 p++;
503         }
504         return false;
505 }
506
507 HWND CForm::GetAttachedOwner()
508 {
509         return m_hOwner;
510 }