1 // Form.cpp : CForm
\82Ì
\83C
\83\93\83v
\83\8a\83\81\83\93\83e
\81[
\83V
\83\87\83\93
3 #include "SeraphyScriptTools.h"
6 /////////////////////////////////////////////////////////////////////////////
9 STDMETHODIMP CForm::InterfaceSupportsErrorInfo(REFIID riid)
11 static const IID* arr[] =
15 for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)
17 if (IsEqualGUID(*arr[i],riid))
23 void CForm::FinalRelease()
25 ATLTRACE("CForm::FinalRelease\r\n");
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;
33 //
\83t
\83H
\83\93\83g
\82Ì
\94j
\8aü
35 DeleteObject(m_hControlFont);
36 m_hControlFont = NULL;
40 STDMETHODIMP CForm::get_Control(VARIANT varNum, VARIANT *pVal)
45 if(tmp.ChangeType(VT_I2,&varNum) == S_OK){
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;
66 STDMETHODIMP CForm::SetControlFont(VARIANT fontname, VARIANT fontsize)
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);
74 if(varSize.ChangeType(VT_I2,&fontsize) == S_OK){
77 //
\8am
\95Û
\8dÏ
\82Ý
\83t
\83H
\83\93\83g
\82ð
\89ð
\95ú
\82·
\82é
79 DeleteObject(m_hControlFont);
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);
93 STDMETHODIMP CForm::Label(VARIANT text, VARIANT width, VARIANT *pvarUnk)
96 CreateControlCore(text,width,dmy,pvarUnk,0,SS_NOTIFY,0,"STATIC");
100 STDMETHODIMP CForm::Button(VARIANT text, VARIANT width, VARIANT *pvarUnk)
103 CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_PUSHBUTTON,0,"BUTTON");
107 STDMETHODIMP CForm::CheckBox(VARIANT text, VARIANT width, VARIANT *pvarUnk)
110 CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTOCHECKBOX,0,"BUTTON");
114 STDMETHODIMP CForm::RadioButton(VARIANT text, VARIANT width, VARIANT *pvarUnk)
117 CreateControlCore(text,width,dmy,pvarUnk,0,BS_AUTORADIOBUTTON|(m_bControlNextIsGroupHead?WS_TABSTOP:0),0,"BUTTON");
121 STDMETHODIMP CForm::CheckBox3state(VARIANT text, VARIANT width, VARIANT *pvarUnk)
124 CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTO3STATE,0,"BUTTON");
128 STDMETHODIMP CForm::PushCheckButton(VARIANT text, VARIANT width, VARIANT *pvarUnk)
131 CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTOCHECKBOX|BS_PUSHLIKE,0,"BUTTON");
135 STDMETHODIMP CForm::PushRadioButton(VARIANT text, VARIANT width, VARIANT *pvarUnk)
138 CreateControlCore(text,width,dmy,pvarUnk,0,BS_AUTORADIOBUTTON|BS_PUSHLIKE|(m_bControlNextIsGroupHead?WS_TABSTOP:0),0,"BUTTON");
142 STDMETHODIMP CForm::ReadonlyEdit(VARIANT text, VARIANT width, VARIANT height, VARIANT *punkVal)
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;
151 style |= ES_AUTOHSCROLL;
153 CreateControlCore(text,width,height,punkVal,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,style,0,"EDIT");
157 STDMETHODIMP CForm::Edit(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
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;
166 style |= ES_AUTOHSCROLL;
168 CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,style,0,"EDIT");
172 STDMETHODIMP CForm::PasswordEdit(VARIANT text, VARIANT width, VARIANT *pvarUnk)
175 CreateControlCore(text,width,dmy,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|ES_PASSWORD,0,"EDIT");
179 STDMETHODIMP CForm::ListBox(VARIANT width, VARIANT height,VARIANT* pvarUnk)
182 CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|LBS_NOTIFY|LBS_USETABSTOPS|LBS_NOINTEGRALHEIGHT|LBS_DISABLENOSCROLL,0,"LISTBOX");
186 STDMETHODIMP CForm::MultiListBox(VARIANT width, VARIANT height, VARIANT *pvarUnk)
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");
193 STDMETHODIMP CForm::DropdownList(VARIANT width, VARIANT height, VARIANT *pvarUnk)
196 CreateControlCore(dmy,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|CBS_DROPDOWNLIST|CBS_SORT,0,"COMBOBOX");
200 STDMETHODIMP CForm::DropdownEdit(VARIANT text,VARIANT width, VARIANT height, VARIANT *pvarUnk)
202 CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|CBS_DROPDOWN|CBS_AUTOHSCROLL|CBS_SORT,0,"COMBOBOX");
206 STDMETHODIMP CForm::TreeView(VARIANT width, VARIANT height, VARIANT *pvarUnk)
209 CreateControlCore(dmy,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|TVS_DISABLEDRAGDROP|TVS_HASBUTTONS|TVS_HASLINES|TVS_LINESATROOT|TVS_SHOWSELALWAYS,0,WC_TREEVIEW);
213 STDMETHODIMP CForm::ListView(VARIANT colum,VARIANT width, VARIANT height, VARIANT *pvarUnk)
216 CreateControlCore(colum,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|LVS_REPORT|LVS_SHOWSELALWAYS,0,WC_LISTVIEW);
220 STDMETHODIMP CForm::EditListView(VARIANT colum, VARIANT width, VARIANT height, VARIANT *pvarUnk)
223 CreateControlCore(colum,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|LVS_REPORT|LVS_EDITLABELS|LVS_SHOWSELALWAYS,0,WC_LISTVIEW);
227 STDMETHODIMP CForm::CheckListView(VARIANT colum, VARIANT width, VARIANT height, VARIANT *pvarUnk)
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);
234 STDMETHODIMP CForm::ClearControls()
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é
241 p = m_lstControl.erase(p);
244 m_nControlNextY0 = 0;
246 m_nControlLeftMargin = 5;
247 m_nControlRightMargin = 5;
248 m_nControlNextX = m_nControlLeftMargin;
249 m_bControlNextIsGroupHead = false;
250 m_bControlUseStaticEdge = true;
252 //
\83R
\83\93\83g
\83\8d\81[
\83\8b\97p
\83t
\83H
\83\93\83g
\82Ì
\8dì
\90¬
254 DeleteObject(m_hControlFont);
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);
261 CControl* CForm::CreateControlCore(VARIANT &text, VARIANT &width, VARIANT &height,VARIANT *pvarUnk, DWORD extstyle, DWORD style, DWORD afterstyle,LPCSTR classname)
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);
269 //
\94z
\92u
\83T
\83C
\83Y
\82Ì
\8eæ
\93¾
270 int nWidth = (m_nWindowWidth - m_nControlRightMargin) - m_nControlNextX;
273 nWidth = (m_nWindowWidth - m_nControlRightMargin) - m_nControlNextX;
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){
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;
290 //
\83O
\83\8b\81[
\83v
\83w
\83b
\83_
291 if(m_bControlNextIsGroupHead){
293 m_bControlNextIsGroupHead = false;
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);
301 //
\8eQ
\8fÆ
\83J
\83E
\83\93\83g
\81A
\83|
\83C
\83\93\83^
\82Ì
\95Û
\91¶
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);
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¾
310 pControl->Create(m_hOwner);
311 pControl->SetFont(m_hControlFont);
312 pControl->SetColor(m_dwControlColor);
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;
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;
328 int ny = m_nControlNextY + nHeight + 7;
329 if(m_nControlNextY0 < ny){
330 m_nControlNextY0 = ny;
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
342 STDMETHODIMP CForm::get_LeftMargin(short *pVal)
344 *pVal = m_nControlLeftMargin;
348 STDMETHODIMP CForm::put_LeftMargin(short newVal)
350 m_nControlLeftMargin = newVal;
354 STDMETHODIMP CForm::ControlBreak()
356 m_nControlNextX = m_nControlLeftMargin;
357 m_nControlNextY = m_nControlNextY0;
361 STDMETHODIMP CForm::ControlGroup()
363 m_bControlNextIsGroupHead = true;
367 STDMETHODIMP CForm::ControlPad(VARIANT width, VARIANT height)
369 //
\8bó
\94\92\82ð
\82Â
\82
\82é
370 CComVariant varWidth,varHeight;
371 if(varHeight.ChangeType(VT_I2,&height) == S_OK){
373 m_nControlNextY += varHeight.iVal;
375 if(varWidth.ChangeType(VT_I2,&width) == S_OK){
376 m_nControlNextX += varWidth.iVal;
382 STDMETHODIMP CForm::StatusLabel(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
384 CreateControlCore(text,width,height,pvarUnk,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,SS_NOTIFY,0,"STATIC");
388 STDMETHODIMP CForm::ControlUseStaticEdge(VARIANT mode)
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;
396 m_bControlUseStaticEdge = nMode;
400 void CForm::AttachOwner(HWND 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);
413 void CForm::DetachOwner()
415 //
\82·
\82×
\82Ä
\82Ì
\83R
\83\93\83g
\83\8d\81[
\83\8b\82ð
\94j
\8aü
\82·
\82é
417 //
\83I
\81[
\83i
\81[
\82ð
\96³
\8cø
\82É
\82·
\82é
421 void CForm::SetWindowSize(int width, int height,BOOL bThick)
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);
429 STDMETHODIMP CForm::get_RightMargin(short *pVal)
431 *pVal = m_nControlRightMargin;
435 STDMETHODIMP CForm::put_RightMargin(short newVal)
437 m_nControlRightMargin = newVal;
441 void CForm::EnableAllControl(BOOL mode)
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¢
448 list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
449 while(p != m_lstControl.end()){
450 (*p)->put_Enable(mode);
455 STDMETHODIMP CForm::get_ControlColor(long *pVal)
457 *pVal = (long)m_dwControlColor;
461 STDMETHODIMP CForm::put_ControlColor(long newVal)
463 if(m_hBrushControlBkColor){
464 DeleteObject(m_hBrushControlBkColor);
466 m_hBrushControlBkColor = CreateSolidBrush(m_dwControlColor);
467 m_dwControlColor = newVal;
471 DWORD CForm::GetControlColor()
473 return m_dwControlColor;
476 HBRUSH CForm::GetControlColorBrush()
478 return m_hBrushControlBkColor;
481 BOOL CForm::FindControlEventName(int eventcode, BSTR *pEventName)
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);
496 HWND CForm::GetAttachedOwner()