OSDN Git Service

20021009版ソース
[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 STDMETHODIMP CForm::InterfaceSupportsErrorInfo(REFIID riid)
10 {
11         static const IID* arr[] = 
12         {
13                 &IID_IForm
14         };
15         for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
16         {
17                 if (IsEqualGUID(*arr[i],riid))
18                         return S_OK;
19         }
20         return S_FALSE;
21 }
22
23 void CForm::FinalRelease()
24 {
25         ATLTRACE("CForm::FinalRelease\r\n");
26         // \8f\89\8aú\89»
27         ClearControls();
28         // \83R\83\93\83g\83\8d\81[\83\8b\94w\8ci\83u\83\89\83V\82Ì\94j\8aü
29         if(m_hBrushControlBkColor){
30                 DeleteObject(m_hBrushControlBkColor);
31                 m_hBrushControlBkColor = NULL;
32         }
33         // \83t\83H\83\93\83g\82Ì\94j\8aü
34         if(m_hControlFont){
35                 DeleteObject(m_hControlFont);
36                 m_hControlFont = NULL;
37         }
38 }
39
40 STDMETHODIMP CForm::get_Control(VARIANT varNum, VARIANT *pVal)
41 {
42         ::VariantInit(pVal);
43         CComVariant tmp;
44         int nID = -1;
45         if(tmp.ChangeType(VT_I2,&varNum) == S_OK){
46                 nID = tmp.iVal;
47         }
48         if(nID > 0){
49                 list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
50                 while(p != m_lstControl.end()){
51                         if((*p)->GetID() == nID){
52                                 // \93¯\88êID\82ð\94­\8c©\82µ\82½\82Ì\82Å\81A\82±\82ê\82ð\95Ô\82·
53                                 IUnknown* pUnk = NULL;
54                                 if((*p)->QueryInterface(IID_IUnknown,(void**)&pUnk) == S_OK){
55                                         pVal->vt      = VT_UNKNOWN;
56                                         pVal->punkVal = pUnk;
57                                 }
58                                 break;
59                         }
60                         p++;
61                 }
62         }
63         return S_OK;
64 }
65
66 STDMETHODIMP CForm::SetControlFont(VARIANT fontname, VARIANT fontsize)
67 {
68         CComVariant varName,varSize;
69         TCHAR szFontName[MAX_PATH] = {0};
70         if(varName.ChangeType(VT_BSTR,&fontname) == S_OK){
71                 WideCharToMultiByte(GetACP(),0,varName.bstrVal,-1,szFontName,MAX_PATH,NULL,NULL);
72         }
73         int siz = 20;
74         if(varSize.ChangeType(VT_I2,&fontsize) == S_OK){
75                 siz = varSize.iVal;
76         }
77         // \8am\95Û\8dÏ\82Ý\83t\83H\83\93\83g\82ð\89ð\95ú\82·\82é
78         if(m_hControlFont){
79                 DeleteObject(m_hControlFont);
80         }
81         // \90V\82µ\82¢\83t\83H\83\93\83g\82ð\8dì\90¬\82·\82é
82         m_hControlFont = CreateFont(siz,0,0,0,0,false,false,false,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_DONTCARE,szFontName);
83         m_nControlFontSize = siz;
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         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,"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,"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,"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,"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,"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,"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,"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,"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,"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,"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,"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,"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,"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,"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         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,LPCSTR classname)
262 {
263         CComVariant varText;
264         TCHAR szCaption[MAX_PATH] = {0};
265         if(varText.ChangeType(VT_BSTR,&text) == S_OK){
266                 WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,szCaption,MAX_PATH,NULL,NULL);
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 = pControl->CreateInstance(&pControl);
299         ATLASSERT(hRet == S_OK);
300
301         // \8eQ\8fÆ\83J\83E\83\93\83g\81A\83|\83C\83\93\83^\82Ì\95Û\91
302         pControl->AddRef();
303         pControl->SetParam(afterstyle,extstyle,classname,szCaption,style,m_nControlNextX,m_nControlNextY,nWidth,nHeight+6,m_nCommandID);
304         // \83\8a\83X\83g\82É\93o\98^
305         m_lstControl.push_back(pControl);
306
307         // \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¤
308         // \82»\82¤\82Å\82È\82¯\82ê\82Î\83E\83B\83\93\83h\83E\90\90¬\8cã\82É\8eæ\93¾
309         if(m_hOwner){
310                 pControl->Create(m_hOwner);
311                 pControl->SetFont(m_hControlFont);
312                 pControl->SetColor(m_dwControlColor);
313         }
314
315         // \82±\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\96ß\82è\92l\82Æ\82·\82é
316         IUnknown* pUnk = NULL;
317         hRet = pControl->QueryInterface(IID_IUnknown,(void**)&pUnk);
318         ATLASSERT(hRet == S_OK);
319         ::VariantInit(pvarUnk);
320         pvarUnk->vt      = VT_UNKNOWN;
321         pvarUnk->punkVal = pUnk;
322
323         // \8e\9f\82É\89ü\8ds\82µ\82½\82Æ\82«\82É\88Ú\93®\82·\82é\97Ê
324         if(!lstrcmp(classname,"COMBOBOX")){
325                 // \83R\83\93\83{\83{\83b\83N\83X\82Í\95\\8e¦\82³\82ê\82Ä\82¢\82é\82Ì\82Í1\8ds\95ª\82¾\82¯\81B
326                 nHeight = m_nControlFontSize;
327         }
328         int ny = m_nControlNextY + nHeight + 7;
329         if(m_nControlNextY0 < ny){
330                 m_nControlNextY0 = ny;
331         }
332         // \8d\95û\8cü\82Ö\89ü\8ds\82·\82é
333         m_nControlNextX += nWidth + 2;
334         if(m_nControlNextX >= m_nWindowWidth){
335                 // \83I\81[\83o\81[\82µ\82½\82ç\90Ü\82è\95Ô\82·\81B
336                 ControlBreak();
337         }
338         m_nCommandID++;
339         return pControl;
340 }
341
342 STDMETHODIMP CForm::get_LeftMargin(short *pVal)
343 {
344         *pVal = m_nControlLeftMargin;
345         return S_OK;
346 }
347
348 STDMETHODIMP CForm::put_LeftMargin(short newVal)
349 {
350         m_nControlLeftMargin = newVal;
351         return S_OK;
352 }
353
354 STDMETHODIMP CForm::ControlBreak()
355 {
356         m_nControlNextX = m_nControlLeftMargin;
357         m_nControlNextY = m_nControlNextY0;
358         return S_OK;
359 }
360
361 STDMETHODIMP CForm::ControlGroup()
362 {
363         m_bControlNextIsGroupHead = true;
364         return S_OK;
365 }
366
367 STDMETHODIMP CForm::ControlPad(VARIANT width, VARIANT height)
368 {
369         // \8bó\94\92\82ð\82Â\82­\82é
370         CComVariant varWidth,varHeight;
371         if(varHeight.ChangeType(VT_I2,&height) == S_OK){
372                 ControlBreak();
373                 m_nControlNextY += varHeight.iVal;
374         }
375         if(varWidth.ChangeType(VT_I2,&width) == S_OK){
376                 m_nControlNextX += varWidth.iVal;
377         }
378         return S_OK;
379 }
380
381
382 STDMETHODIMP CForm::StatusLabel(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
383 {
384         CreateControlCore(text,width,height,pvarUnk,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,SS_NOTIFY,0,"STATIC");
385         return S_OK;
386 }
387
388 STDMETHODIMP CForm::ControlUseStaticEdge(VARIANT mode)
389 {
390         int nMode = true;
391         CComVariant varMode;
392         if((mode.vt != VT_EMPTY && mode.vt != VT_ERROR && mode.vt != VT_NULL)
393                 && (varMode.ChangeType(VT_I2,&mode) == S_OK)){
394                 nMode = varMode.iVal;
395         }
396         m_bControlUseStaticEdge = nMode;
397         return S_OK;
398 }
399
400 void CForm::AttachOwner(HWND hOwner)
401 {
402         m_hOwner = hOwner;
403         // \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é
404         list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
405         while(p != m_lstControl.end()){
406                 (*p)->Create(hOwner);
407                 (*p)->SetFont(m_hControlFont);
408                 (*p)->SetColor(m_dwControlColor);
409                 p++;
410         }
411 }
412
413 void CForm::DetachOwner()
414 {
415         // \82·\82×\82Ä\82Ì\83R\83\93\83g\83\8d\81[\83\8b\82ð\94j\8aü\82·\82é
416         ClearControls();
417         // \83I\81[\83i\81[\82ð\96³\8cø\82É\82·\82é
418         m_hOwner = NULL;
419 }
420
421 void CForm::SetWindowSize(int width, int height,BOOL bThick)
422 {
423         // \83E\83B\83\93\83h\83E\82Ì\83T\83C\83Y\82ð\8ew\92è\82·\82é
424         // \82½\82¾\82µ\81A\8e©\93®\93I\82É\8d\89E\82Ì\98g\95ª\82ð\88ø\82­
425         m_nWindowWidth  = width - (GetSystemMetrics(bThick?SM_CXSIZEFRAME:SM_CXFIXEDFRAME) * 2);
426         m_nWindowHeight = height- (GetSystemMetrics(bThick?SM_CYSIZEFRAME:SM_CYFIXEDFRAME) * 2);
427 }
428
429 STDMETHODIMP CForm::get_RightMargin(short *pVal)
430 {
431         *pVal = m_nControlRightMargin;
432         return S_OK;
433 }
434
435 STDMETHODIMP CForm::put_RightMargin(short newVal)
436 {
437         m_nControlRightMargin = newVal;
438         return S_OK;
439 }
440
441 void CForm::EnableAllControl(BOOL mode)
442 {
443         // \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Ö
444         if(!::IsWindow(m_hOwner)){
445                 // \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¢
446                 return;
447         }
448         list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
449         while(p != m_lstControl.end()){
450                 (*p)->put_Enable(mode);
451                 p++;
452         }
453 }
454
455 STDMETHODIMP CForm::get_ControlColor(long *pVal)
456 {
457         *pVal = (long)m_dwControlColor;
458         return S_OK;
459 }
460
461 STDMETHODIMP CForm::put_ControlColor(long newVal)
462 {
463         if(m_hBrushControlBkColor){
464                 DeleteObject(m_hBrushControlBkColor);
465         }
466         m_hBrushControlBkColor = CreateSolidBrush(m_dwControlColor);
467         m_dwControlColor = newVal;
468         return S_OK;
469 }
470
471 DWORD CForm::GetControlColor()
472 {
473         return m_dwControlColor;
474 }
475
476 HBRUSH CForm::GetControlColorBrush()
477 {
478         return m_hBrushControlBkColor;
479 }
480
481 BOOL CForm::FindControlEventName(int eventcode, BSTR *pEventName)
482 {
483         // pEventName\82Í\8f\89\8aú\89»\82³\82ê\82Ä\82¢\82È\82¢BSTR\82Ö\82Ì\83|\83C\83\93\83^\82ð\93n\82·
484         // \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é
485         list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
486         while(p != m_lstControl.end()){
487                 if((*p)->GetID() == eventcode){
488                         (*p)->GetClassEvent(pEventName);
489                         return true;
490                 }
491                 p++;
492         }
493         return false;
494 }
495
496 HWND CForm::GetAttachedOwner()
497 {
498         return m_hOwner;
499 }