1 // Instance.cpp : CInstance
\82Ì
\83C
\83\93\83v
\83\8a\83\81\83\93\83e
\81[
\83V
\83\87\83\93
4 #include "SeraphyScriptTools.h"
6 #include "profilesection.h"
8 /////////////////////////////////////////////////////////////////////////////
11 HRESULT CInstance::FinalConstruct()
15 //
\83\81\83C
\83\93\83E
\83B
\83\93\83h
\83E
\82Ì
\90¶
\90¬
17 if (FAILED(hr = CComObject<COverlappedWindow>::CreateInstance(&m_pMainWindow))) {
18 ATLASSERT(SUCCEEDED(hr));
21 m_pMainWindow->AddRef(); //
\83C
\83\93\83X
\83^
\83\93\83X
\95Ï
\90\94\82É
\95Û
\8e\9d\82·
\82é
\8eQ
\8fÆ
\83J
\83E
\83\93\83^+1
23 //
\83R
\83\82\83\93\83_
\83C
\83A
\83\8d\83O
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82Ì
\90¶
\90¬
25 if (FAILED(hr = CComObject<CCommDialog>::CreateInstance(&m_pCommDlg))) {
26 ATLASSERT(SUCCEEDED(hr));
27 //
\83\81\83C
\83\93\83E
\83B
\83\93\83h
\83E
\82Í
\94j
\8aü
\82·
\82é.
28 m_pMainWindow->Release();
33 //
\83\81\83C
\83\93\83E
\83B
\83\93\83h
\83E
\82ð
\83R
\83\82\83\93\83_
\83C
\83A
\83\8d\83O
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82É
\90Ú
\91±
\82·
\82é
34 CComPtr<IUnknown> pUnk;
35 if (FAILED(hr = m_pMainWindow->QueryInterface(&pUnk))) {
36 m_pCommDlg->Release();
37 m_pMainWindow->Release();
41 CComVariant varUnk(pUnk);
42 m_pCommDlg->SetMainWindow(varUnk);
44 //
\83I
\81[
\83o
\81[
\83\89\83b
\83v
\83E
\83B
\83\93\83h
\83E
\83\8a\83X
\83g
\82É
\92Ç
\89Á
\82·
\82é
\8eQ
\8fÆ
\83J
\83E
\83\93\83^+1
45 m_pMainWindow->AddRef();
46 m_lstOverlappedWnd.push_back(m_pMainWindow);
48 //
\83E
\83F
\83C
\83g
\83J
\81[
\83\
\83\8b\81E
\83J
\83E
\83\93\83g
54 void CInstance::FinalRelease()
56 ATLTRACE("CInstance::FinalRelease\r\n");
58 //
\83\81\83C
\83\93\83E
\83B
\83\93\83h
\83E
\82Ì
\89ð
\95ú
59 ATLTRACE(_TEXT("*refcount=%d\n"), m_pMainWindow->m_dwRef);
61 m_pMainWindow->Release();
62 //m_pMainWindow = NULL;
65 //
\83R
\83\82\83\93\83_
\83C
\83A
\83\8d\83O
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82Ì
\89ð
\95ú
66 ATLTRACE(_TEXT("*refcount=%d\n"), m_pMainWindow->m_dwRef);
68 m_pCommDlg->Release();
72 //
\83|
\83b
\83v
\83A
\83b
\83v
\83E
\83B
\83\93\83h
\83E
\82Ì
\89ð
\95ú
73 ATLTRACE(_TEXT("*refcount=%d\n"), m_pMainWindow->m_dwRef);
74 std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
75 while (p != m_lstOverlappedWnd.end()) {
78 p = m_lstOverlappedWnd.erase(p);
82 STDMETHODIMP CInstance::get_Dialog(VARIANT *pVal)
87 //
\83R
\83\82\83\93\83_
\83C
\83A
\83\8d\83O
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82ð
\95Ô
\82·
91 CComPtr<IUnknown> pUnk;
92 if (FAILED(hr = m_pCommDlg->QueryInterface(&pUnk))) {
95 pVal->vt = VT_UNKNOWN;
96 pVal->punkVal = pUnk.Detach();
101 void CInstance::PurgeUnusedWindows()
103 //
\8eQ
\8fÆ
\83J
\83E
\83\93\83g
\82ª1
\82Â
\82µ
\82©
\82È
\82¢
\83E
\83B
\83\93\83h
\83E
\82Ì
\94j
\8aü
\82ð
\8ds
\82¤
104 std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
105 while (p != m_lstOverlappedWnd.end()) {
106 if ((*p)->m_dwRef == 1) {
107 //
\8eQ
\8fÆ
\83J
\83E
\83\93\83g
\82ª1
\82µ
\82©
\82È
\82¢ =
\82±
\82Ì
\83N
\83\89\83X
\82µ
\82©
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢ =
\95s
\97v
108 BOOL bVisible = false;
109 HRESULT hr = (*p)->get_Visible(&bVisible);
110 if (SUCCEEDED(hr) && !bVisible) {
111 //
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82È
\82¯
\82ê
\82Î
\8fÁ
\82µ
\82Ä
\82æ
\82µ
\81B
113 p = m_lstOverlappedWnd.erase(p);
121 STDMETHODIMP CInstance::CreateFrame(VARIANT *pvarUnk)
127 ::VariantInit(pvarUnk);
129 //
\96¢
\8eg
\97p
\82Ì
\83E
\83B
\83\93\83h
\83E
\82ð
\8dí
\8f\9c\82·
\82é
130 PurgeUnusedWindows();
134 //
\83E
\83B
\83\93\83h
\83E
\82Ì
\90¶
\90¬
135 CComObject<COverlappedWindow>* pNewWnd = NULL;
136 if (FAILED(hr = CComObject<COverlappedWindow>::CreateInstance(&pNewWnd))) {
140 //
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82Ì
\8eæ
\93¾
141 CComPtr<IUnknown> pUnk;
142 if (FAILED(hr = pNewWnd->QueryInterface(&pUnk))) {
147 //
\83E
\83F
\83C
\83g
\83J
\81[
\83\
\83\8b\8fó
\91Ô
\82Ì
\90Ý
\92è
148 pNewWnd->put_WaitCursor(m_dWaitCursor);
150 //
\8eQ
\8fÆ
\83J
\83E
\83\93\83g
\82Ì
\92Ç
\89Á
\82¨
\82æ
\82Ñ
151 //
\8aÇ
\97\9d\83E
\83B
\83\93\83h
\83E
\83\8a\83X
\83g
\82Ö
\82Ì
\95Û
\91¶
153 m_lstOverlappedWnd.push_back(pNewWnd);
155 pvarUnk->vt = VT_UNKNOWN;
156 pvarUnk->punkVal = pUnk.Detach();
160 STDMETHODIMP CInstance::WaitEvent(VARIANT varTim, VARIANT *pvarUnk)
166 ::VariantInit(pvarUnk);
167 //
\91Ò
\8b@
\8e\9e\8aÔ
\82Ì
\8eæ
\93¾
168 DWORD sleeptim = 1000;
170 if (tim.ChangeType(VT_I4, &varTim) == S_OK) {
171 sleeptim = (DWORD)tim.lVal;
176 //
\82·
\82×
\82Ä
\82Ì
\83|
\83b
\83v
\83A
\83b
\83v
\83E
\83B
\83\93\83h
\83E
\82Ì
\83C
\83x
\83\93\83g
\83n
\83\93\83h
\83\8b\82ð
\8eæ
\93¾
\82·
\82é
177 HANDLE hEvent[MAXIMUM_WAIT_OBJECTS] = {NULL};
178 HWND hWnd[MAXIMUM_WAIT_OBJECTS] = {NULL};
180 CComObject<COverlappedWindow>* pOverlapped[MAXIMUM_WAIT_OBJECTS] = {0};
184 std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
185 while (p != m_lstOverlappedWnd.end()) {
187 (*p)->SetWaitParam(&count, hWnd, hEvent);
188 for (; n < count; n++) {
194 //
\83\81\83b
\83Z
\81[
\83W
\83\8b\81[
\83v
196 DWORD ret = pOverlapped[0]->MessageLoop(sleeptim, count, hWnd, hEvent);
197 if (ret > 0 && ret <= (DWORD)count) {
198 if (pOverlapped[ret - 1]) {
199 // OVERLAPPEDWINDOW
\83I
\83u
\83W
\83F
\83N
\83g
\82Ö
\82Ì
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
\82ð
\95Ô
\82·
200 CComPtr<IUnknown> pUnk;
201 if (SUCCEEDED(pOverlapped[ret - 1]->QueryInterface(&pUnk))) {
202 pvarUnk->vt = VT_UNKNOWN;
203 pvarUnk->punkVal = pUnk.Detach();
211 STDMETHODIMP CInstance::get_MainFrame(VARIANT *pVal)
220 CComPtr<IUnknown> pUnk;
221 if (FAILED(hr = m_pMainWindow->QueryInterface(&pUnk))) {
224 pVal->vt = VT_UNKNOWN;
225 pVal->punkVal = pUnk.Detach();
230 STDMETHODIMP CInstance::get_WaitCursor(short *pVal)
236 *pVal = m_dWaitCursor;
241 STDMETHODIMP CInstance::put_WaitCursor(short newVal)
243 m_dWaitCursor = newVal;
245 //
\82·
\82×
\82Ä
\82Ì
\83|
\83b
\83v
\83A
\83b
\83v
\83E
\83B
\83\93\83h
\83E
\82É
\83E
\83F
\83C
\83g
\83J
\81[
\83\
\83\8b\92l
\82ð
\90Ý
\92è
\82·
\82é
246 std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
247 while (p != m_lstOverlappedWnd.end()) {
248 (*p)->put_WaitCursor(newVal);
254 STDMETHODIMP CInstance::get_Keyboard(VARIANT vk, BOOL *pVal)
262 if (FAILED(hr = varVk.ChangeType(VT_I2, &vk))) {
265 *pVal = (GetAsyncKeyState(varVk.iVal) & 0x8000) ? VB_TRUE : VB_FALSE;
269 STDMETHODIMP CInstance::get_MousePosX(long *pVal)
282 STDMETHODIMP CInstance::get_MousePosY(long *pVal)
295 STDMETHODIMP CInstance::get_Version(double *pVal)