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 void CForm::FinalRelease()
11 ATLTRACE("CForm::FinalRelease\r\n");
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;
19 //
\83t
\83H
\83\93\83g
\82Ì
\94j
\8aü
21 DeleteObject(m_hControlFont);
22 m_hControlFont = NULL;
26 STDMETHODIMP CForm::get_Control(VARIANT varNum, VARIANT *pVal)
31 if (tmp.ChangeType(VT_I2, &varNum) == S_OK) {
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;
52 STDMETHODIMP CForm::SetControlFont(VARIANT fontname, VARIANT fontsize)
55 ATL::CString szFontName;
56 if (varName.ChangeType(VT_BSTR, &fontname) == S_OK) {
57 szFontName = varName.bstrVal;
62 if (varSize.ChangeType(VT_I2, &fontsize) == S_OK) {
66 //
\8am
\95Û
\8dÏ
\82Ý
\83t
\83H
\83\93\83g
\82ð
\89ð
\95ú
\82·
\82é
68 DeleteObject(m_hControlFont);
71 //
\90V
\82µ
\82¢
\83t
\83H
\83\93\83g
\82ð
\8dì
\90¬
\82·
\82é
72 m_hControlFont = CreateFont(
74 0, 0, 0, 0, false, false, false,
82 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 std::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, _TEXT("STATIC"));
100 STDMETHODIMP CForm::Button(VARIANT text, VARIANT width, VARIANT *pvarUnk)
103 CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_PUSHBUTTON, 0, _TEXT("BUTTON"));
107 STDMETHODIMP CForm::CheckBox(VARIANT text, VARIANT width, VARIANT *pvarUnk)
110 CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_AUTOCHECKBOX, 0, _TEXT("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, _TEXT("BUTTON"));
121 STDMETHODIMP CForm::CheckBox3state(VARIANT text, VARIANT width, VARIANT *pvarUnk)
124 CreateControlCore(text, width, dmy, pvarUnk, 0, WS_TABSTOP | BS_AUTO3STATE, 0, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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, _TEXT("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 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é
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¬
253 if (m_hControlFont) {
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, LPCTSTR classname)
264 ATL::CString szCaption;
265 if (varText.ChangeType(VT_BSTR, &text) == S_OK) {
266 szCaption = varText.bstrVal;
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 = CComObject<CControl>::CreateInstance(&pControl);
299 // FIXME:
\83G
\83\89\81[
\82ð
\95Ô
\82¹
\82é
\82æ
\82¤
\82É
\82·
\82×
\82«
300 ATLASSERT(SUCCEEDED(hRet));
302 //
\8eQ
\8fÆ
\83J
\83E
\83\93\83g
\81A
\83|
\83C
\83\93\83^
\82Ì
\95Û
\91¶
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);
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¾
311 pControl->Create(m_hOwner);
312 pControl->SetFont(m_hControlFont);
313 pControl->SetColor(m_dwControlColor);
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;
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;
329 int ny = m_nControlNextY + nHeight + 7;
330 if (m_nControlNextY0 < ny) {
331 m_nControlNextY0 = ny;
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
343 STDMETHODIMP CForm::get_LeftMargin(short *pVal)
345 *pVal = m_nControlLeftMargin;
349 STDMETHODIMP CForm::put_LeftMargin(short newVal)
351 m_nControlLeftMargin = newVal;
355 STDMETHODIMP CForm::ControlBreak()
357 m_nControlNextX = m_nControlLeftMargin;
358 m_nControlNextY = m_nControlNextY0;
362 STDMETHODIMP CForm::ControlGroup()
364 m_bControlNextIsGroupHead = true;
368 STDMETHODIMP CForm::ControlPad(VARIANT width, VARIANT height)
370 //
\8bó
\94\92\82ð
\82Â
\82
\82é
371 CComVariant varWidth, varHeight;
372 if (varHeight.ChangeType(VT_I2, &height) == S_OK) {
374 m_nControlNextY += varHeight.iVal;
376 if (varWidth.ChangeType(VT_I2, &width) == S_OK) {
377 m_nControlNextX += varWidth.iVal;
383 STDMETHODIMP CForm::StatusLabel(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk)
385 CreateControlCore(text, width, height, pvarUnk, m_bControlUseStaticEdge ? WS_EX_STATICEDGE : WS_EX_CLIENTEDGE, SS_NOTIFY, 0, _TEXT("STATIC"));
389 STDMETHODIMP CForm::ControlUseStaticEdge(VARIANT mode)
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;
397 m_bControlUseStaticEdge = nMode;
401 void CForm::AttachOwner(HWND 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);
414 void CForm::DetachOwner()
416 //
\82·
\82×
\82Ä
\82Ì
\83R
\83\93\83g
\83\8d\81[
\83\8b\82ð
\94j
\8aü
\82·
\82é
418 //
\83I
\81[
\83i
\81[
\82ð
\96³
\8cø
\82É
\82·
\82é
422 void CForm::SetWindowSize(int width, int height, DWORD style, DWORD styleEx)
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
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);
433 int diff_w = rct.right - width;
434 int diff_h = rct.bottom - height;
436 m_nWindowWidth = width - diff_w * 2;
437 m_nWindowHeight = height - diff_h * 2;
440 STDMETHODIMP CForm::get_RightMargin(short *pVal)
442 *pVal = m_nControlRightMargin;
446 STDMETHODIMP CForm::put_RightMargin(short newVal)
448 m_nControlRightMargin = newVal;
452 void CForm::EnableAllControl(BOOL mode)
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¢
459 std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
460 while (p != m_lstControl.end()) {
461 (*p)->put_Enable(mode);
466 STDMETHODIMP CForm::get_ControlColor(long *pVal)
468 *pVal = (long)m_dwControlColor;
472 STDMETHODIMP CForm::put_ControlColor(long newVal)
474 if (m_hBrushControlBkColor) {
475 DeleteObject(m_hBrushControlBkColor);
477 m_hBrushControlBkColor = CreateSolidBrush(m_dwControlColor);
478 m_dwControlColor = newVal;
482 DWORD CForm::GetControlColor()
484 return m_dwControlColor;
487 HBRUSH CForm::GetControlColorBrush()
489 return m_hBrushControlBkColor;
492 BOOL CForm::FindControlEventName(int eventcode, BSTR *pEventName)
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);
507 HWND CForm::GetAttachedOwner()