// \93®\93I\82È\83o\83\8a\83A\83\93\83g\97ñ\8b\93\8c^
template <class T>
-class CComEnumDynaVARIANT :public IEnumVARIANT, public CComObjectRootEx<CComSingleThreadModel>
+class CComEnumDynaVARIANT :public IEnumVARIANT, public CComObjectRootEx < CComSingleThreadModel >
{
public:
BEGIN_COM_MAP(CComEnumDynaVARIANT)
template<class T>
STDMETHODIMP CComEnumDynaVARIANT<T>::Clone(IEnumVARIANT FAR* FAR* ppenum)
{
- CComObject< CComEnumDynaVARIANT<T> >* pClone = NULL;
- pClone->CreateInstance(&pClone);
+ CComObject<CComEnumDynaVARIANT<T>>* pClone = NULL;
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CComEnumDynaVARIANT<T>>::CreateInstance(&pClone))) {
+ return hr;
+ }
pClone->Init(m_pObj, m_current);
- pClone->QueryInterface(IID_IEnumVARIANT, (void**)ppenum);
- return S_OK;
+ return pClone->QueryInterface(IID_IEnumVARIANT, (void**)ppenum);
}
const int MAXBUFSIZ = MAX_PATH * 10;
LPTSTR pStrFileBuf = strFile.GetBufferSetLength(MAXBUFSIZ + 1);
- OPENFILENAME ofn = {0};
+ OPENFILENAME ofn = { 0 };
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.lpstrFilter = szFilter;
ofn.lpstrFile = pStrFileBuf;
put_BrowseForFolderCaption(caption.bstrVal);
}
- BROWSEINFO binfo = {0};
- binfo.hwndOwner = GetMainWindow();
-
ATL::CString szTitle;
{
if (m_bstr_BrowseForFolderCaption.length() > 0) {
szTitle = (LPCWSTR)m_bstr_BrowseForFolderCaption;
- binfo.lpszTitle = szTitle;
}
}
// \83t\83@\83C\83\8b\96¼\82Ì\8eæ\82è\8fo\82µ
szDirName = path.bstrVal;
}
- binfo.pszDisplayName = szDirName.GetBuffer();
}
+ CComBSTR strInitDir(szDirName);
+
+ BROWSEINFO binfo = { 0 };
+ binfo.hwndOwner = GetMainWindow();
+ binfo.pidlRoot = NULL;
+ binfo.lpszTitle = szTitle.IsEmpty() ? NULL : szTitle;
+ binfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_SHAREABLE;
+ // \95K\82¸MAX_PATH\82Ì\83o\83b\83t\83@\82ð\8am\95Û\82·\82é
+ binfo.pszDisplayName = szDirName.GetBufferSetLength(MAX_PATH);
+
int mode = 0;
CComVariant varTmp;
if (SUCCEEDED(varTmp.ChangeType(VT_I4, &varMode))) {
binfo.ulFlags = 0;//BIF_NEWDIALOGSTYLE; // BIF_USENEWUI
switch (mode & 0x0f) {
- case 0:
- default:
+ case 0:
+ default:
binfo.ulFlags |= BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
binfo.lpfn = BrowseCallbackProc;
- binfo.lParam = (LPARAM)(LPCTSTR)szDirName;
+ // BFFM_SETSELECTION\82Å\8f\89\8aú\83t\83H\83\8b\83_\82ð\8ew\92è\82·\82é\8fê\8d\87\81A\83p\83\89\83\81\81[\83^\82Í\8fí\82ÉUNICODE\82Å\82 \82é.
+ binfo.lParam = reinterpret_cast<LPARAM>(static_cast<LPCWSTR>(strInitDir));
break;
- case 1:
+ case 1:
binfo.ulFlags |= BIF_BROWSEFORCOMPUTER;
break;
- case 2:
+ case 2:
binfo.ulFlags |= BIF_BROWSEFORPRINTER;
break;
- case 3:
+ case 3:
binfo.ulFlags |= BIF_RETURNFSANCESTORS;
break;
}
binfo.ulFlags |= BIF_DONTGOBELOWDOMAIN;
}
+ // \83V\83F\83\8b\82Ì\83A\83\8d\83P\81[\83^
+ CComPtr<IMalloc> pMalloc(NULL);
+ HRESULT hr;
+ if (FAILED(hr = SHGetMalloc(&pMalloc))) {
+ return hr;
+ }
+
+ // \83t\83H\83\8b\83_\82Ì\83u\83\89\83E\83Y
LPITEMIDLIST idlst = NULL;
if ((idlst = SHBrowseForFolder(&binfo)) != NULL) {
- IMalloc *pMalloc = NULL;
- HRESULT hr = SHGetMalloc(&pMalloc);
- if (FAILED(hr)) {
- return hr;
- }
+ // \8c\8b\89Ê\83p\83X\82Ì\8eæ\93¾
+ CComVariant tmp(_TEXT("")); // \8eæ\93¾\82Å\82«\82È\82¢\8fê\8d\87\82Í\8bó\95¶\8e\9a
ATL::CString ret;
- LPTSTR pRet = ret.GetBufferSetLength(MAX_PATH);
- SHGetPathFromIDList(idlst, pRet);
+ TCHAR path[MAX_PATH] = { 0 };
+ if (SHGetPathFromIDList(idlst, path)) {
+ tmp = path;
+ }
pMalloc->Free(idlst);
- pMalloc->Release();
-
- CComVariant tmp(pRet);
return tmp.Detach(pvarReturn);
}
return S_OK;
int CALLBACK CCommDialog::BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg) {
- case BFFM_INITIALIZED:
- SendMessage(hwnd, BFFM_SETSELECTION, true, lpData);
+ case BFFM_INITIALIZED:
+ if (lpData) {
+ SendMessage(hwnd, BFFM_SETSELECTION, true, lpData);
+ }
break;
- case BFFM_SELCHANGED:
+
+ case BFFM_SELCHANGED:
{
- TCHAR szBuf[MAX_PATH];
- BOOL bResult = SHGetPathFromIDList((LPITEMIDLIST)lParam, szBuf);
- SendMessage(hwnd, BFFM_ENABLEOK, 0, bResult);
+ LPITEMIDLIST pidl = reinterpret_cast<LPITEMIDLIST>(lParam);
+ BOOL enabled = FALSE;
+ if (pidl) {
+ TCHAR tmp[MAX_PATH];
+ if (SHGetPathFromIDList(pidl, tmp)) {
+ enabled = TRUE;
+ }
+ }
+ SendMessage(hwnd, BFFM_ENABLEOK, 0, enabled);
}
break;
- case BFFM_VALIDATEFAILED:
+
+ case BFFM_VALIDATEFAILED:
break;
}
return 0;
}
// \83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8eæ\93¾
CComVariant tmp;
- if (SUCCEEDED(tmp.ChangeType(VT_UNKNOWN, &varUnk))) {
- return tmp.punkVal->QueryInterface(IID_IOverlappedWindow, (void**)&m_pMainWindow);
+ HRESULT hr;
+ if (FAILED(hr = tmp.ChangeType(VT_UNKNOWN, &varUnk))) {
+ return hr;
}
- return DISP_E_UNKNOWNINTERFACE;
+ return tmp.punkVal->QueryInterface(&m_pMainWindow);
}
STDMETHODIMP CCommDialog::MessageBox(VARIANT mes, VARIANT typ, VARIANT icon, VARIANT* pRet)
}
switch (varType.iVal % 10) {
- case 0:
- default:
+ case 0:
+ default:
mode |= MB_OK;
break;
- case 1:
+ case 1:
mode |= MB_OKCANCEL;
break;
- case 2:
+ case 2:
mode |= MB_YESNO;
break;
- case 3:
+ case 3:
mode |= MB_YESNOCANCEL;
break;
- case 4:
+ case 4:
mode |= MB_RETRYCANCEL;
break;
- case 5:
+ case 5:
mode |= MB_ABORTRETRYIGNORE;
break;
}
if (SUCCEEDED(varIcon.ChangeType(VT_I2, &icon))) {
switch (varIcon.iVal) {
- case 0:
- default:
+ case 0:
+ default:
break;
- case 1:
+ case 1:
mode |= MB_ICONERROR;
break;
- case 2:
+ case 2:
mode |= MB_ICONWARNING;
break;
- case 3:
+ case 3:
mode |= MB_ICONINFORMATION;
break;
- case 4:
+ case 4:
mode |= MB_ICONQUESTION;
break;
}
int md = ::MessageBox(GetMainWindow(), msg, GetMainCaption(), mode);
switch (md) {
- case IDOK:
- case IDYES:
- case IDRETRY:
+ case IDOK:
+ case IDYES:
+ case IDRETRY:
ret = (short)1;
break;
- case IDCANCEL:
- case IDABORT:
+ case IDCANCEL:
+ case IDABORT:
ret = (short)-1;
break;
- case IDNO:
- case IDIGNORE:
+ case IDNO:
+ case IDIGNORE:
ret = (short)0;
break;
}
#include "objectmap.h"
#include "CComEnumDynaVARIANT.h"
-#include <list>
#include <vector>
-using namespace std;
-
/////////////////////////////////////////////////////////////////////////////
// CControl
ret = (short)SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)buf);
}
else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) {
+ // \98A\91z\94z\97ñ\83I\83u\83W\83F\83N\83g\82ð\8dì\90¬\82·\82é
+ CComObject<CObjectMap>* pMap = NULL;
+ if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&pMap))) {
+ return hr;
+ }
+ IUnknown* pMapUnk = NULL;
+ if (FAILED(hr = pMap->QueryInterface(&pMapUnk))) {
+ return hr;
+ }
+
// \83\8a\83X\83g\83{\83b\83N\83X\82É\95¶\8e\9a\97ñ\82ð\92Ç\89Á\82·\82é
int nIdx = SendMessage(m_hWnd, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)buf);
- // \98A\91z\94z\97ñ\83I\83u\83W\83F\83N\83g\82ð\83o\83C\83\93\83h\82·\82é
- CComObject<CObjectMap>* pMap = NULL;
- if (SUCCEEDED(CComObject<CObjectMap>::CreateInstance(&pMap))) {
- IUnknown* pUnk = NULL;
- if (SUCCEEDED(pMap->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
- ::SendMessage(m_hWnd, LB_SETITEMDATA, nIdx, (LPARAM)pUnk);
- }
- }
+ // \83\8a\83X\83g\83{\83b\83N\83X\82Ì\83A\83C\83e\83\80\82É\98A\91z\94z\97ñ\82ð\83o\83C\83\93\83h\82·\82é.
+ ::SendMessage(m_hWnd, LB_SETITEMDATA, nIdx, (LPARAM)pMapUnk);
ret = (short)nIdx;
}
else if (!lstrcmp(m_classname, WC_LISTVIEW)) {
// \98A\91z\94z\97ñ\83I\83u\83W\83F\83N\83g\82ð\83o\83C\83\93\83h\82·\82é
CComObject<CObjectMap>* pMap = NULL;
+ if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&pMap))) {
+ return hr;
+ }
+
IUnknown* pUnk = NULL;
- if (SUCCEEDED(pMap->CreateInstance(&pMap))) {
- pMap->QueryInterface(IID_IUnknown, (void**)&pUnk);
+ if (FAILED(hr = pMap->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
+ return hr;
}
- LVITEM itm = {0};
+
+ LVITEM itm = { 0 };
itm.iItem = nIdx;
itm.mask = LVIF_PARAM;
itm.lParam = (LPARAM)pUnk;
}
else if (!lstrcmp(m_classname, WC_TREEVIEW)) {
// \83c\83\8a\81[\83r\83\85\81[\82Ì\83\8b\81[\83g\82É\83A\83C\83e\83\80\82ð\8dì\90¬\82·\82é
- IUnknown* pUnk = NULL;
- CTreeItem::CreateTreeItem(m_hWnd, TVI_ROOT, buf, &pUnk);
+ CComPtr<IUnknown> pUnk;
+ HRESULT hr;
+ if (FAILED(hr = CTreeItem::CreateTreeItem(m_hWnd, TVI_ROOT, buf, &pUnk))) {
+ return hr;
+ }
if (pUnk != NULL) {
- ret = (IUnknown*)pUnk;
+ ret = pUnk; // pUnk\82ÍVariant\91ã\93ü\8e\9e\82ÉAddRef\82³\82ê\82é\82Ì\82ÅDetach\82Í\95s\97v.
}
}
else {
}
if (pUnk) {
- pUnk->AddRef();
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ CComVariant tmp(pUnk);
+ return tmp.Detach(pVal);
}
return S_OK;
}
HTREEITEM hItem = TreeView_GetSelection(m_hWnd);
if (hItem) {
CComObject<CTreeItem>* pItem = NULL;
- if (SUCCEEDED(pItem->CreateInstance(&pItem))) {
- pItem->AddRef();
- pItem->SetParam(m_hWnd, hItem);
- IUnknown* pUnk = NULL;
- if (SUCCEEDED(pItem->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
- ret = pUnk;
- }
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
}
+
+ IUnknown* pUnk = NULL;
+ if (FAILED(hr = pItem->QueryInterface(&pUnk))) {
+ delete pItem;
+ return hr;
+ }
+
+ //FIXME: \95s\97v\82Ì\82Í\82¸ pItem->AddRef();
+ pItem->SetParam(m_hWnd, hItem);
+ ret = pUnk;
}
}
else {
// \97ñ\8b\93\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\90¶\90¬
CComObject<CComEnumVARIANT>* pCol = NULL;
- if (SUCCEEDED(CComObject<CComEnumVARIANT>::CreateInstance(&pCol))) {
- pCol->AddRef();
- pCol->Init(&varArray[0], &varArray[mx], pCol, AtlFlagCopy);
- *pVal = pCol;
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CComEnumVARIANT>::CreateInstance(&pCol))) {
+ return hr;
}
- return S_OK;
+ pCol->Init(&varArray[0], &varArray[mx], pCol, AtlFlagCopy);
+
+ return pCol->QueryInterface(pVal);
}
}
::VariantInit(pVal);
if (!lstrcmp(m_classname, WC_TREEVIEW)) {
- HTREEITEM hItem = TreeView_GetRoot(m_hWnd);
CComObject<CTreeItem>* pItem = NULL;
- if (SUCCEEDED(pItem->CreateInstance(&pItem))) {
- pItem->AddRef();
- pItem->SetParam(m_hWnd, hItem);
- IUnknown* pUnk = NULL;
- if (SUCCEEDED(pItem->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
- }
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
+ }
+
+ HTREEITEM hItem = TreeView_GetRoot(m_hWnd);
+ pItem->SetParam(m_hWnd, hItem);
+
+ IUnknown* pUnk = NULL;
+ if (FAILED(hr = pItem->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
+ delete pItem;
+ return hr;
}
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk;
}
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// CCanvas
+HRESULT CCanvas::FinalConstruct()
+{
+ // \94h\90¶\8c³\8aÖ\98A
+ m_hParent = NULL;
+
+ // \88ó\8dü\8aÖ\98A
+ m_pPrinterDeviceMode = NULL;
+ m_marginWidth = 150; // 1.5Cm\82Ì\83}\81[\83W\83\93
+ m_marginHeight = 150;
+
+ // \83\8c\83C\83\84\81[\82Ì\8f\89\8aú\89»
+ for (int i = 0; i < MAXLAYER; i++) {
+ m_pComLayer[i] = NULL;
+ }
+ for (int i = 0; i < MAXLAYER; i++) {
+ HRESULT hr = CComObject<CLayer>::CreateInstance(&m_pComLayer[i]);
+ if (FAILED(hr)) {
+ return hr;
+ }
+ m_pComLayer[i]->AddRef();
+ }
+
+ return S_OK;
+}
+
void CCanvas::FinalRelease()
{
ATLTRACE("CCanvas::FinalRelease\r\n");
delete m_pPrinterDeviceMode;
m_pPrinterDeviceMode = NULL;
}
+
// \83\8c\83C\83\84\81[\83I\83u\83W\83F\83N\83g\82Ì\89ð\95ú
- int i;
- for (i = 0; i < MAXLAYER; i++) {
+ for (int i = 0; i < MAXLAYER; i++) {
if (m_pComLayer[i] != NULL) {
m_pComLayer[i]->Release();
m_pComLayer[i] = NULL;
}
}
-STDMETHODIMP CCanvas::InterfaceSupportsErrorInfo(REFIID riid)
-{
- static const IID* arr[] =
- {
- &IID_ICanvas
- };
- for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
- if (IsEqualGUID(*arr[i], riid))
- return S_OK;
- }
- return S_FALSE;
-}
-
STDMETHODIMP CCanvas::get_Layer(VARIANT varLay, VARIANT *pVal)
{
// \83\8c\83C\83\84\81[\83I\83u\83W\83F\83N\83g\82Ì\8eó\82¯\93n\82µ
class ATL_NO_VTABLE CCanvas :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCanvas, &CLSID_Canvas>,
- public ISupportErrorInfo,
+ public ISupportErrorInfoImpl<&IID_ICanvas>,
public IConnectionPointContainerImpl<CCanvas>,
public IDispatchImpl<ICanvas, &IID_ICanvas, &LIBID_SERAPHYSCRIPTTOOLSLib>
{
public:
- CCanvas()
- {
- // \94h\90¶\8c³\8aÖ\98A
- m_hParent = NULL;
- // \88ó\8dü\8aÖ\98A
- m_pPrinterDeviceMode = NULL;
- m_marginWidth = 150; // 1.5Cm\82Ì\83}\81[\83W\83\93
- m_marginHeight = 150;
- // \83\8c\83C\83\84\81[\82Ì\8f\89\8aú\89»
- int i;
- for (i = 0; i < MAXLAYER; i++) {
- if (m_pComLayer[i]->CreateInstance(&m_pComLayer[i]) == S_OK) {
- m_pComLayer[i]->AddRef();
- }
- else {
- // \90¶\90¬\82É\8e¸\94s\81B
- m_pComLayer[i] = NULL;
- }
- }
- }
+ HRESULT FinalConstruct();
+
void CCanvas::FinalRelease();
DECLARE_REGISTRY_RESOURCEID(IDR_CANVAS)
END_CONNECTION_POINT_MAP()
- // ISupportsErrorInfo
- STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
-
// ICanvas
public:
STDMETHOD(LoadPicture)(/*[in]*/VARIANT path,/*[out,retval]*/VARIANT* punkVal);
nID = tmp.iVal;
}
if (nID > 0) {
- list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
+ std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
while (p != m_lstControl.end()) {
if ((*p)->GetID() == nID) {
// \93¯\88êID\82ð\94\8c©\82µ\82½\82Ì\82Å\81A\82±\82ê\82ð\95Ô\82·
m_nControlFontSize = siz;
// \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Î)
- list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
+ std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
while (p != m_lstControl.end()) {
(*p)->SetFont(m_hControlFont);
p++;
STDMETHODIMP CForm::ClearControls()
{
// \83R\83\93\83g\83\8d\81[\83\8b\82ð\82·\82×\82Ä\94j\8aü\82·\82é
- list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
+ std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
while (p != m_lstControl.end()) {
(*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é
(*p)->Release();
// \83C\83\93\83X\83^\83\93\83X\82Ì\90¶\90¬
CComObject<CControl>* pControl = NULL;
- HRESULT hRet = pControl->CreateInstance(&pControl);
- ATLASSERT(hRet == S_OK);
+ HRESULT hRet = CComObject<CControl>::CreateInstance(&pControl);
+ // FIXME: \83G\83\89\81[\82ð\95Ô\82¹\82é\82æ\82¤\82É\82·\82×\82«
+ ATLASSERT(SUCCEEDED(hRet));
// \8eQ\8fÆ\83J\83E\83\93\83g\81A\83|\83C\83\93\83^\82Ì\95Û\91¶
pControl->AddRef();
// \82±\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\96ß\82è\92l\82Æ\82·\82é
IUnknown* pUnk = NULL;
hRet = pControl->QueryInterface(IID_IUnknown, (void**)&pUnk);
- ATLASSERT(hRet == S_OK);
+ ATLASSERT(SUCCEEDED(hRet));
::VariantInit(pvarUnk);
pvarUnk->vt = VT_UNKNOWN;
pvarUnk->punkVal = pUnk;
{
m_hOwner = hOwner;
// \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é
- list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
+ std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
while (p != m_lstControl.end()) {
(*p)->Create(hOwner);
(*p)->SetFont(m_hControlFont);
// \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¢
return;
}
- list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
+ std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
while (p != m_lstControl.end()) {
(*p)->put_Enable(mode);
p++;
{
// pEventName\82Í\8f\89\8aú\89»\82³\82ê\82Ä\82¢\82È\82¢BSTR\82Ö\82Ì\83|\83C\83\93\83^\82ð\93n\82·
// \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é
- list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
+ std::list<CComObject<CControl>*>::iterator p = m_lstControl.begin();
while (p != m_lstControl.end()) {
if ((*p)->GetID() == eventcode) {
(*p)->GetClassEvent(pEventName);
#pragma once
#include <list>
-using namespace std;
#include "resource.h" // \83\81\83C\83\93 \83V\83\93\83{\83\8b
#include "control.h"
/////////////////////////////////////////////////////////////////////////////
// CInstance
-CInstance::CInstance()
+HRESULT CInstance::FinalConstruct()
{
+ HRESULT hr;
+
// \83\81\83C\83\93\83E\83B\83\93\83h\83E\82Ì\90¶\90¬
m_pMainWindow = NULL;
- if (m_pMainWindow->CreateInstance(&m_pMainWindow) == S_OK) {
- m_pMainWindow->AddRef();
- // \83I\81[\83o\81[\83\89\83b\83v\83E\83B\83\93\83h\83E\83\8a\83X\83g\82É\92Ç\89Á
- m_lstOverlappedWnd.push_back(m_pMainWindow);
+ if (FAILED(hr = CComObject<COverlappedWindow>::CreateInstance(&m_pMainWindow))) {
+ ATLASSERT(SUCCEEDED(hr));
+ return hr;
}
+ 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
+
// \83R\83\82\83\93\83_\83C\83A\83\8d\83O\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\90¶\90¬
m_pCommDlg = NULL;
- if (m_pCommDlg->CreateInstance(&m_pCommDlg) == S_OK) {
- m_pCommDlg->AddRef();
- // \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é
- if (m_pMainWindow) {
- IUnknown* pUnk = NULL;
- if (m_pMainWindow->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- CComVariant varUnk(pUnk);
- m_pCommDlg->SetMainWindow(varUnk);
- }
- }
+ if (FAILED(hr = CComObject<CCommDialog>::CreateInstance(&m_pCommDlg))) {
+ ATLASSERT(SUCCEEDED(hr));
+ // \83\81\83C\83\93\83E\83B\83\93\83h\83E\82Í\94j\8aü\82·\82é.
+ m_pMainWindow->Release();
+ return hr;
}
+ m_pCommDlg->AddRef();
+
+ // \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é
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = m_pMainWindow->QueryInterface(&pUnk))) {
+ m_pCommDlg->Release();
+ m_pMainWindow->Release();
+ return hr;
+ }
+
+ CComVariant varUnk(pUnk);
+ m_pCommDlg->SetMainWindow(varUnk);
+
+ // \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
+ m_pMainWindow->AddRef();
+ m_lstOverlappedWnd.push_back(m_pMainWindow);
+
// \83E\83F\83C\83g\83J\81[\83\\83\8b\81E\83J\83E\83\93\83g
m_dWaitCursor = 0;
+
+ return S_OK;
}
void CInstance::FinalRelease()
{
ATLTRACE("CInstance::FinalRelease\r\n");
+
// \83\81\83C\83\93\83E\83B\83\93\83h\83E\82Ì\89ð\95ú
+ ATLTRACE(_TEXT("*refcount=%d\n"), m_pMainWindow->m_dwRef);
if (m_pMainWindow) {
m_pMainWindow->Release();
- m_pMainWindow = NULL;
+ //m_pMainWindow = NULL;
}
+
// \83R\83\82\83\93\83_\83C\83A\83\8d\83O\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\89ð\95ú
+ ATLTRACE(_TEXT("*refcount=%d\n"), m_pMainWindow->m_dwRef);
if (m_pCommDlg) {
m_pCommDlg->Release();
m_pCommDlg = NULL;
}
+
// \83|\83b\83v\83A\83b\83v\83E\83B\83\93\83h\83E\82Ì\89ð\95ú
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
+ ATLTRACE(_TEXT("*refcount=%d\n"), m_pMainWindow->m_dwRef);
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
while (p != m_lstOverlappedWnd.end()) {
(*p)->Close();
(*p)->Release();
STDMETHODIMP CInstance::get_Dialog(VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
// \83R\83\82\83\93\83_\83C\83A\83\8d\83O\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\95Ô\82·
::VariantInit(pVal);
if (m_pCommDlg) {
- IUnknown *pUnk = NULL;
- if (m_pCommDlg->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ HRESULT hr;
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = m_pCommDlg->QueryInterface(&pUnk))) {
+ return hr;
}
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk.Detach();
}
return S_OK;
}
-STDMETHODIMP CInstance::CreateFrame(VARIANT *pvarUnk)
+void CInstance::PurgeUnusedWindows()
{
- ::VariantInit(pvarUnk);
// \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¤
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
while (p != m_lstOverlappedWnd.end()) {
if ((*p)->m_dwRef == 1) {
// \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
BOOL bVisible = false;
- (*p)->get_Visible(&bVisible);
- if (!bVisible) {
+ HRESULT hr = (*p)->get_Visible(&bVisible);
+ if (SUCCEEDED(hr) && !bVisible) {
// \95\\8e¦\82³\82ê\82Ä\82¢\82È\82¯\82ê\82Î\8fÁ\82µ\82Ä\82æ\82µ\81B
(*p)->Release();
p = m_lstOverlappedWnd.erase(p);
}
p++;
}
+}
+
+STDMETHODIMP CInstance::CreateFrame(VARIANT *pvarUnk)
+{
+ if (!pvarUnk) {
+ return E_POINTER;
+ }
+
+ ::VariantInit(pvarUnk);
+
+ // \96¢\8eg\97p\82Ì\83E\83B\83\93\83h\83E\82ð\8dí\8f\9c\82·\82é
+ PurgeUnusedWindows();
+
+ HRESULT hr;
+
// \83E\83B\83\93\83h\83E\82Ì\90¶\90¬
CComObject<COverlappedWindow>* pNewWnd = NULL;
- if (pNewWnd->CreateInstance(&pNewWnd) == S_OK) {
- pNewWnd->AddRef();
- pNewWnd->put_WaitCursor(m_dWaitCursor);
- m_lstOverlappedWnd.push_back(pNewWnd);
- // \83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8eæ\93¾
- IUnknown* pUnk = NULL;
- if (pNewWnd->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pvarUnk->vt = VT_UNKNOWN;
- pvarUnk->punkVal = pUnk;
- }
+ if (FAILED(hr = CComObject<COverlappedWindow>::CreateInstance(&pNewWnd))) {
+ return hr;
+ }
+
+ // \83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8eæ\93¾
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = pNewWnd->QueryInterface(&pUnk))) {
+ delete pNewWnd;
+ return hr;
}
+
+ // \83E\83F\83C\83g\83J\81[\83\\83\8b\8fó\91Ô\82Ì\90Ý\92è
+ pNewWnd->put_WaitCursor(m_dWaitCursor);
+
+ // \8eQ\8fÆ\83J\83E\83\93\83g\82Ì\92Ç\89Á\82¨\82æ\82Ñ
+ // \8aÇ\97\9d\83E\83B\83\93\83h\83E\83\8a\83X\83g\82Ö\82Ì\95Û\91¶
+ pNewWnd->AddRef();
+ m_lstOverlappedWnd.push_back(pNewWnd);
+
+ pvarUnk->vt = VT_UNKNOWN;
+ pvarUnk->punkVal = pUnk.Detach();
return S_OK;
}
STDMETHODIMP CInstance::WaitEvent(VARIANT varTim, VARIANT *pvarUnk)
{
+ if (!pvarUnk) {
+ return E_POINTER;
+ }
+
::VariantInit(pvarUnk);
// \91Ò\8b@\8e\9e\8aÔ\82Ì\8eæ\93¾
DWORD sleeptim = 1000;
// \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é
HANDLE hEvent[MAXIMUM_WAIT_OBJECTS] = {NULL};
HWND hWnd[MAXIMUM_WAIT_OBJECTS] = {NULL};
- CComObject<COverlappedWindow>* pOverlapped[MAXIMUM_WAIT_OBJECTS] = {NULL};
+
+ CComObject<COverlappedWindow>* pOverlapped[MAXIMUM_WAIT_OBJECTS] = {0};
+
int count = 0;
int n = 0;
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
while (p != m_lstOverlappedWnd.end()) {
n = count;
(*p)->SetWaitParam(&count, hWnd, hEvent);
}
p++;
}
+
// \83\81\83b\83Z\81[\83W\83\8b\81[\83v
if (count > 0) {
DWORD ret = pOverlapped[0]->MessageLoop(sleeptim, count, hWnd, hEvent);
if (ret > 0 && ret <= (DWORD)count) {
if (pOverlapped[ret - 1]) {
// OVERLAPPEDWINDOW\83I\83u\83W\83F\83N\83g\82Ö\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\95Ô\82·
- IUnknown* pUnk = NULL;
- if (pOverlapped[ret - 1]->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
+ CComPtr<IUnknown> pUnk;
+ if (SUCCEEDED(pOverlapped[ret - 1]->QueryInterface(&pUnk))) {
pvarUnk->vt = VT_UNKNOWN;
- pvarUnk->punkVal = pUnk;
+ pvarUnk->punkVal = pUnk.Detach();
}
}
}
STDMETHODIMP CInstance::get_MainFrame(VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
::VariantInit(pVal);
if (m_pMainWindow) {
- IUnknown* pUnk = NULL;
- if (m_pMainWindow->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ HRESULT hr;
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = m_pMainWindow->QueryInterface(&pUnk))) {
+ return hr;
}
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk.Detach();
}
return S_OK;
}
STDMETHODIMP CInstance::get_WaitCursor(short *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
*pVal = m_dWaitCursor;
+
return S_OK;
}
STDMETHODIMP CInstance::put_WaitCursor(short newVal)
{
m_dWaitCursor = newVal;
+
// \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é
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstOverlappedWnd.begin();
while (p != m_lstOverlappedWnd.end()) {
(*p)->put_WaitCursor(newVal);
p++;
STDMETHODIMP CInstance::get_Keyboard(VARIANT vk, BOOL *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
+ HRESULT hr;
CComVariant varVk;
- if (varVk.ChangeType(VT_I2, &vk) != S_OK) {
- return DISP_E_TYPEMISMATCH;
+ if (FAILED(hr = varVk.ChangeType(VT_I2, &vk))) {
+ return hr;
}
*pVal = (GetAsyncKeyState(varVk.iVal) & 0x8000) ? VB_TRUE : VB_FALSE;
return S_OK;
STDMETHODIMP CInstance::get_MousePosX(long *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
POINT pt;
::GetCursorPos(&pt);
*pVal = pt.x;
+
return S_OK;
}
STDMETHODIMP CInstance::get_MousePosY(long *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
POINT pt;
::GetCursorPos(&pt);
*pVal = pt.y;
+
return S_OK;
}
STDMETHODIMP CInstance::get_Version(double *pVal)
{
- *pVal = 0.92;
+ if (!pVal) {
+ return E_POINTER;
+ }
+
+ *pVal = 0.93;
+
return S_OK;
}
// CInstance
class ATL_NO_VTABLE CInstance :
public CComObjectRootEx<CComSingleThreadModel>,
- public CStockPropImpl<CInstance, ISeraphyScriptTools_Instance, &IID_ISeraphyScriptTools_Instance, &LIBID_SERAPHYSCRIPTTOOLSLib>,
+ public CComCoClass<CInstance, &CLSID_SeraphyScriptTools_Instance>,
+ public ISupportErrorInfoImpl<&IID_ISeraphyScriptTools_Instance>,
public CComControl<CInstance>,
+ public CStockPropImpl<CInstance, ISeraphyScriptTools_Instance, &IID_ISeraphyScriptTools_Instance, &LIBID_SERAPHYSCRIPTTOOLSLib>,
public IPersistStreamInitImpl<CInstance>,
public IOleControlImpl<CInstance>,
public IOleObjectImpl<CInstance>,
public IOleInPlaceActiveObjectImpl<CInstance>,
public IViewObjectExImpl<CInstance>,
public IOleInPlaceObjectWindowlessImpl<CInstance>,
- public ISupportErrorInfo,
public IConnectionPointContainerImpl<CInstance>,
public IPersistStorageImpl<CInstance>,
public ISpecifyPropertyPagesImpl<CInstance>,
public IQuickActivateImpl<CInstance>,
public IDataObjectImpl<CInstance>,
public IProvideClassInfo2Impl<&CLSID_SeraphyScriptTools_Instance, &DIID__ISeraphyScriptTools_InstanceEvents, &LIBID_SERAPHYSCRIPTTOOLSLib>,
- public IPropertyNotifySinkCP<CInstance>,
- public CComCoClass<CInstance, &CLSID_SeraphyScriptTools_Instance>
+ public IPropertyNotifySinkCP<CInstance>
{
public:
- CInstance();
+ HRESULT FinalConstruct();
void FinalRelease();
DECLARE_REGISTRY_RESOURCEID(IDR_INSTANCE)
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
-
-
- // ISupportsErrorInfo
- STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
- {
- static const IID* arr[] =
- {
- &IID_ISeraphyScriptTools_Instance,
- };
- for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
- if (IsEqualGUID(*arr[i], riid))
- return S_OK;
- }
- return S_FALSE;
- }
-
// IViewObjectEx
DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
STDMETHOD(CreateFrame)(/*[out,retval]*/VARIANT* pvarUnk);
STDMETHOD(get_Dialog)(/*[out, retval]*/ VARIANT *pVal);
+protected:
HRESULT OnDraw(ATL_DRAWINFO& di)
{
RECT& rc = *(RECT*)di.prcBounds;
return S_OK;
}
- CComBSTR m_bstrCaption;
+
+public:
+ CComBSTR m_bstrCaption; // FIXME: protected\82É\82·\82é
+
protected:
- list<CComObject<COverlappedWindow>*> m_lstOverlappedWnd;
- CComObject<CCommDialog>* m_pCommDlg;
- CComObject<COverlappedWindow>* m_pMainWindow;
+ void PurgeUnusedWindows();
+ std::list<CComObject<COverlappedWindow>*> m_lstOverlappedWnd;
+ CComObject<CCommDialog>* m_pCommDlg; //FIXME: CComPtr\82Ö
+ CComObject<COverlappedWindow>* m_pMainWindow; //FIXME: CComPtr\82Ö
int m_dWaitCursor;
};
}
// \95`\89æ\83f\81[\83^
EnterCriticalSection(&m_objDrawingDataProtection);
- list<drawdata*>::iterator p = m_lstDraw.begin();
+ std::list<drawdata*>::iterator p = m_lstDraw.begin();
while (p != m_lstDraw.end()) {
(*p)->Draw(dc);
p++;
{
// \83h\83\8d\81[\83C\83\93\83O\83f\81[\83^\81[\82Ì\94j\8aü
EnterCriticalSection(&m_objDrawingDataProtection);
- list<drawdata*>::iterator p = m_lstDraw.begin();
+ std::list<drawdata*>::iterator p = m_lstDraw.begin();
while (p != m_lstDraw.end()) {
(*p)->Destroy();
p = m_lstDraw.erase(p);
#include "resource.h" // \83\81\83C\83\93 \83V\83\93\83{\83\8b
#include <list>
-using namespace std;
/////////////////////////////////////////////////////////////////////////////
void AddDrawData(drawdata* pDrawData);
protected:
CRITICAL_SECTION m_objDrawingDataProtection;
- list<drawdata*> m_lstDraw;
+ std::list<drawdata*> m_lstDraw;
DWORD m_dwFillColor;
DWORD m_dwFontColor;
DWORD m_dwColor;
#include "profilesection.h"
#include "CComEnumDynaVARIANT.h"
+#include <vector>
+
/////////////////////////////////////////////////////////////////////////////
// CObjectMap
STDMETHODIMP CObjectMap::FindNear(VARIANT key, VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
::VariantInit(pVal);
CComVariant varName;
// \94\8c©\82³\82ê\82½
CComVariant findkey((LPCWSTR)p->first);
findkey.ChangeType(VT_BSTR);
- findkey.Detach(pVal);
+ return findkey.Detach(pVal);
}
- return S_OK;
+ return S_FALSE;
}
STDMETHODIMP CObjectMap::get_NearValue(VARIANT key, VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
::VariantInit(pVal);
CComVariant varName;
VariantMap::iterator p = m_mapVariant.lower_bound(varName.bstrVal);
if (p != m_mapVariant.end()) {
// \94\8c©\82³\82ê\82½
- VariantCopy(pVal, &p->second);
+ return VariantCopy(pVal, &p->second);
}
- return S_OK;
+ return S_FALSE;
}
STDMETHODIMP CObjectMap::get_Value(VARIANT key, VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
::VariantInit(pVal);
CComVariant varName;
VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
if (p != m_mapVariant.end()) {
// \94\8c©\82³\82ê\82½
- VariantCopy(pVal, &p->second);
+ return VariantCopy(pVal, &p->second);
}
- return S_OK;
+
+ // \8c©\82Â\82©\82ç\82È\82©\82Á\82½
+ return S_FALSE;
}
STDMETHODIMP CObjectMap::put_Value(VARIANT key, VARIANT newVal)
VariantMap::iterator p = m_mapVariant.find(varName.bstrVal);
if (p != m_mapVariant.end()) {
// \8aù\91¶
- VariantCopy(&p->second, &newVal);
+ p->second = newVal;
}
else {
// \90V\8bK
- VARIANT tmp;
- ::VariantInit(&tmp);
- VariantCopy(&tmp, &newVal);
- m_mapVariant.insert(pair<_bstr_t, VARIANT>(varName.bstrVal, tmp));
+ m_mapVariant.insert(std::make_pair(varName.bstrVal, newVal));
}
return S_OK;
}
STDMETHODIMP CObjectMap::get_Count(long *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
*pVal = m_mapVariant.size();
return S_OK;
}
//VARIANT\82Ì\83N\83\8a\83A\82Æ\98A\91z\94z\97ñ\82Ì\89ð\95ú
VariantMap::iterator p = m_mapVariant.begin();
while (p != m_mapVariant.end()) {
- ::VariantClear(&p->second);
+ p->second.Clear();
p++;
}
m_mapVariant.clear();
STDMETHODIMP CObjectMap::Duplicate(IUnknown** punkVal)
{
+ if (!punkVal) {
+ return E_POINTER;
+ }
*punkVal = NULL;
+
CComObject<CObjectMap>* pMap = NULL;
- if (pMap->CreateInstance(&pMap) == S_OK) {
- // \8c»\8dÝ\82Ì\83I\83u\83W\83F\83N\83g\82ð\95¡\90»\82·\82é
- VariantMap::iterator p = m_mapVariant.begin();
- while (p != m_mapVariant.end()) {
- CComVariant key((LPCWSTR)p->first);
- key.ChangeType(VT_BSTR);
- pMap->put_Value(key, p->second);
- p++;
- }
- pMap->QueryInterface(IID_IUnknown, (void**)punkVal);
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&pMap))) {
+ return hr;
}
- return S_OK;
+
+ // \8c»\8dÝ\82Ì\83I\83u\83W\83F\83N\83g\82ð\95¡\90»\82·\82é
+ VariantMap::iterator p = m_mapVariant.begin();
+ while (p != m_mapVariant.end()) {
+ CComVariant key(p->first);
+ key.ChangeType(VT_BSTR);
+ pMap->put_Value(key, p->second);
+ p++;
+ }
+
+ return pMap->QueryInterface(punkVal);
}
STDMETHODIMP CObjectMap::CreateMap(IUnknown** punkVal)
{
+ if (!punkVal) {
+ return E_POINTER;
+ }
*punkVal = NULL;
+
CComObject<CObjectMap>* pMap = NULL;
- if (SUCCEEDED(pMap->CreateInstance(&pMap))) {
- return pMap->QueryInterface(IID_IUnknown, (void**)punkVal);
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&pMap))) {
+ return hr;
}
- return E_FAIL;
+
+ return pMap->QueryInterface(punkVal);
}
STDMETHODIMP CObjectMap::get__NewEnum(IUnknown **pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
int mx = m_mapVariant.size();
- VARIANT* pvarArray = new VARIANT[mx + 1];
+ std::vector<CComVariant> pvarArray;
+ pvarArray.resize(mx + 1);
+
// \8ai\94[\82³\82ê\82Ä\82¢\82é\96¼\91O\82Ì\97ñ\8b\93
VariantMap::iterator p = m_mapVariant.begin();
int i = 0;
while (p != m_mapVariant.end()) {
- ::VariantInit(&pvarArray[i]);
- pvarArray[i].vt = VT_BSTR;
- pvarArray[i].bstrVal = SysAllocString(p->first);
+ pvarArray[i] = p->first;
p++;
i++;
}
+
// \97ñ\8b\93\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\90¶\90¬
+ HRESULT hr;
CComObject<CComEnumVARIANT>* pCol = NULL;
- if (pCol->CreateInstance(&pCol) == S_OK) {
- pCol->AddRef();
- pCol->Init(&pvarArray[0], &pvarArray[mx], pCol, AtlFlagCopy);
- *pVal = pCol;
- }
- // \8am\95Û\82µ\82½\83o\83\8a\83A\83\93\83g\82Ì\94j\8aü(\83\8a\83\8a\81[\83X\82ð\8ds\82¤\95K\97v\82 \82è)
- i = 0;
- while (i < mx) {
- ::VariantClear(&pvarArray[i++]);
+ if (FAILED(hr = CComObject<CComEnumVARIANT>::CreateInstance(&pCol))) {
+ return hr;
}
- delete[]pvarArray;
- return S_OK;
+ pCol->Init(&pvarArray[0], &pvarArray[mx], pCol, AtlFlagCopy);
+
+ return pCol->QueryInterface(pVal);
}
STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVal)
{
CComVariant varText, varEnv, varResult;
- if (varText.ChangeType(VT_BSTR, &text) != S_OK) {
- return DISP_E_TYPEMISMATCH;
+
+ HRESULT hr;
+ if (FAILED(hr = varText.ChangeType(VT_BSTR, &text))) {
+ return hr;
}
+
// \8aÂ\8b«\95Ï\90\94\82ð\93W\8aJ\82·\82é\82©?
BOOL bEnv = false;
- if (varEnv.ChangeType(VT_I2, &env) == S_OK) {
+ if (SUCCEEDED(varEnv.ChangeType(VT_I2, &env))) {
bEnv = varEnv.iVal;
}
+
// \83t\83F\81[\83Y1 : \8aÜ\82Ü\82ê\82é\95Ï\90\94\82ð\92²\8d¸\82µ\82Ä\95K\97v\82È\83o\83b\83t\83@\83T\83C\83Y\82ð\8b\81\82ß\82é
// \83t\83F\81[\83Y2 ; \8eÀ\8dÛ\82É\93W\8aJ\82·\82é
DWORD expandsize = 0;
if (p != m_mapVariant.end()) {
// \94\8c©\82³\82ê\82½
CComVariant tmp;
- if (tmp.ChangeType(VT_BSTR, &p->second) == S_OK) {
+ if (SUCCEEDED(tmp.ChangeType(VT_BSTR, &p->second))) {
if (phase == 0) {
// \83t\83F\81[\83Y1\82Í\83T\83C\83Y\82ð\83J\83E\83\93\83g\82·\82é\82¾\82¯
expandsize += SysStringLen(tmp.bstrVal);
else {
// \83t\83F\81[\83Y2\82Í\8c»\8dÝ\88Ê\92u\82É\95Ï\90\94\82ð\93W\8aJ\82·\82é
UINT len = SysStringLen(tmp.bstrVal);
- UINT i;
- for (i = 0; i < len; i++) {
+ for (UINT i = 0; i < len; i++) {
pExpandBuffer[writeidx++] = tmp.bstrVal[i];
}
}
// \83t\83F\81[\83Y2\82ª\8fI\97¹\82µ\82½\82Ì\82Å\92u\8a·\82ª\8a®\97¹\82µ\82½
pExpandBuffer[writeidx] = 0;
varResult = (LPCWSTR)pExpandBuffer;
- delete[]pExpandBuffer;
+ delete[] pExpandBuffer;
}
}
varResult.Detach(pVal);
while (idx <= mx) {
CComVariant varKey, varVal;
if (SafeArrayGetElement(varArray.parray, &idx, &varKey) == S_OK) {
- if (pSection->get_Value(varKey, &varVal) == S_OK) {
+ if (SUCCEEDED(pSection->get_Value(varKey, &varVal))) {
put_Value(varKey, varVal);
}
}
#include "resource.h" // \83\81\83C\83\93 \83V\83\93\83{\83\8b
#include <map>
#include <string>
-using namespace std;
-typedef map<_bstr_t, VARIANT> VariantMap;
+typedef std::map<CComBSTR, CComVariant> VariantMap;
/////////////////////////////////////////////////////////////////////////////
// CObjectMap
public IDispatchImpl<IObjectMap, &IID_IObjectMap, &LIBID_SERAPHYSCRIPTTOOLSLib>
{
public:
- CObjectMap()
- {
- }
+ CObjectMap() {}
+
void FinalRelease()
{
Clear();
STDMETHODIMP CObjectVector::CreateVector(IUnknown **punkVal)
{
+ if (!punkVal) {
+ return E_POINTER;
+ }
*punkVal = NULL;
+
CComObject<CObjectVector>* pVct = NULL;
- if (SUCCEEDED(pVct->CreateInstance(&pVct))) {
- pVct->QueryInterface(IID_IUnknown, (void**)punkVal);
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CObjectVector>::CreateInstance(&pVct))) {
+ return hr;
}
- return S_OK;
+
+ return pVct->QueryInterface(punkVal);
}
STDMETHODIMP CObjectVector::Duplicate(VARIANT idx, VARIANT count, IUnknown **punkVal)
{
+ if (!punkVal) {
+ return E_POINTER;
+ }
*punkVal = NULL;
+
CComObject<CObjectVector>* pVct = NULL;
- if (SUCCEEDED(pVct->CreateInstance(&pVct))) {
- pVct->QueryInterface(IID_IUnknown, (void**)punkVal);
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CObjectVector>::CreateInstance(&pVct))) {
+ return hr;
+ }
+ if (FAILED(hr = pVct->QueryInterface(punkVal))) {
+ return hr;
}
if (!m_vctVariant.empty()) {
}
if (nIdx < mx) {
- long i;
- for (i = 0; i < nCount; i++) {
- VARIANT tmp;
- ::VariantInit(&tmp);
- ::VariantCopy(&tmp, &m_vctVariant.at(nIdx + i));
- pVct->m_vctVariant.push_back(tmp);
+ for (long i = 0; i < nCount; i++) {
+ pVct->m_vctVariant.push_back(m_vctVariant[nIdx + i]);
}
}
}
//VARIANT\82Ì\83N\83\8a\83A\82Æ\98A\91z\94z\97ñ\82Ì\89ð\95ú
VariantVector::iterator p = m_vctVariant.begin();
while (p != m_vctVariant.end()) {
- ::VariantClear(&*p);
+ p->Clear();
p++;
}
m_vctVariant.clear();
STDMETHODIMP CObjectVector::Push(VARIANT newVal)
{
// \96\96\94ö\82É\92Ç\89Á
- VARIANT tmp;
- ::VariantInit(&tmp);
- ::VariantCopy(&tmp, &newVal);
- m_vctVariant.push_back(tmp);
+ m_vctVariant.push_back(newVal);
return S_OK;
}
if (!m_vctVariant.empty()) {
long mx = m_vctVariant.size();
::VariantInit(pVal);
- ::VariantCopy(pVal, &m_vctVariant.at(mx - 1));
+ ::VariantCopy(pVal, &m_vctVariant[mx - 1]);
m_vctVariant.pop_back();
}
return S_OK;
return DISP_E_BADINDEX;
}
- VARIANT tmp;
- ::VariantInit(&tmp);
- ::VariantCopy(&tmp, &newVal);
- m_vctVariant.insert(m_vctVariant.begin() + nIdx, tmp);
+ m_vctVariant.insert(m_vctVariant.begin() + nIdx, newVal);
return S_OK;
}
long mx = m_vctVariant.size();
if (nIdx < mx) {
// \83x\83N\83^\81[\82Ì\94Í\88Í\93à\82È\82ç\92l\82ð\8eæ\93¾\82·\82é
- ::VariantCopy(pVal, &m_vctVariant.at(nIdx));
+ ::VariantCopy(pVal, &m_vctVariant[nIdx]);
}
return S_OK;
}
{
typedef CComEnumDynaVARIANT<CObjectVector> CComEnumDynaVector;
CComObject<CComEnumDynaVector>* pDyna = NULL;
- if (SUCCEEDED(pDyna->CreateInstance(&pDyna))) {
- pDyna->Init(this, 0);
- pDyna->QueryInterface(IID_IEnumVARIANT, (void**)pVal);
+ HRESULT hr;
+ if (FAILED(hr = CComObject<CComEnumDynaVector>::CreateInstance(&pDyna))) {
+ return hr;
}
- return S_OK;
+ pDyna->Init(this, 0);
+ return pDyna->QueryInterface(IID_IEnumVARIANT, (void**)pVal);
}
STDMETHODIMP CObjectVector::Merge(VARIANT unkVal)
#include "resource.h" // \83\81\83C\83\93 \83V\83\93\83{\83\8b
#include <vector>
-using namespace std;
-typedef vector<VARIANT> VariantVector;
+typedef std::vector<CComVariant> VariantVector;
/////////////////////////////////////////////////////////////////////////////
// CObjectVector
// COverlappedWindow
-COverlappedWindow::COverlappedWindow()
+HRESULT COverlappedWindow::FinalConstruct()
{
m_pUnkMarshaler = NULL;
m_bDefaultAction = true; // \83f\83B\83t\83H\83\8b\83g\82ÌOK/CANCEL\83A\83N\83V\83\87\83\93\82Å\95Â\82¶\82é
// \83t\83H\81[\83\80\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8dì\90¬
- m_pForm = NULL;
m_hLastFocusControl = NULL;
- if (m_pForm->CreateInstance(&m_pForm) == S_OK) {
- m_pForm->AddRef();
- m_pForm->SetWindowSize(windowParam.width, windowParam.height,
- windowParam.GetStyle(), windowParam.exstyle);
+
+
+ HRESULT hr;
+
+ // \83t\83H\81[\83\80\83I\83u\83W\83F\83N\83g\82Ì\90¶\90¬
+ m_pForm = NULL;
+ if (FAILED(hr = CComObject<CForm>::CreateInstance(&m_pForm))) {
+ return hr;
}
- // \95`\89æ\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\90¶\90¬
+ m_pForm->AddRef();
+ m_pForm->SetWindowSize(windowParam.width, windowParam.height,
+ windowParam.GetStyle(), windowParam.exstyle);
+
+ // \95`\89æ\83I\83u\83W\83F\83N\83g\82Ì\90¶\90¬
m_pCanvas = NULL;
- if (m_pCanvas->CreateInstance(&m_pCanvas) == S_OK) {
- m_pCanvas->AddRef();
+ if (FAILED(hr = CComObject<CCanvas>::CreateInstance(&m_pCanvas))) {
+ return hr;
}
- // \83\86\81[\83U\81[\92è\8b`\98A\91z\94z\97ñ\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\90¶\90¬
+ m_pCanvas->AddRef();
+
+ // \83\86\81[\83U\81[\92è\8b`\98A\91z\94z\97ñ\83I\83u\83W\83F\83N\83g\82Ì\90¶\90¬
m_pObject = NULL;
- if (m_pObject->CreateInstance(&m_pObject) == S_OK) {
- m_pObject->AddRef();
+ if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&m_pObject))) {
+ return hr;
}
+ m_pObject->AddRef();
+
// \83E\83F\83C\83g\83J\81[\83\\83\8b\82Ì\8f\89\8aú\89»
m_dWaitCursor = 0;
-}
-HRESULT COverlappedWindow::FinalConstruct()
-{
+ // \8fW\96ñ\82Ì\82½\82ß\82Ì\83t\83\8a\81[\83X\83\8c\83b\83h\83}\81[\83V\83\83\83\89\82Ì\90Ý\92è
return CoCreateFreeThreadedMarshaler(
GetControllingUnknown(), &m_pUnkMarshaler.p);
}
::DestroyIcon(m_hIcon);
}
// \83`\83\83\83C\83\8b\83h\83|\83b\83v\83A\83b\83v\82Ì\94j\8aü
- list<CComObject<COverlappedWindow>*>::iterator pWnd = m_lstChild.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator pWnd = m_lstChild.begin();
while (pWnd != m_lstChild.end()) {
(*pWnd)->Close();
(*pWnd)->Release();
EnterCriticalSection(&m_objEventDataProtection);
// \83C\83x\83\93\83g\83f\81[\83^\82Ì\89ð\95ú
- list<CComObject<CEvent>*>::iterator pEv = m_lstEvent.begin();
+ std::list<CComObject<CEvent>*>::iterator pEv = m_lstEvent.begin();
while (pEv != m_lstEvent.end()) {
(*pEv)->Release();
pEv = m_lstEvent.erase(pEv);
}
m_pEvent = pEv;
m_pEvent->AddRef();
+
// \82±\82Ì\83I\83u\83W\83F\83N\83g\82ð\88ø\90\94\82Æ\82µ\82Ä\93n\82·\82½\82ß\82É\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\90¶\90¬\82·\82é
- IUnknown* pUnk = NULL;
- QueryInterface(IID_IUnknown, (void**)&pUnk);
+ CComPtr<IUnknown> pUnk;
+ HRESULT hr;
+ if (FAILED(hr = QueryInterface(IID_IUnknown, (void**) &pUnk))) {
+ return hr;
+ }
+
// \83C\83x\83\93\83g\82É\91Î\82·\82é\83\89\83C\83Y
switch (pEv->GetMessage()) {
case WM_KEYDOWN:
}
// \83\81\83j\83\85\81[\82Ì\8c\9f\8dõ
if (m_hMenu && nID >= 100) {
- map<int, CComBSTR>::iterator p = m_cMenuMap.find(nID);
+ std::map<int, CComBSTR>::iterator p = m_cMenuMap.find(nID);
if (p != m_cMenuMap.end()) {
// \94\8c©\82³\82ê\82½
ClassObjectInvoke(p->second);
}
// \82±\82Ì\88ø\90\94\82Æ\82µ\82Ä\93n\82µ\82½\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\89ð\95ú\82·\82é
if (pUnk) {
- pUnk->Release();
+ pUnk.Release();
}
}
// \8f\88\97\9d\82³\82ê\82½\83C\83x\83\93\83g\82Í\89ð\95ú\82·\82é
// \83C\83x\83\93\83g\83o\83b\83t\83@\82É\96¢\8f\88\97\9d\82Ì\83C\83x\83\93\83g\82ª\82 \82ê\82Î\83C\83x\83\93\83g\82ð\94\8ds\82µ\82È\82¢\81B
BOOL bFind = false;
EnterCriticalSection(&m_objEventDataProtection);
- list<CComObject<CEvent>*>::iterator p = m_lstEvent.begin();
+ std::list<CComObject<CEvent>*>::iterator p = m_lstEvent.begin();
while (p != m_lstEvent.end()) {
if ((*p)->GetMessage() == message && (*p)->GetParam() == wParam) {
bFind = true;
// \83C\83x\83\93\83g\82Ì\90Ï\82Ý\8fã\82°
EnterCriticalSection(&m_objEventDataProtection);
- CComObject<CEvent>* pEvent;
- if (pEvent->CreateInstance(&pEvent) == S_OK) {
+ CComObject<CEvent>* pEvent = NULL;
+ HRESULT hr;
+ if (SUCCEEDED(hr = CComObject<CEvent>::CreateInstance(&pEvent))) {
pEvent->AddRef();
pEvent->SetData(message, wParam, lParam, pt, lp);
m_lstEvent.push_back(pEvent);
}
+ ATLASSERT(SUCCEEDED(hr));
+
LeaveCriticalSection(&m_objEventDataProtection);
// \83C\83x\83\93\83g\83n\83\93\83h\83\8b\82ð\83V\83O\83i\83\8b\82É\82·\82é
STDMETHODIMP COverlappedWindow::Close()
{
// \83`\83\83\83C\83\8b\83h\82ð\8e\9d\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\81A\83`\83\83\83C\83\8b\83h\82à\83N\83\8d\81[\83Y\82·\82é
- list<CComObject<COverlappedWindow>*>::iterator pWnd = m_lstChild.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator pWnd = m_lstChild.begin();
while (pWnd != m_lstChild.end()) {
(*pWnd)->Close();
pWnd++;
while (*p && *p != ',' && *p != '/' && *p != ':') {
p = CharNext(p);
}
+
ZeroMemory(menuname, MAX_PATH);
int menunameLen = p - st;
if (menunameLen > 0) {
_tcsncpy_s(menuname, MAX_PATH, st, menunameLen);
}
+
// \83R\83}\83\93\83h\83Z\83p\83\8c\81[\83^\81[\82ð\8c\9f\8d¸\82·\82é
CComBSTR eventname;
LPTSTR findcmd = _tcschr(menuname, _TEXT('@'));
if (findcmd) {
*findcmd = 0;
eventname = findcmd + 1;
- }
- else {
+
+ } else {
TCHAR tmp[64];
wsprintf(tmp, _TEXT("OnMenu%d"), lv1 * 100 + cmd);
eventname = tmp;
}
- m_cMenuMap.insert(std::pair<int, CComBSTR>(lv1 * 100 + cmd, eventname));
+ m_cMenuMap.insert(std::make_pair(lv1 * 100 + cmd, eventname));
+
// \83\81\83j\83\85\81[\82Ì\8dì\90¬
MENUITEMINFO inf = {0};
inf.cbSize = sizeof(MENUITEMINFO);
InsertMenuItem(hPopupMenu, lv2, true, &inf);
lv2++;
cmd++;
+
// \83Z\83p\83\8c\81[\83^\81[\82Ì\8ew\92è\82©?
if (*p == ',') {
p++;
- }
- else if (*p == ':') {
+
+ } else if (*p == ':') {
MENUITEMINFO inf = {0};
inf.cbSize = sizeof(MENUITEMINFO);
inf.fMask = MIIM_TYPE;
inf.cbSize = sizeof(MENUITEMINFO);
inf.fMask = MIIM_TYPE | MIIM_ID;
inf.fType = MFT_STRING;
+
if (nCommand != 0) {
inf.wID = nCommand + cmd;
- }
- else {
+
+ } else {
// \83R\83}\83\93\83h\83x\81[\83X\82ª0\82È\82ç\82Î\83R\83}\83\93\83h\83C\83x\83\93\83g\82Í\94\90¶\82³\82¹\82È\82¢\81B
// TrackPopupMenu\82Í\83R\83}\83\93\83h\82ð\91I\91ð\82µ\82È\82©\82Á\82½\8fê\8d\87\82Í0\82ð\95Ô\82·\82½\82ß\81A0\82æ\82è\82à\91å\82«\82È\92l\82É\82·\82é\95K\97v\82ª\82 \82é\81B
inf.wID = nCommand + cmd + 1;
}
+
inf.dwTypeData = menuname;
InsertMenuItem(hPopupMenu, lv, true, &inf);
lv++;
cmd++;
+
if (*p == ',' || *p == '/') {
p++;
- }
- else if (*p == ':') {
+
+ } else if (*p == ':') {
inf.fMask = MIIM_TYPE;
inf.fType = MFT_SEPARATOR;
InsertMenuItem(hPopupMenu, lv, true, &inf);
HIWORD(pos),
m_hPopupWnd,
NULL);
+
DestroyMenu(hPopupMenu);
}
varRet.Detach(pRet);
STDMETHODIMP COverlappedWindow::GetSysColor(VARIANT typ, VARIANT *col)
{
+ if (!col) {
+ return E_POINTER;
+ }
+ VariantInit(col);
+
// \83V\83X\83e\83\80\83J\83\89\81[\82Ì\8eæ\93¾
+ HRESULT hr;
+
CComVariant varType;
+ if (FAILED(hr = varType.ChangeType(VT_I2, &typ))) {
+ return hr;
+ }
+
CComVariant varRet;
- varType.ChangeType(VT_I2, &typ);
varRet = (long)::GetSysColor(varType.iVal);
- varRet.Detach(col);
- return S_OK;
+ return varRet.Detach(col);
}
STDMETHODIMP COverlappedWindow::SetTimer(VARIANT tim, BOOL* pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
SafeCreateWnd();
- CComVariant varTim;
long timer = 0;
- if (varTim.ChangeType(VT_I4, &tim) == S_OK) {
+
+ CComVariant varTim;
+ if (SUCCEEDED(varTim.ChangeType(VT_I4, &tim))) {
timer = varTim.lVal;
}
+
if (timer) {
*pVal = ::SetTimer(m_hPopupWnd, 1, timer, NULL) ? VB_TRUE : VB_FALSE;
- }
- else {
+
+ } else {
*pVal = ::KillTimer(m_hPopupWnd, 1) ? VB_TRUE : VB_FALSE;
}
return S_OK;
if (!m_hMenu) {
return Error(IDS_ERR_NOCREATEMENU);
}
+
int nCmd = 0;
- int nMode = 0;
- CComVariant varCmd, varMode;
- if (varCmd.ChangeType(VT_I2, &cmd) == S_OK) {
+ CComVariant varCmd;
+ if (SUCCEEDED(varCmd.ChangeType(VT_I2, &cmd))) {
nCmd = varCmd.iVal;
}
- if (varMode.ChangeType(VT_I2, &mode) == S_OK) {
+
+ int nMode = 0;
+ CComVariant varMode;
+ if (SUCCEEDED(varMode.ChangeType(VT_I2, &mode))) {
nMode = varMode.iVal;
}
+
if (nCmd >= 100) {
// \83\81\83j\83\85\81[\83R\83}\83\93\83h\82Í100\88È\8fã\82Å\82 \82é\82Ì\82Å\81B
MENUITEMINFO inf = {0};
inf.fState = nMode ? MFS_CHECKED : MFS_UNCHECKED;
::SetMenuItemInfo(m_hMenu, nCmd, false, &inf);
}
+
return S_OK;
}
if (!m_hMenu) {
return Error(IDS_ERR_NOCREATEMENU);
}
+
int nCmd = 0;
- int nMode = 0;
- CComVariant varCmd, varMode;
- if (varCmd.ChangeType(VT_I2, &cmd) == S_OK) {
+ CComVariant varCmd;
+ if (SUCCEEDED(varCmd.ChangeType(VT_I2, &cmd))) {
nCmd = varCmd.iVal;
}
- if (varMode.ChangeType(VT_I2, &mode) == S_OK) {
+
+ int nMode = 0;
+ CComVariant varMode;
+ if (SUCCEEDED(varMode.ChangeType(VT_I2, &mode))) {
nMode = varMode.iVal;
}
+
if (nCmd >= 100) {
// \83\81\83j\83\85\81[\83R\83}\83\93\83h\82Í100\88È\8fã\82Å\82 \82é\82Ì\82Å\81B
MENUITEMINFO inf = {0};
STDMETHODIMP COverlappedWindow::get_CreateNoCloseWindow(BOOL *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
// \83N\83\8d\81[\83Y\8bÖ\8e~\83E\83B\83\93\83h\83E?
*pVal = windowParam.noclose ? VB_TRUE : VB_FALSE;
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_Canvas(VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
// \83h\83\8d\81[\83C\83\93\83O\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\93n\82·
::VariantInit(pVal);
- IUnknown* pUnk = NULL;
- if (m_pCanvas &&
- m_pCanvas->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
+
+ if (m_pCanvas) {
+ HRESULT hr;
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = m_pCanvas->QueryInterface(&pUnk))) {
+ return hr;
+ }
pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ pVal->punkVal = pUnk.Detach();
}
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_Event(VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
::VariantInit(pVal);
+
if (m_pEvent) {
// \83C\83x\83\93\83g\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8eæ\93¾
- IUnknown* pUnk = NULL;
- if (m_pEvent->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ HRESULT hr;
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = m_pEvent->QueryInterface(&pUnk))) {
+ return hr;
}
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk.Detach();
}
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_DropFiles(VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
m_dropfiles.GetPathArray(pVal);
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_Quit(BOOL *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
*pVal = m_bQuit ? VB_TRUE : VB_FALSE;
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_Form(VARIANT *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
// \83t\83H\81[\83\80\82Ì\8cö\8aJ
::VariantInit(pVal);
+
if (m_pForm) {
- IUnknown* pUnk = NULL;
- if (m_pForm->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ HRESULT hr;
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = m_pForm->QueryInterface(&pUnk))) {
+ return hr;
}
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk.Detach();
}
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_Style(long *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
if (m_hPopupWnd) {
windowParam.style = ::GetWindowLong(m_hPopupWnd, GWL_STYLE);
}
+
*pVal = (long)windowParam.style;
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_WindowClassName(BSTR *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
CComBSTR tmp(windowParam.szClassName);
*pVal = tmp.Detach();
return S_OK;
void COverlappedWindow::CreateThisInterface(VARIANT* pvarUnk)
{
+ ATLASSERT(pvarUnk != NULL);
+
// \82±\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X\82ð\95Ô\82·
::VariantInit(pvarUnk);
- IUnknown* pUnk = NULL;
- if (QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pvarUnk->vt = VT_UNKNOWN;
- pvarUnk->punkVal = pUnk;
- }
+
+ CComPtr<IUnknown> pUnk;
+ HRESULT hr = QueryInterface(IID_IUnknown, (void**)&pUnk);
+ ATLASSERT(SUCCEEDED(hr));
+
+ pvarUnk->vt = VT_UNKNOWN;
+ pvarUnk->punkVal = pUnk.Detach();
}
STDMETHODIMP COverlappedWindow::SetWindowStyle(VARIANT frametype, VARIANT caption_system, VARIANT maxmin, VARIANT *pvarUnk)
return S_OK;
}
-STDMETHODIMP COverlappedWindow::CreateChild(VARIANT *pvarUnk)
+void COverlappedWindow::PurgeUnusedWindows()
{
- SafeCreateWnd();
- ::VariantInit(pvarUnk);
// \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¤
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstChild.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstChild.begin();
while (p != m_lstChild.end()) {
DWORD refCount = (*p)->m_dwRef;
if ((*p)->m_dwRef == 1) {
}
p++;
}
- //
+}
+
+
+STDMETHODIMP COverlappedWindow::CreateChild(VARIANT *pvarUnk)
+{
+ if (!pvarUnk) {
+ return E_POINTER;
+ }
+
+ SafeCreateWnd();
+ ::VariantInit(pvarUnk);
+
+ // \96¢\8eg\97p\82Ì\83E\83B\83\93\83h\83E\82ð\8dí\8f\9c\82·\82é
+ PurgeUnusedWindows();
+
+ // \83I\83u\83W\83F\83N\83g\82Ì\8dì\90¬
CComObject<COverlappedWindow>* pChild = NULL;
- if (pChild->CreateInstance(&pChild) == S_OK) {
- pChild->AddRef();
- pChild->SetParent(m_hPopupWnd);
- pChild->put_WaitCursor(m_dWaitCursor);
- m_lstChild.push_back(pChild);
- // \83C\83\93\83^\81[\83t\83F\83C\83X\82ð\95Ô\82·
- IUnknown* pUnk = NULL;
- if (pChild->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pvarUnk->vt = VT_UNKNOWN;
- pvarUnk->punkVal = pUnk;
- }
+ HRESULT hr;
+ if (FAILED(hr = CComObject<COverlappedWindow>::CreateInstance(&pChild))) {
+ return hr;
}
+
+ // \95Ô\8bp\97p\83C\83\93\83^\81[\83t\83F\83C\83X\82Ì\8eæ\93¾
+ CComPtr<IUnknown> pUnk;
+ if (FAILED(hr = pChild->QueryInterface(&pUnk))) {
+ delete pChild;
+ return hr;
+ }
+
+ pChild->SetParent(m_hPopupWnd);
+ pChild->put_WaitCursor(m_dWaitCursor);
+
+ // \83\8a\83X\83g\82É\95Û\91¶\82·\82é\82½\82ß\8eQ\8fÆ\83J\83E\83\93\83g+1\82·\82é.
+ pChild->AddRef();
+ m_lstChild.push_back(pChild);
+
+ // \83C\83\93\83^\81[\83t\83F\83C\83X\82ð\95Ô\82·
+ pvarUnk->vt = VT_UNKNOWN;
+ pvarUnk->punkVal = pUnk.Detach();
return S_OK;
}
hWnd[*count] = m_hPopupWnd;
(*count)++;
// \83`\83\83\83C\83\8b\83h\82ð\93o\98^
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstChild.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstChild.begin();
while ((p != m_lstChild.end()) && (*count < MAXIMUM_WAIT_OBJECTS)) {
// \83`\83\83\83C\83\8b\83h\82ª\8f\8a\97L\82·\82é\83`\83\83\83C\83\8b\83h\82ð\8dÄ\8bN\93I\82É\8cÄ\82Ñ\8fo\82·
(*p)->SetWaitParam(count, hWnd, hEvent);
return S_OK;
}
-void COverlappedWindow::CreateWindowList(list<HWND>& lstWnd, BOOL bSearchRoot)
+void COverlappedWindow::CreateWindowList(std::list<HWND>& lstWnd, BOOL bSearchRoot)
{
HWND* hWnds = NULL;
if (m_hParentWnd && bSearchRoot) {
}
else {
// \82±\82±\82ª\8dª\8c³\82Å\82 \82é
- list<CComObject<COverlappedWindow>*>::iterator p = m_lstChild.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator p = m_lstChild.begin();
DWORD stl = ::GetWindowLong(m_hPopupWnd, GWL_STYLE);
if (stl & WS_VISIBLE) {
// \95\\8e¦\82³\82ê\82Ä\82¢\82é\83E\83B\83\93\83h\83E\82Ì\82Ý\82ð\93o\98^\82·\82é
void COverlappedWindow::MoveNextOverlapped()
{
// \8f\87\8f\98\83\8a\83X\83g\82Ì\90¶\90¬\82ð\88Ë\97\8a\82·\82é
- list<HWND>lstWnd;
+ std::list<HWND>lstWnd;
CreateWindowList(lstWnd, true);
// \8c»\8dÝ\88Ê\92u\82ð\94c\88¬\82·\82é
HWND hActiveWnd = ::GetActiveWindow();
- list<HWND>::iterator p = lstWnd.begin();
+ std::list<HWND>::iterator p = lstWnd.begin();
while (p != lstWnd.end()) {
// \97ñ\8b\93
if (hActiveWnd == *p) {
::SendMessage(m_hPopupWnd, WM_SETCURSOR, (WPARAM)m_hPopupWnd, 0);
}
// \83`\83\83\83C\83\8b\83h\82ð\8e\9d\82Á\82Ä\82¢\82é\8fê\8d\87\82Í\81A\83`\83\83\83C\83\8b\83h\82É\82à\83E\83F\83C\83g\83J\81[\83\\83\8b\82ð\93K\97p\82·\82é
- list<CComObject<COverlappedWindow>*>::iterator pWnd = m_lstChild.begin();
+ std::list<CComObject<COverlappedWindow>*>::iterator pWnd = m_lstChild.begin();
while (pWnd != m_lstChild.end()) {
(*pWnd)->put_WaitCursor(newVal);
pWnd++;
if (m_hParentWnd) {
// \90e\83E\83B\83\93\83h\83E\82ª\82 \82ê\82Î\81A\82»\82Ì\92\86\89\9b\82É\88Ê\92u\82 \82í\82¹\82·\82é
::GetWindowRect(m_hParentWnd, &rct);
- }
- else {
+
+ } else {
HWND hwnd = ::GetDesktopWindow();
if (!hwnd) {
return S_OK;
}
::GetWindowRect(hwnd, &rct);
}
+
int x = rct.left + (rct.right - rct.left) / 2 - windowParam.width / 2;
int y = rct.top + (rct.bottom - rct.top) / 2 - windowParam.height / 2;
WINDOWPLACEMENT pls = {0};
pls.rcNormalPosition.bottom = y + windowParam.height;
pls.rcNormalPosition.right = x + windowParam.width;
::SetWindowPlacement(m_hPopupWnd, &pls);
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_ClassObject(VARIANT* pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
::VariantInit(pVal);
if (m_pClassDisp) {
- m_pClassDisp->AddRef();
- pVal->pdispVal = m_pClassDisp;
- pVal->vt = VT_UNKNOWN;
+ CComVariant tmp(m_pClassDisp);
+ return tmp.Detach(pVal);
}
return S_OK;
}
{
if (m_pClassDisp) {
m_pClassDisp->Release();
+ m_pClassDisp = NULL;
}
+
if (newVal.vt == VT_DISPATCH) {
m_pClassDisp = newVal.pdispVal;
m_pClassDisp->AddRef();
STDMETHODIMP COverlappedWindow::get_innerHeight(double *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
SafeCreateWnd();
RECT rct;
::GetClientRect(m_hPopupWnd, &rct);
::DPtoLP(hdc, &pt, 1);
::SetMapMode(hdc, md);
::ReleaseDC(m_hPopupWnd, hdc);
+
*pVal = pt.y / 10.;
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_AutoReleaseClassObject(BOOL *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
*pVal = m_bAutoReleaseClassObject ? VB_TRUE : VB_FALSE;
+
return S_OK;
}
STDMETHODIMP COverlappedWindow::get_DefaultAction(BOOL *pVal)
{
+ if (!pVal) {
+ return E_POINTER;
+ }
+
*pVal = m_bDefaultAction ? VB_TRUE : VB_FALSE;
+
return S_OK;
}
// UNICODE\95¶\8e\9a\97ñ\82ª\82 \82ê\82Î\81A\82»\82¿\82ç\82ð\97D\90æ\82µ\82Ä\8eæ\93¾\82·\82é
HGLOBAL hGlobal = ::GetClipboardData(CF_UNICODETEXT);
if (hGlobal) {
- LPWSTR p = (LPWSTR)GlobalLock(hGlobal);
+ LPCWSTR p = (LPCWSTR)GlobalLock(hGlobal);
if (p) {
CComBSTR wstr(p);
GlobalUnlock(hGlobal);
pVarText->vt = VT_BSTR;
}
}
- }
- else if (IsClipboardFormatAvailable(CF_TEXT)) {
+
+ } else if (IsClipboardFormatAvailable(CF_TEXT)) {
// UNICODE\95¶\8e\9a\97ñ\82ª\82È\82¢\8fê\8d\87
HGLOBAL hGlobal = ::GetClipboardData(CF_TEXT);
if (hGlobal) {
- LPCSTR p = (LPSTR)GlobalLock(hGlobal);
+ LPCSTR p = (LPCSTR)GlobalLock(hGlobal);
if (p) {
CComBSTR wstr(p);
GlobalUnlock(hGlobal);
}
void Clear()
{
- list<LPTSTR>::iterator p = m_lstPath.begin();
+ std::list<LPTSTR>::iterator p = m_lstPath.begin();
while (p != m_lstPath.end()) {
- delete[] * p;
+ delete[] *p;
p = m_lstPath.erase(p);
}
}
{
Clear();
int count = ::DragQueryFile(hDrop, -1, NULL, 0);
- int i;
- for (i = 0; i < count; i++) {
+ for (int i = 0; i < count; i++) {
DWORD sz = ::DragQueryFile(hDrop, i, NULL, 0);
LPTSTR pBuf = new TCHAR[sz + 1];
::DragQueryFile(hDrop, i, pBuf, MAX_PATH);
VARIANT* pvars;
if (SafeArrayAccessData(pArray, (void**)&pvars) == S_OK) {
int i = 0;
- list<LPTSTR>::iterator p = m_lstPath.begin();
+ std::list<LPTSTR>::iterator p = m_lstPath.begin();
while (p != m_lstPath.end()) {
CComVariant wbuf(*p);
wbuf.Detach(&pvars[i]);
pvarPathName->vt = VT_ARRAY | VT_VARIANT;
pvarPathName->parray = pArray;
}
+
protected:
- list<LPTSTR> m_lstPath;
+ std::list<LPTSTR> m_lstPath;
};
/////////////////////////////////////////////////////////////////////////////
public CProxy_IOverlappedWindowEvents< COverlappedWindow >
{
public:
- COverlappedWindow();
+ COverlappedWindow() {};
DECLARE_GET_CONTROLLING_UNKNOWN()
DECLARE_REGISTRY_RESOURCEID(IDR_OVERLAPPEDWINDOW)
protected:
HRESULT ClassObjectInvoke(LPCWSTR handler);
+public:
+ ULONG InternalAddRef()
+ {
+ ULONG ref = CComObjectRootEx<CComSingleThreadModel>::InternalAddRef();
+ ATLTRACE(_TEXT("*addref=%d\n"), ref);
+ return ref;
+ }
+
+ ULONG InternalRelease()
+ {
+ ULONG ref = CComObjectRootEx<CComSingleThreadModel>::InternalRelease();
+ ATLTRACE(_TEXT("*release=%d\n"), ref);
+ return ref;
+ }
+
// IOverlappedWindow
public:
STDMETHOD(GetClipboardText)(/*[out]*/VARIANT* pVarText);
STDMETHOD(put_ExitCode)(/*[in]*/ short newVal);
STDMETHOD(get_Object)(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal);
void MoveNextOverlapped();
- void CreateWindowList(list<HWND>& lstWnd, BOOL bSearchRoot);
+ void CreateWindowList(std::list<HWND>& lstWnd, BOOL bSearchRoot);
STDMETHOD(get_AutoClose)(/*[out, retval]*/ BOOL *pVal);
STDMETHOD(put_AutoClose)(/*[in]*/ BOOL newVal);
STDMETHOD(DoModal)(/*[out,retval]*/VARIANT* retcode);
CComObject<CForm>* m_pForm;
CComObject<CEvent>* m_pEvent;
CComObject<CObjectMap>* m_pObject;
- list<CComObject<CEvent>*> m_lstEvent;
- list<CComObject<COverlappedWindow>*> m_lstChild;
- vector<CComVariant> m_vectorObject;
+ std::list<CComObject<CEvent>*> m_lstEvent;
+ std::list<CComObject<COverlappedWindow>*> m_lstChild;
+ std::vector<CComVariant> m_vectorObject;
dropfiledata m_dropfiles;
CRITICAL_SECTION m_objEventDataProtection;
BOOL m_bAutoReleaseClassObject;
BOOL m_bDefaultAction;
+
protected:
static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
void AddEvent(int message, WPARAM wParam, LPARAM lParam);
void AddEventSingle(int message, WPARAM wParam, LPARAM lParam);
void CreateThisInterface(VARIANT* pvarUnk);
void SetTitle();
+ void PurgeUnusedWindows();
+
protected:
IDispatch* m_pClassDisp;
int m_dWaitCursor;
HWND m_hPopupWnd;
HWND m_hParentWnd;
HICON m_hIcon;
- map<int, CComBSTR> m_cMenuMap;
+ std::map<int, CComBSTR> m_cMenuMap;
};
}
ATLASSERT(pSection);
- pSection->m_szProfilePath = m_bstr_profilepath;
- pSection->m_szSectionName = varText.bstrVal;
-
- IUnknown* pUnk = NULL;
- if (FAILED(hr = pSection->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
+ CComPtr<IUnknown> pUnk = NULL;
+ if (FAILED(hr = pSection->QueryInterface(&pUnk))) {
+ delete pSection;
return hr;
}
ATLASSERT(pUnk);
+ pSection->m_szProfilePath = m_bstr_profilepath;
+ pSection->m_szSectionName = varText.bstrVal;
+
pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
+ pVal->punkVal = pUnk.Detach();
return S_OK;
}
//
_Module.Init(ObjectMap, hInstance, &LIBID_SERAPHYSCRIPTTOOLSLib);
DisableThreadLibraryCalls(hInstance);
- }
- else if (dwReason == DLL_PROCESS_DETACH)
+
+#ifdef _DEBUG
+ //_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE);
+ //_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
+ _CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF | _CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_EVERY_128_DF);
+ //_CrtSetBreakAlloc(898);
+#endif
+
+ } else if (dwReason == DLL_PROCESS_DETACH) {
_Module.Term();
+
+#ifdef _DEBUG
+ _CrtDumpMemoryLeaks();
+#endif
+ }
+
return TRUE; // ok
}
/* File created by MIDL compiler version 8.00.0603 */
-/* at Sun Aug 16 18:41:49 2015
+/* at Tue Aug 18 01:30:13 2015
*/
/* Compiler settings for SeraphyScriptTools.idl:
Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603
// Shell.cpp : CShell \82Ì\83C\83\93\83v\83\8a\83\81\83\93\83e\81[\83V\83\87\83\93
#include "stdafx.h"
+
#include "SeraphyScriptTools.h"
#include "Shell.h"
#include "generic.h"
+
#include <list>
#include <vector>
-using namespace std;
#pragma comment(lib, "Version.lib")
info.nShow = nShow;
if (ShellExecuteEx(&info)) {
// ShellExecObj\82Ì\90¶\90¬
+ HRESULT hr;
CComObject<CShellExecObj>* pExec = NULL;
- if (pExec->CreateInstance(&pExec) == S_OK) {
- pExec->m_hProcess = info.hProcess;
- IUnknown* pUnk = NULL;
- pExec->QueryInterface(IID_IUnknown, (void**)&pUnk);
- punkVal->vt = VT_UNKNOWN;
- punkVal->punkVal = pUnk;
+ if (FAILED(hr = CComObject<CShellExecObj>::CreateInstance(&pExec))) {
+ return hr;
+ }
+ pExec->m_hProcess = info.hProcess;
+
+ IUnknown* pUnk = NULL;
+ if (FAILED(hr = pExec->QueryInterface(&pUnk))) {
+ delete pExec;
+ return hr;
}
+ punkVal->vt = VT_UNKNOWN;
+ punkVal->punkVal = pUnk;
}
return S_OK;
}
{
::VariantInit(pVal);
+ HRESULT hr;
CComVariant varText;
- if (varText.ChangeType(VT_BSTR, &text) == S_OK) {
- CComObject<CParseName>* pParse = NULL;
- if (pParse->CreateInstance(&pParse) == S_OK) {
- pParse->m_bstr_path = (LPCWSTR)varText.bstrVal;
- IUnknown* pUnk = NULL;
- if (pParse->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) {
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
- }
- }
+ if (FAILED(hr = varText.ChangeType(VT_BSTR, &text))) {
+ return hr;
}
- return S_OK;
-}
-/////////////////////////////////////////////////////////////////////////////
-// CParseName
+ // COM\83I\83u\83W\83F\83N\83g\82Ì\8dì\90¬
+ CComObject<CParseName>* pParse = NULL;
+ if (FAILED(hr = CComObject<CParseName>::CreateInstance(&pParse))) {
+ return hr;
+ }
-STDMETHODIMP CParseName::InterfaceSupportsErrorInfo(REFIID riid)
-{
- static const IID* arr[] = {
- &IID_ISeraphyScriptTool_ParseName
- };
+ // COM\83X\83}\81[\83g\83|\83C\83\93\83^\82É\95Û\8e\9d\82·\82é.(\8e©\93®\83\8a\83\8a\81[\83X)
+ CComPtr<ISeraphyScriptTool_ParseName> pIntf;
+ if (FAILED(hr = pParse->QueryInterface(
+ IID_ISeraphyScriptTool_ParseName, reinterpret_cast<void**>(&pIntf)))) {
+ delete pParse;
+ return hr;
+ }
- for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
- if (IsEqualGUID(*arr[i], riid)) {
- return S_OK;
- }
+ // \83p\83X\82ð\90Ý\92è\82·\82é.
+ if (FAILED(hr = pIntf->put_PathName(varText.bstrVal))) {
+ return hr;
+ }
+
+ // IUnknown\82É\95Ï\8a·\82·\82é
+ IUnknown* pUnk = NULL;
+ if (FAILED(hr = pIntf->QueryInterface(IID_IUnknown, (void**)&pUnk))) {
+ return hr;
}
- return S_FALSE;
+
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk;
+ return S_OK;
}
+/////////////////////////////////////////////////////////////////////////////
+// CParseName
+
STDMETHODIMP CParseName::get_PathName(BSTR *pVal)
{
return m_bstr_path.CopyTo(pVal);
{
m_bConfirm = true;
m_bSilent = false;
- //
m_pMainWindow = NULL;
- m_pMalloc = NULL;
- SHGetMalloc(&m_pMalloc);
+ }
+
+ HRESULT FinalConstruct()
+ {
+ return SHGetMalloc(&m_pMalloc);
}
void FinalRelease()
{
- if (m_pMalloc) {
- m_pMalloc->Release();
- m_pMalloc = NULL;
- }
+ m_pMalloc.Release();
}
HWND GetMainWindow()
protected:
BOOL m_bSilent;
BOOL m_bConfirm;
- IMalloc* m_pMalloc;
+ CComPtr<IMalloc> m_pMalloc;
IOverlappedWindow* m_pMainWindow;
HRESULT FileOperationCore(UINT wFunc, FILEOP_FLAGS flag, VARIANT* from, VARIANT* to, VARIANT* pResult);
// CShellExecObj
class ATL_NO_VTABLE CShellExecObj :
public CComObjectRootEx<CComSingleThreadModel>,
- // public CComCoClass<CShellExecObj, &CLSID_ShellExecObj>,
+ public CComCoClass<CShellExecObj, &CLSID_ShellExecObj>,
public IDispatchImpl<IShellExecObj, &IID_IShellExecObj, &LIBID_SERAPHYSCRIPTTOOLSLib>
{
public:
{
m_hProcess = NULL;
}
+
void FinalRelease()
{
if (m_hProcess) {
m_hProcess = NULL;
}
}
- DECLARE_REGISTRY_RESOURCEID(IDR_SHELLEXECOBJ)
+
+ //DECLARE_REGISTRY_RESOURCEID(IDR_SHELLEXECOBJ)
DECLARE_PROTECT_FINAL_CONSTRUCT()
public:
STDMETHOD(get_ExitCode)(/*[out, retval]*/ long *pVal);
STDMETHOD(Wait)(/*[in,optional]*/VARIANT tim,/*[out,retval]*/VARIANT* pVal);
+
+protected:
HANDLE m_hProcess;
+
+ friend class CShell;
};
// shell.h : CParseName \82Ì\90é\8c¾
class ATL_NO_VTABLE CParseName :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CParseName, &CLSID_ParseName>,
- public ISupportErrorInfo,
+ public ISupportErrorInfoImpl<&IID_ISeraphyScriptTool_ParseName>,
public IDispatchImpl<ISeraphyScriptTool_ParseName, &IID_ISeraphyScriptTool_ParseName, &LIBID_SERAPHYSCRIPTTOOLSLib>
{
public:
COM_INTERFACE_ENTRY(ISupportErrorInfo)
END_COM_MAP()
- // ISupportsErrorInfo
- STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
-
// ISeraphyScriptTool_ParseName
public:
STDMETHOD(get_Directory)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_FileName)(/*[in]*/ BSTR newVal);
STDMETHOD(get_PathName)(/*[out, retval]*/ BSTR *pVal);
STDMETHOD(put_PathName)(/*[in]*/ BSTR newVal);
+
+protected:
CComBSTR m_bstr_path;
};
#include <statreg.h>
#include <statreg.cpp>
#endif
-
-// FIXME: #include <atlimpl.cpp>
#endif
#endif
+// \83f\83o\83b\83O\83q\81[\83v
+#ifdef _DEBUG
+#define CRTDBG_MAP_ALLOC
+#include <crtdbg.h>
+#endif
+
#include <atlbase.h>
// CComModule \83N\83\89\83X\82©\82ç\94h\90¶\82µ\82½\83N\83\89\83X\82ð\8eg\97p\82µ\82Ä\81A\83I\81[\83o\81[\83\89\83C\83h\82·\82é\8fê\8d\87
#include "SeraphyScriptTools.h"
#include "TreeItem.h"
#include "objectmap.h"
+
#include <list>
-using namespace std;
/////////////////////////////////////////////////////////////////////////////
BOOL CTreeItem::DeleteTreeItemWithData(HWND hWnd, HTREEITEM hItem)
{
HTREEITEM hRoot = hItem;
- list<HTREEITEM> lst;
+ std::list<HTREEITEM> lst;
lst.push_back(hItem);
while (!lst.empty()) {
hItem = lst.front();
return true;
}
-void CTreeItem::CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCTSTR text, IUnknown **punkVal)
+/**
+ * \83c\83\8a\81[\83A\83C\83e\83\80\82ð\95Û\8e\9d\82·\82é\83I\83u\83W\83F\83N\83g\82ð\90¶\90¬\82µ\82Ä\95Ô\82·.
+ * IUnknown\82Í\8eQ\8fÆ\83J\83E\83\93\83g1\82É\90Ý\92è\82³\82ê\82Ä\82¢\82é\82½\82ß\81A\8cÄ\82Ñ\8fo\82µ\91¤\82ÅRelease\82ª\95K\97v.
+ */
+HRESULT CTreeItem::CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCTSTR text, IUnknown **punkVal)
{
+ if (!punkVal) {
+ return E_POINTER;
+ }
+ *punkVal = NULL;
+
// \83A\83C\83e\83\80\82ª\95Û\97L\82·\82é\98A\91z\94z\97ñ\82ð\90¶\90¬\82·\82é
- IUnknown* pUnk = NULL;
+
+ HRESULT hr;
+
CComObject<CObjectMap>* pMap = NULL;
- if (SUCCEEDED(pMap->CreateInstance(&pMap))) {
- pMap->QueryInterface(IID_IUnknown, (void**)&pUnk);
+ if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&pMap))) {
+ return hr;
}
+ CComPtr<IUnknown> pMapUnk;
+ if (FAILED(hr = pMap->QueryInterface(&pMapUnk))) {
+ delete pMap;
+ return hr;
+ }
+
// \91}\93ü\82·\82é\83A\83C\83e\83\80\82Ì\92è\8b`
ATL::CString tmp(text);
TVINSERTSTRUCT is = {0};
is.item.mask = TVIF_TEXT | TVIF_PARAM;
is.item.pszText = tmp.GetBuffer();
is.item.cchTextMax = tmp.GetLength();
+
+ IUnknown* pUnk = NULL;
+ if (FAILED(hr = pMapUnk.CopyTo(&pUnk))) {
+ return hr;
+ }
is.item.lParam = (LPARAM)pUnk;
HTREEITEM hNewItem = TreeView_InsertItem(hWnd, &is);
- if (hNewItem) {
- // \83A\83C\83e\83\80\82Ö\82Ì\83I\83u\83W\83F\83N\83g\82ð\8dì\90¬\82·\82é
- CComObject<CTreeItem>* pItem = NULL;
- if (SUCCEEDED(pItem->CreateInstance(&pItem))) {
- pItem->SetParam(hWnd, hNewItem);
- pItem->QueryInterface(IID_IUnknown, (void**)punkVal);
- }
+ if (!hNewItem) {
+ // \93o\98^\82³\82ê\82È\82©\82Á\82½\8fê\8d\87\82Í\83^\83O\83A\83C\83e\83\80\82É\8aÖ\98A\82Ã\82¯\82½pUnk\82ð\89ð\95ú\82·\82é
+ pUnk->Release();
+ return E_FAIL; // \95s\96¾\82È\83G\83\89\81[
+ }
+
+ // \83A\83C\83e\83\80\82Ö\82Ì\83I\83u\83W\83F\83N\83g\82ð\8dì\90¬\82·\82é
+ CComObject<CTreeItem>* pItem = NULL;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
+ }
+ pItem->SetParam(hWnd, hNewItem);
+
+ if (FAILED(hr = pItem->QueryInterface(punkVal))) {
+ delete pItem;
+ return hr;
}
+ return S_OK;
}
STDMETHODIMP CTreeItem::IsValid(BOOL *pResult)
{
+ if (!pResult) {
+ return E_FAIL;
+ }
+
*pResult = (m_hItem != NULL) ? VB_TRUE : VB_FALSE;
+
+ return S_OK;
+}
+
+STDMETHODIMP CTreeItem::Sort()
+{
+ HRESULT ret = InitialCheck();
+ if (ret == S_OK) {
+ if (m_hItem) {
+ TreeView_SortChildren(m_hWnd, m_hItem, 0);
+ }
+ else {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ ret = DISP_E_EXCEPTION;
+ }
+ }
+ return ret;
+}
+
+STDMETHODIMP CTreeItem::Expand()
+{
+ HRESULT ret = InitialCheck();
+ if (ret == S_OK) {
+ if (m_hItem) {
+ TreeView_Expand(m_hWnd, m_hItem, TVE_EXPAND);
+ }
+ else {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ ret = DISP_E_EXCEPTION;
+ }
+ }
+ return ret;
+}
+
+STDMETHODIMP CTreeItem::Select()
+{
+ HRESULT ret = InitialCheck();
+ if (ret == S_OK) {
+ if (m_hItem) {
+ TreeView_SelectItem(m_hWnd, m_hItem);
+ }
+ else {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ ret = DISP_E_EXCEPTION;
+ }
+ }
+ return ret;
+}
+
+STDMETHODIMP CTreeItem::Erase()
+{
+ HRESULT ret = InitialCheck();
+ if (ret == S_OK) {
+ if (m_hItem) {
+ if (DeleteTreeItemWithData(m_hWnd, m_hItem)) {
+ // \8dí\8f\9c\82É\90¬\8c÷\82µ\82½\82ç\81A\82±\82Ì\83n\83\93\83h\83\8b\82ð\96³\8cø\82É\82·\82é
+ m_hWnd = NULL;
+ m_hItem = NULL;
+ }
+ }
+ else {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ ret = DISP_E_EXCEPTION;
+ }
+ }
+ return ret;
+}
+
+STDMETHODIMP CTreeItem::Create(/*[in]*/VARIANT text,/*[out,retval]*/IUnknown** punkVal)
+{
+ // \83A\83C\83e\83\80\82Ì\8dì\90¬
+ *punkVal = NULL;
+ HRESULT ret = InitialCheck();
+ if (FAILED(ret)) {
+ return ret;
+ }
+
+ if (m_hItem) {
+ CComVariant str;
+ ATL::CString mes(_TEXT(""));
+ if (str.ChangeType(VT_BSTR, &text) == S_OK) {
+ mes = str.bstrVal;
+ }
+ CreateTreeItem(m_hWnd, m_hItem, mes, punkVal);
+ return S_OK;
+ }
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+}
+
+STDMETHODIMP CTreeItem::get_Object(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal)
+{
+ // \83A\83C\83e\83\80\82É\8aÖ\98A\95t\82¯\82ç\82ê\82½\98A\91z\94z\97ñ\83I\83u\83W\83F\83N\83g\82ð\8eæ\93¾\82·\82é
+ ::VariantInit(pVal);
+ HRESULT ret = InitialCheck();
+ if (!m_hItem) {
+ ret = DISP_E_EXCEPTION;
+ }
+ if (ret == S_OK) {
+ TVITEM itm = {0};
+ itm.mask = TVIF_PARAM;
+ itm.hItem = m_hItem;
+ if (TreeView_GetItem(m_hWnd, &itm)) {
+ IUnknown* pUnk = (IUnknown*)itm.lParam;
+ if (pUnk) {
+ pUnk->AddRef();
+ pVal->vt = VT_UNKNOWN;
+ pVal->punkVal = pUnk;
+ }
+ }
+ }
+ return ret;
+}
+
+HRESULT CTreeItem::InitialCheck()
+{
+ // \83E\83B\83\93\83h\83E\82ª\97L\8cø\82©\8c\9f\8d¸\82·\82é
+ if (m_hWnd && ::IsWindow(m_hWnd)) {
+ return S_OK;
+ }
+ return Error(IDS_ERR_TREEERROR);
+}
+
+STDMETHODIMP CTreeItem::get_Text(/*[out, retval]*/ BSTR *pVal)
+{
+ // \83e\83L\83X\83g\82Ì\8eæ\93¾
+ HRESULT hr;
+ if (FAILED(hr = InitialCheck())) {
+ return hr;
+ }
+ if (!m_hItem) {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+ }
+
+ TCHAR text[MAX_PATH] = {0};
+ TVITEM itm = {0};
+ itm.mask = TVIF_TEXT;
+ itm.hItem = m_hItem;
+ itm.pszText = text;
+ itm.cchTextMax = MAX_PATH;
+ if (TreeView_GetItem(m_hWnd, &itm)) {
+ CComBSTR ret(text);
+ *pVal = ret.Detach();
+ }
return S_OK;
}
+
+STDMETHODIMP CTreeItem::put_Text(/*[in]*/ BSTR newVal)
+{
+ // \83e\83L\83X\83g\82Ì\8f\91\82«\8a·\82¦
+ HRESULT hr;
+ if (FAILED(hr = InitialCheck())) {
+ return hr;
+ }
+ if (!m_hItem) {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+ }
+
+ ATL::CString tmp(newVal);
+ TVITEM itm = {0};
+ itm.mask = TVIF_TEXT;
+ itm.hItem = m_hItem;
+ itm.pszText = tmp.GetBuffer();
+ itm.cchTextMax = tmp.GetLength(); // Set\82Ì\8fê\8d\87\82Í\96³\8e\8b\82³\82ê\82é
+ TreeView_SetItem(m_hWnd, &itm);
+ return S_OK;
+}
+
+STDMETHODIMP CTreeItem::get_PrevItem(/*[out, retval]*/ IUnknown* *pVal)
+{
+ // \91O\82Ì\83A\83C\83e\83\80
+ *pVal = NULL;
+
+ HRESULT hr;
+ if (FAILED(hr = InitialCheck())) {
+ return hr;
+ }
+
+ if (!m_hItem) {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+ }
+
+ CComObject<CTreeItem>* pItem = NULL;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
+ }
+
+ HTREEITEM hNewItem = TreeView_GetPrevSibling(m_hWnd, m_hItem);
+ pItem->SetParam(m_hWnd, hNewItem);
+
+ return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
+}
+
+STDMETHODIMP CTreeItem::get_NextItem(/*[out, retval]*/ IUnknown* *pVal)
+{
+ // \8e\9f\82Ì\83A\83C\83e\83\80
+ *pVal = NULL;
+
+ HRESULT hr;
+ if (FAILED(hr = InitialCheck())) {
+ return hr;
+ }
+
+ if (!m_hItem) {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+ }
+
+ CComObject<CTreeItem>* pItem = NULL;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
+ }
+
+ HTREEITEM hNewItem = TreeView_GetNextSibling(m_hWnd, m_hItem);
+ pItem->SetParam(m_hWnd, hNewItem);
+
+ return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
+}
+
+STDMETHODIMP CTreeItem::get_ChildItem(/*[out, retval]*/ IUnknown* *pVal)
+{
+ // \8eq\83A\83C\83e\83\80
+ *pVal = NULL;
+
+ HRESULT hr;
+ if (FAILED(hr = InitialCheck())) {
+ return hr;
+ }
+
+ if (!m_hItem) {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+ }
+
+ CComObject<CTreeItem>* pItem = NULL;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
+ }
+
+ HTREEITEM hNewItem = TreeView_GetChild(m_hWnd, m_hItem);
+ pItem->SetParam(m_hWnd, hNewItem);
+
+ return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
+}
+
+STDMETHODIMP CTreeItem::get_Parent(/*[out, retval]*/ IUnknown* *pVal)
+{
+ // \90e\83A\83C\83e\83\80
+ *pVal = NULL;
+
+ HRESULT hr;
+ if (FAILED(hr = InitialCheck())) {
+ return hr;
+ }
+
+ if (!m_hItem) {
+ // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
+ return DISP_E_EXCEPTION;
+ }
+
+ CComObject<CTreeItem>* pItem = NULL;
+ if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
+ return hr;
+ }
+
+ HTREEITEM hNewItem = TreeView_GetParent(m_hWnd, m_hItem);
+ pItem->SetParam(m_hWnd, hNewItem);
+
+ return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
+}
+
+//
+void CTreeItem::SetParam(HWND hWnd, HTREEITEM hItem)
+{
+ m_hWnd = hWnd;
+ m_hItem = hItem;
+}
+
{
public:
CTreeItem()
+ : m_hWnd(NULL)
+ , m_hItem(NULL)
{
- m_hWnd = NULL;
- m_hItem = NULL;
}
- static BOOL DeleteTreeItemWithData(HWND hWnd, HTREEITEM hItem);
+
//DECLARE_REGISTRY_RESOURCEID(IDR_TREEITEM)
DECLARE_PROTECT_FINAL_CONSTRUCT()
// ITreeItem
public:
STDMETHOD(IsValid)(/*[out,retval]*/BOOL* pResult);
- static void CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCTSTR text, IUnknown** punkVal);
- STDMETHOD(Sort)()
- {
- HRESULT ret = InitialCheck();
- if (ret == S_OK) {
- if (m_hItem) {
- TreeView_SortChildren(m_hWnd, m_hItem, 0);
- }
- else {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- }
- return ret;
- }
- STDMETHOD(Expand)()
- {
- HRESULT ret = InitialCheck();
- if (ret == S_OK) {
- if (m_hItem) {
- TreeView_Expand(m_hWnd, m_hItem, TVE_EXPAND);
- }
- else {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- }
- return ret;
- }
- STDMETHOD(Select)()
- {
- HRESULT ret = InitialCheck();
- if (ret == S_OK) {
- if (m_hItem) {
- TreeView_SelectItem(m_hWnd, m_hItem);
- }
- else {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- }
- return ret;
- }
- STDMETHOD(Erase)()
- {
- HRESULT ret = InitialCheck();
- if (ret == S_OK) {
- if (m_hItem) {
- if (DeleteTreeItemWithData(m_hWnd, m_hItem)) {
- // \8dí\8f\9c\82É\90¬\8c÷\82µ\82½\82ç\81A\82±\82Ì\83n\83\93\83h\83\8b\82ð\96³\8cø\82É\82·\82é
- m_hWnd = NULL;
- m_hItem = NULL;
- }
- }
- else {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- }
- return ret;
- }
- STDMETHOD(Create)(/*[in]*/VARIANT text,/*[out,retval]*/IUnknown** punkVal)
- {
- // \83A\83C\83e\83\80\82Ì\8dì\90¬
- *punkVal = NULL;
- HRESULT ret = InitialCheck();
- if (FAILED(ret)) {
- return ret;
- }
-
- if (m_hItem) {
- CComVariant str;
- ATL::CString mes(_TEXT(""));
- if (str.ChangeType(VT_BSTR, &text) == S_OK) {
- mes = str.bstrVal;
- }
- CreateTreeItem(m_hWnd, m_hItem, mes, punkVal);
- return S_OK;
- }
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- return DISP_E_EXCEPTION;
- }
+ STDMETHOD(Sort)();
+ STDMETHOD(Expand)();
+ STDMETHOD(Select)();
+ STDMETHOD(Erase)();
+ STDMETHOD(Create)(/*[in]*/VARIANT text,/*[out,retval]*/IUnknown** punkVal);
+ STDMETHOD(get_Object)(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal);
+ STDMETHOD(get_Text)(/*[out, retval]*/ BSTR *pVal);
+ STDMETHOD(put_Text)(/*[in]*/ BSTR newVal);
+ STDMETHOD(get_PrevItem)(/*[out, retval]*/ IUnknown* *pVal);
+ STDMETHOD(get_NextItem)(/*[out, retval]*/ IUnknown* *pVal);
+ STDMETHOD(get_ChildItem)(/*[out, retval]*/ IUnknown* *pVal);
+ STDMETHOD(get_Parent)(/*[out, retval]*/ IUnknown* *pVal);
- STDMETHOD(get_Object)(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal)
- {
- // \83A\83C\83e\83\80\82É\8aÖ\98A\95t\82¯\82ç\82ê\82½\98A\91z\94z\97ñ\83I\83u\83W\83F\83N\83g\82ð\8eæ\93¾\82·\82é
- ::VariantInit(pVal);
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- ret = DISP_E_EXCEPTION;
- }
- if (ret == S_OK) {
- TVITEM itm = {0};
- itm.mask = TVIF_PARAM;
- itm.hItem = m_hItem;
- if (TreeView_GetItem(m_hWnd, &itm)) {
- IUnknown* pUnk = (IUnknown*)itm.lParam;
- if (pUnk) {
- pUnk->AddRef();
- pVal->vt = VT_UNKNOWN;
- pVal->punkVal = pUnk;
- }
- }
- }
- return ret;
- }
- HRESULT InitialCheck()
- {
- // \83E\83B\83\93\83h\83E\82ª\97L\8cø\82©\8c\9f\8d¸\82·\82é
- if (m_hWnd && ::IsWindow(m_hWnd)) {
- return S_OK;
- }
- return Error(IDS_ERR_TREEERROR);
- }
-
- STDMETHOD(get_Text)(/*[out, retval]*/ BSTR *pVal)
- {
- // \83e\83L\83X\83g\82Ì\8eæ\93¾
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
-
- if (ret == S_OK) {
- TCHAR text[MAX_PATH] = {0};
- TVITEM itm = {0};
- itm.mask = TVIF_TEXT;
- itm.hItem = m_hItem;
- itm.pszText = text;
- itm.cchTextMax = MAX_PATH;
- if (TreeView_GetItem(m_hWnd, &itm)) {
- CComBSTR ret(text);
- *pVal = ret.Detach();
- }
- }
- return ret;
- }
-
- STDMETHOD(put_Text)(/*[in]*/ BSTR newVal)
- {
- // \83e\83L\83X\83g\82Ì\8f\91\82«\8a·\82¦
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- if (ret == S_OK) {
- ATL::CString tmp(newVal);
- TVITEM itm = {0};
- itm.mask = TVIF_TEXT;
- itm.hItem = m_hItem;
- itm.pszText = tmp.GetBuffer();
- itm.cchTextMax = tmp.GetLength(); // Set\82Ì\8fê\8d\87\82Í\96³\8e\8b\82³\82ê\82é
- TreeView_SetItem(m_hWnd, &itm);
- }
- return ret;
- }
-
- STDMETHOD(get_PrevItem)(/*[out, retval]*/ IUnknown* *pVal)
- {
- // \91O\82Ì\83A\83C\83e\83\80
- *pVal = NULL;
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- if (ret == S_OK) {
- HTREEITEM hNewItem = TreeView_GetPrevSibling(m_hWnd, m_hItem);
- CComObject<CTreeItem>* pItem = NULL;
- if (pItem->CreateInstance(&pItem) == S_OK) {
- pItem->SetParam(m_hWnd, hNewItem);
- ret = pItem->QueryInterface(IID_IUnknown, (void**)pVal);
- }
- }
- return ret;
- }
- STDMETHOD(get_NextItem)(/*[out, retval]*/ IUnknown* *pVal)
- {
- // \8e\9f\82Ì\83A\83C\83e\83\80
- *pVal = NULL;
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- if (ret == S_OK) {
- HTREEITEM hNewItem = TreeView_GetNextSibling(m_hWnd, m_hItem);
- CComObject<CTreeItem>* pItem = NULL;
- if (pItem->CreateInstance(&pItem) == S_OK) {
- pItem->SetParam(m_hWnd, hNewItem);
- ret = pItem->QueryInterface(IID_IUnknown, (void**)pVal);
- }
- }
- return ret;
- }
- STDMETHOD(get_ChildItem)(/*[out, retval]*/ IUnknown* *pVal)
- {
- // \8eq\83A\83C\83e\83\80
- *pVal = NULL;
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- if (ret == S_OK) {
- HTREEITEM hNewItem = TreeView_GetChild(m_hWnd, m_hItem);
- CComObject<CTreeItem>* pItem = NULL;
- if (pItem->CreateInstance(&pItem) == S_OK) {
- pItem->SetParam(m_hWnd, hNewItem);
- ret = pItem->QueryInterface(IID_IUnknown, (void**)pVal);
- }
- }
- return S_OK;
- }
- STDMETHOD(get_Parent)(/*[out, retval]*/ IUnknown* *pVal)
- {
- // \90e\83A\83C\83e\83\80
- *pVal = NULL;
- HRESULT ret = InitialCheck();
- if (!m_hItem) {
- // \95s\90³\82È\83A\83C\83e\83\80\82ð\8eQ\8fÆ\82µ\82Ä\82¢\82é
- ret = DISP_E_EXCEPTION;
- }
- if (ret == S_OK) {
- HTREEITEM hNewItem = TreeView_GetParent(m_hWnd, m_hItem);
- CComObject<CTreeItem>* pItem = NULL;
- if (pItem->CreateInstance(&pItem) == S_OK) {
- pItem->SetParam(m_hWnd, hNewItem);
- ret = pItem->QueryInterface(IID_IUnknown, (void**)pVal);
- }
- }
- return S_OK;
- }
//
- void SetParam(HWND hWnd, HTREEITEM hItem)
- {
- m_hWnd = hWnd;
- m_hItem = hItem;
- }
+ static BOOL DeleteTreeItemWithData(HWND hWnd, HTREEITEM hItem);
+ static HRESULT CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCTSTR text, IUnknown** punkVal);
+ HRESULT InitialCheck();
+ void SetParam(HWND hWnd, HTREEITEM hItem);
+
protected:
HWND m_hWnd;
HTREEITEM m_hItem;