From: seraphy Date: Sat, 25 Jul 2015 01:10:56 +0000 (+0900) Subject: UNICODEビルド、X64ビルドでコンパイルエラーが発生しないように修正した。 X-Git-Tag: v1.2.0.2~6 X-Git-Url: http://git.osdn.net/view?p=seraphyscrtools%2FSeraphyScriptTools.git;a=commitdiff_plain;h=31b7fd93b6ea8ccc4d7f091f92cc1b1227bcb077 UNICODEビルド、X64ビルドでコンパイルエラーが発生しないように修正した。 動作するかは未確認。 --- diff --git a/.gitignore b/.gitignore index 5973a72..408e84e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,10 @@ /Debug /ipch +/MBCS Debug +/MBCS Release +/Unicode Debug +/Unicode Release +/x64 SeraphyScriptTools.sdf dlldata.c SeraphyScriptTools.tlb diff --git a/CommDialog.cpp b/CommDialog.cpp index fc4a1c4..391a645 100644 --- a/CommDialog.cpp +++ b/CommDialog.cpp @@ -9,61 +9,79 @@ ///////////////////////////////////////////////////////////////////////////// // CCommDialog -void CCommDialog::CommFileDialog(VARIANT* pvarReturn,VARIANT varPathName, VARIANT varFilter,BOOL bMode,DWORD flag) +void CCommDialog::CommFileDialog(VARIANT *pvarReturn, VARIANT varPathName, VARIANT varFilter, BOOL bMode, DWORD flag) { ::VariantInit(pvarReturn); // ƒtƒ@ƒCƒ‹‚ðŠJ‚­E•Û‘¶ƒ_ƒCƒAƒƒO‹¤’ʃ‹[ƒ`ƒ“ - CComVariant path; - CComVariant filter; - const int PATHBUFMAX = 8192; - CHAR szPathName[PATHBUFMAX] = {0}; - CHAR szFilter [MAX_PATH+2] = {0}; - CHAR szDefExtention[MAX_PATH] = {0}; - CHAR szInitialDir[MAX_PATH] = {0}; - - if(path.ChangeType(VT_BSTR,&varPathName) == S_OK){ - // ƒtƒ@ƒCƒ‹–¼‚ÌŽæ‚èo‚µ - WideCharToMultiByte(GetACP(),0,path.bstrVal,-1,szPathName,PATHBUFMAX,NULL,NULL); + + ATL::CString szPathName; + { + CComVariant path; + if (path.ChangeType(VT_BSTR, &varPathName) == S_OK) { + // ƒtƒ@ƒCƒ‹–¼‚ÌŽæ‚èo‚µ + szPathName = path.bstrVal; + } + } + + ATL::CString szFilter; + { + CComVariant filter; + if (filter.ChangeType(VT_BSTR, &varFilter) == S_OK) { + // ƒtƒBƒ‹ƒ^Žw’肪‚ ‚é + szFilter = varFilter.bstrVal; + } } - if(filter.ChangeType(VT_BSTR,&varFilter) == S_OK){ - // ƒtƒBƒ‹ƒ^Žw’肪‚ ‚é - WideCharToMultiByte(GetACP(),0,filter.bstrVal,-1,szFilter,MAX_PATH,NULL,NULL); - LPSTR p = szFilter; - LPSTR pExt = NULL; - while(*p){ - if(*p == '|'){ - *p++ = 0; - if(!pExt){ + + ATL::CString szDefExtention; + if (!szFilter.IsEmpty()) { + LPTSTR p = szFilter.GetBuffer(); + LPTSTR pExt = NULL; + while (*p) { + if (*p == '|') { + *p++ = 0; // •¶Žš‹æØ‚è‚ŏI’[‚³‚¹‚é + if (!pExt) { // Å‰‚Ì‹æØ‚èƒ}[ƒN‚ªÅ‰‚ÌŠg’£Žqƒ}[ƒN‚Å‚ ‚낤B pExt = p; } } - p = CharNextA(p); + p = CharNext(p); } + // •¡”Šg’£ŽqƒtƒBƒ‹ƒ^‚Å‚ ‚ê‚΍ŏ‰‚ÌŠg’£Žq‚Ì‚ÝŽæ‚èo‚· - lstrcpyA(szDefExtention,pExt); - pExt = szDefExtention; - while(*pExt){ - if(*pExt == ';'){ + if (pExt) { + szDefExtention = pExt; + } + pExt = szDefExtention.GetBuffer(); + while (*pExt) { + if (*pExt == ';'){ + *pExt = 0; // Å‰‚ÌŠg’£Žq‚ŏI—¹‚³‚¹‚é break; } - pExt = CharNextA(pExt); + pExt = CharNext(pExt); } } + ATL::CString szInitialDir; + if (m_bstr_InitialDir.length() > 0) { + // ‰ŠúƒfƒBƒŒƒNƒgƒŠ + szInitialDir = (LPCWSTR) m_bstr_InitialDir; + } + + ATL::CString strFile(szPathName); + const int MAXBUFSIZ = MAX_PATH * 10; + LPTSTR pStrFileBuf = strFile.GetBufferSetLength(MAXBUFSIZ + 1); + OPENFILENAME ofn = {0}; ofn.lStructSize = sizeof(OPENFILENAME); ofn.lpstrFilter = szFilter; - ofn.lpstrFile = szPathName; - ofn.nMaxFile = PATHBUFMAX; + ofn.lpstrFile = pStrFileBuf; + ofn.nMaxFile = MAXBUFSIZ; ofn.lpstrDefExt = szDefExtention; ofn.Flags = flag; ofn.hwndOwner = GetMainWindow(); - if(m_bstr_InitialDir.length() > 0){ - // ‰ŠúƒfƒBƒŒƒNƒgƒŠ - WideCharToMultiByte(GetACP(),0,m_bstr_InitialDir,-1,szInitialDir,MAX_PATH,NULL,NULL); + if (!szInitialDir.IsEmpty()) { ofn.lpstrInitialDir = szInitialDir; } @@ -72,80 +90,86 @@ void CCommDialog::CommFileDialog(VARIANT* pvarReturn,VARIANT varPathName, VARIAN ofn.Flags |= OFN_NODEREFERENCELINKS; } - TCHAR szCaption[MAX_PATH] = {0}; + ATL::CString szCaption; BOOL result = false; - if(bMode){ + if (bMode) { // ŠJ‚­ƒ_ƒCƒAƒƒO - ofn.Flags |= (m_bReadonly)?OFN_READONLY:0; - if(m_bstr_OpenFileCaption.length() > 0){ - WideCharToMultiByte(GetACP(),0,m_bstr_OpenFileCaption,-1,szCaption,MAX_PATH,NULL,NULL); + ofn.Flags |= (m_bReadonly) ? OFN_READONLY : 0; + if (m_bstr_OpenFileCaption.length() > 0) { + szCaption = (LPCWSTR) m_bstr_OpenFileCaption; ofn.lpstrTitle = szCaption; } result = GetOpenFileName(&ofn); - if(result){ - m_bReadonly = (ofn.Flags & OFN_READONLY)?true:false; + if (result) { + m_bReadonly = (ofn.Flags & OFN_READONLY) ? true : false; } } else{ // •Û‘¶ƒ_ƒCƒAƒƒO - if(m_bstr_SaveFileCaption.length() > 0){ - WideCharToMultiByte(GetACP(),0,m_bstr_SaveFileCaption,-1,szCaption,MAX_PATH,NULL,NULL); + if (m_bstr_SaveFileCaption.length() > 0) { + szCaption = (LPCWSTR) m_bstr_SaveFileCaption; ofn.lpstrTitle = szCaption; } result = GetSaveFileName(&ofn); } - if(result){ - if(!(ofn.Flags & OFN_ALLOWMULTISELECT)){ + if (result) { + if (!(ofn.Flags & OFN_ALLOWMULTISELECT)) { // ’Pˆêƒtƒ@ƒCƒ‹‘I‘ð CComVariant retpath; - retpath = (LPCSTR)ofn.lpstrFile; + retpath = ofn.lpstrFile; retpath.Detach(pvarReturn); } else{ - // •¡”ƒtƒ@ƒCƒ‹‘I‘ð + // •¡”ƒtƒ@ƒCƒ‹‘I‘ð(ƒ_ƒuƒ‹ƒkƒ‹I’[) // •Ô‚³‚ꂽƒtƒ@ƒCƒ‹”‚ðŒv”‚·‚é int cnt = 0; - LPCSTR p = szPathName; - while(*p){ + LPCTSTR p = ofn.lpstrFile; + while (*p) { cnt++; - while(*p++); + while (*p++); } + // ƒVƒ“ƒOƒ‹‚Ü‚½‚̓}ƒ‹ƒ` SAFEARRAY *pArray = NULL; - if(cnt == 1){ + if (cnt == 1) { // 1‚‚¾‚¯‚È‚çƒtƒ‹ƒpƒX‚ª•Ô‚Á‚Ä‚¢‚é - CComVariant tmp((LPCSTR)szPathName); - pArray = SafeArrayCreateVector(VT_VARIANT,0,1); + CComVariant tmp(ofn.lpstrFile); + pArray = SafeArrayCreateVector(VT_VARIANT, 0, 1); long indx = 0; - SafeArrayPutElement(pArray,&indx,&tmp); + SafeArrayPutElement(pArray, &indx, &tmp); } - else if(cnt > 1){ + else if (cnt > 1) { // SAFEARRAY‚̍쐬 - pArray = SafeArrayCreateVector(VT_VARIANT,0,cnt-1); + pArray = SafeArrayCreateVector(VT_VARIANT, 0, cnt - 1); + // •¡”‚È‚çÅ‰‚ªƒfƒBƒŒƒNƒgƒŠ–¼A2”Ԗڈȍ~‚ªƒtƒ@ƒCƒ‹–¼ - p = szPathName; - _bstr_t dirname = (LPCSTR)p; + p = ofn.lpstrFile; + _bstr_t dirname = p; + // ––”ö‚ªƒtƒHƒ‹ƒ_ƒvƒŒƒCƒX‚ªI‚í‚Á‚Ä‚È‚¯‚ê‚ΒljÁ‚·‚é LPCWSTR wp = dirname; - while(*wp)wp++; - if(wp - 1 > (LPCWSTR)dirname && *(wp - 1) != '\\'){ + while (*wp) wp++; + if (wp - 1 > (LPCWSTR) dirname && *(wp - 1) != '\\') { dirname += L"\\"; } - while(*p++); + + while (*p++); // 2”Ԗڈȍ~‚̎擾 long indx = 0; - while(*p){ - _bstr_t name = (LPCSTR)p; + while (*p) { + _bstr_t name = p; _bstr_t path = dirname + name; - CComVariant tmp((BSTR)path); - SafeArrayPutElement(pArray,&indx,&tmp); - while(*p++); + + CComVariant tmp((LPCWSTR) path); + SafeArrayPutElement(pArray, &indx, &tmp); + while (*p++); indx++; } } + // SAFEARRAY‚ªì¬‚³‚ê‚Ä‚¢‚ê‚Î - if(pArray){ + if (pArray) { pvarReturn->vt = VT_ARRAY | VT_VARIANT; pvarReturn->parray = pArray; } @@ -291,35 +315,44 @@ STDMETHODIMP CCommDialog::put_BrowseForFolderCaption(BSTR newVal) return S_OK; } -STDMETHODIMP CCommDialog::BrowseForFolder(VARIANT varCaption,VARIANT varDir, VARIANT varMode,VARIANT* pvarReturn) +STDMETHODIMP CCommDialog::BrowseForFolder(VARIANT varCaption, VARIANT varDir, VARIANT varMode, VARIANT* pvarReturn) { ::VariantInit(pvarReturn); + // ƒLƒƒƒvƒVƒ‡ƒ“‚̐ݒè CComVariant caption; if(varCaption.vt != VT_ERROR && varCaption.vt != VT_NULL && varCaption.vt != VT_EMPTY && - caption.ChangeType(VT_BSTR,&varCaption) == S_OK){ + caption.ChangeType(VT_BSTR, &varCaption) == S_OK) { put_BrowseForFolderCaption(caption.bstrVal); } - TCHAR szDirName[MAX_PATH]; - TCHAR szTitle[MAX_PATH]; - BROWSEINFO binfo = {0}; + BROWSEINFO binfo = { 0 }; binfo.hwndOwner = GetMainWindow(); - if(m_bstr_BrowseForFolderCaption.length() > 0){ - WideCharToMultiByte(GetACP(),0,m_bstr_BrowseForFolderCaption,-1,szTitle,MAX_PATH,NULL,NULL); - binfo.lpszTitle = szTitle; + + ATL::CString szTitle; + { + if (m_bstr_BrowseForFolderCaption.length() > 0) { + szTitle = (LPCWSTR)m_bstr_BrowseForFolderCaption; + binfo.lpszTitle = szTitle; + } } - CComVariant path; - if(path.ChangeType(VT_BSTR,&varDir) == S_OK){ - // ƒtƒ@ƒCƒ‹–¼‚ÌŽæ‚èo‚µ - WideCharToMultiByte(GetACP(),0,path.bstrVal,-1,szDirName,MAX_PATH,NULL,NULL); + + ATL::CString szDirName; + { + CComVariant path; + if (path.ChangeType(VT_BSTR, &varDir) == S_OK){ + // ƒtƒ@ƒCƒ‹–¼‚ÌŽæ‚èo‚µ + szDirName = path.bstrVal; + } + binfo.pszDisplayName = szDirName.GetBuffer(); } - binfo.pszDisplayName = szDirName; + int mode = 0; CComVariant varTmp; if(varTmp.ChangeType(VT_I4,&varMode) == S_OK){ mode = varTmp.lVal; } + binfo.ulFlags = 0;//BIF_NEWDIALOGSTYLE; // BIF_USENEWUI switch(mode & 0x0f) { @@ -327,37 +360,49 @@ STDMETHODIMP CCommDialog::BrowseForFolder(VARIANT varCaption,VARIANT varDir, VAR default: binfo.ulFlags |= BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE; binfo.lpfn = BrowseCallbackProc; - binfo.lParam = (LPARAM)szDirName; + binfo.lParam = (LPARAM)(LPCTSTR)szDirName; break; + case 1: binfo.ulFlags |= BIF_BROWSEFORCOMPUTER; break; + case 2: binfo.ulFlags |= BIF_BROWSEFORPRINTER; break; + case 3: binfo.ulFlags |= BIF_RETURNFSANCESTORS; break; } - if(mode & 0x10){ + + if (mode & 0x10) { binfo.ulFlags |= BIF_BROWSEINCLUDEFILES; } - if(mode & 0x20){ + if (mode & 0x20) { binfo.ulFlags |= BIF_BROWSEINCLUDEURLS; } - if(mode & 0x40){ + if (mode & 0x40) { binfo.ulFlags |= BIF_DONTGOBELOWDOMAIN; } LPITEMIDLIST idlst = NULL; - if((idlst = SHBrowseForFolder(&binfo)) != NULL){ - IMalloc *pMalloc; - SHGetMalloc(&pMalloc); - SHGetPathFromIDList(idlst,szDirName); + if ((idlst = SHBrowseForFolder(&binfo)) != NULL) { + IMalloc *pMalloc = NULL; + HRESULT hr = SHGetMalloc(&pMalloc); + if (FAILED(hr)) { + return hr; + } + + ATL::CString ret; + LPTSTR pRet = ret.GetBufferSetLength(MAX_PATH); + SHGetPathFromIDList(idlst, pRet); + pMalloc->Free(idlst); pMalloc->Release(); - CComVariant tmp((LPCSTR)szDirName); - tmp.Detach(pvarReturn); + + CComVariant tmp(pRet); + return tmp.Detach(pvarReturn); } return S_OK; } @@ -412,64 +457,75 @@ STDMETHODIMP CCommDialog::SetMainWindow(VARIANT varUnk) STDMETHODIMP CCommDialog::MessageBox(VARIANT mes, VARIANT typ, VARIANT icon, VARIANT* pRet) { CComVariant ret; - LPSTR pBuf = NULL; + + ATL::CString msg; CComVariant varMes; - if(varMes.ChangeType(VT_BSTR,&mes) == S_OK){ - int sz = WideCharToMultiByte(GetACP(),0,varMes.bstrVal,-1,NULL,0,NULL,NULL); - pBuf = new CHAR[sz+1]; - WideCharToMultiByte(GetACP(),0,varMes.bstrVal,-1,pBuf,sz,NULL,NULL); - pBuf[sz] = 0; + if (varMes.ChangeType(VT_BSTR,&mes) == S_OK) { + msg = mes.bstrVal; } + UINT mode = MB_OK; CComVariant varType,varIcon; - if(varType.ChangeType(VT_I2,&typ) == S_OK){ - if(varType.iVal / 10){ + if (varType.ChangeType(VT_I2, &typ) == S_OK) { + if (varType.iVal / 10) { mode = MB_DEFBUTTON2; } + switch(varType.iVal % 10) { case 0: default: mode |= MB_OK; break; + case 1: mode |= MB_OKCANCEL; break; + case 2: mode |= MB_YESNO; break; + case 3: mode |= MB_YESNOCANCEL; break; + case 4: mode |= MB_RETRYCANCEL; break; + case 5: mode |= MB_ABORTRETRYIGNORE; break; } } - if(varIcon.ChangeType(VT_I2,&icon) == S_OK){ + + if (varIcon.ChangeType(VT_I2,&icon) == S_OK) { switch(varIcon.iVal) { case 0: default: break; + case 1: mode |= MB_ICONERROR; break; + case 2: mode |= MB_ICONWARNING; break; + case 3: mode |= MB_ICONINFORMATION; break; + case 4: mode |= MB_ICONQUESTION; break; } } - int md = ::MessageBox(GetMainWindow(),pBuf,GetMainCaption(),mode); + + int md = ::MessageBox(GetMainWindow(), msg, GetMainCaption(),mode); switch(md) { case IDOK: @@ -490,27 +546,22 @@ STDMETHODIMP CCommDialog::MessageBox(VARIANT mes, VARIANT typ, VARIANT icon, VAR return S_OK; } -LPCSTR CCommDialog::GetMainCaption() +ATL::CString CCommDialog::GetMainCaption() { - static CHAR szCaption[MAX_PATH]; - if(!m_bstr_MessageCaption.length() && m_pMainWindow){ + ATL::CString szCaption; + if (m_bstr_MessageCaption.Length() == 0 && m_pMainWindow) { // ƒLƒƒƒvƒVƒ‡ƒ“‚ªŽw’肳‚ê‚Ä‚¢‚È‚¢‚È‚çŽæ“¾‚·‚é - BSTR bstrCaption; - m_pMainWindow->get_Caption(&bstrCaption); - int cnt = WideCharToMultiByte(GetACP(),0,bstrCaption,-1,szCaption,MAX_PATH,NULL,NULL); - szCaption[cnt] = 0; - SysFreeString(bstrCaption); - } - else{ - int cnt = WideCharToMultiByte(GetACP(),0,m_bstr_MessageCaption,-1,szCaption,MAX_PATH,NULL,NULL); - szCaption[cnt] = 0; + CComBSTR bstrCaption; + if (SUCCEEDED(m_pMainWindow->get_Caption(&bstrCaption))) { + szCaption = bstrCaption; + } } return szCaption; } STDMETHODIMP CCommDialog::get_MessageCaption(BSTR *pVal) { - *pVal = m_bstr_MessageCaption.copy(); + *pVal = m_bstr_MessageCaption.Copy(); return S_OK; } diff --git a/CommDialog.h b/CommDialog.h index 88892ec..a1f3b75 100644 --- a/CommDialog.h +++ b/CommDialog.h @@ -196,20 +196,22 @@ public: return S_OK; } CComBSTR m_bstrCaption; + public: STDMETHOD(ColorDialog)(/*[out,retval]*/VARIANT* pcolorVal); STDMETHOD(get_MessageCaption)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_MessageCaption)(/*[in]*/ BSTR newVal); - LPCSTR GetMainCaption(); + ATL::CString GetMainCaption(); STDMETHOD(MessageBox)(/*[in]*/VARIANT mes,/*[in,optional]*/VARIANT typ,/*[in,optional]*/VARIANT icon,/*[out,retval]*/VARIANT* pRet); STDMETHOD(SetMainWindow)(/*[in]*/VARIANT varUnk); HWND GetMainWindow(); HWND m_hStaticMainWindow; + protected: CHOOSECOLOR m_color; COLORREF m_colors[16]; IOverlappedWindow* m_pMainWindow; - _bstr_t m_bstr_MessageCaption; + CComBSTR m_bstr_MessageCaption; }; #endif //__COMMDIALOG_H_ diff --git a/Control.cpp b/Control.cpp index fa9ffd2..cc2a052 100644 --- a/Control.cpp +++ b/Control.cpp @@ -6,6 +6,8 @@ #include "generic.h" #include "objectmap.h" #include +#include + using namespace std; ///////////////////////////////////////////////////////////////////////////// @@ -27,33 +29,36 @@ STDMETHODIMP CControl::InterfaceSupportsErrorInfo(REFIID riid) STDMETHODIMP CControl::get_Text(BSTR *pVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } + DWORD siz = ::GetWindowTextLength(m_hWnd); - LPSTR pMes = new CHAR[siz+1]; - GetWindowText(m_hWnd,pMes,siz+1); - _bstr_t tmp = (LPCSTR)pMes; - *pVal = tmp.copy(); - delete[]pMes; + + ATL::CString tmp; + LPTSTR pMes = tmp.GetBufferSetLength(siz + 1); + GetWindowText(m_hWnd, pMes, siz + 1); + tmp.ReleaseBuffer(); + + CComBSTR ret(tmp); + *pVal = ret.Detach(); return S_OK; } STDMETHODIMP CControl::put_Text(BSTR newVal) { if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_DESTROYED); } - _bstr_t tmp(newVal,true); - ::SetWindowText(m_hWnd,(LPCSTR)tmp); + + ATL::CString tmp(newVal); + ::SetWindowText(m_hWnd, tmp); return S_OK; } STDMETHODIMP CControl::get_ID(short *pVal) { - if(m_hWnd){ + if (m_hWnd) { m_nID = (int)GetWindowLong(m_hWnd,GWL_ID); } *pVal = m_nID; @@ -63,13 +68,13 @@ STDMETHODIMP CControl::get_ID(short *pVal) STDMETHODIMP CControl::put_ID(short newVal) { m_nID = newVal; - if(m_hWnd){ - SetWindowLong(m_hWnd,GWL_ID,newVal); - if((m_nID == IDOK) && !lstrcmp(m_classname,"BUTTON")){ + if (m_hWnd) { + SetWindowLong(m_hWnd, GWL_ID, newVal); + if((m_nID == IDOK) && !lstrcmp(m_classname, _TEXT("BUTTON"))) { // IDOK‚È‚çƒ|ƒbƒVƒ…ƒ{ƒ^ƒ“Œ^‚ðƒfƒBƒtƒHƒ‹ƒgƒ{ƒ^ƒ“‚ɕω»‚³‚¹‚é DWORD m_style = ::GetWindowLong(m_hWnd,GWL_STYLE); m_style |= BS_DEFPUSHBUTTON; - ::SetWindowLong(m_hWnd,GWL_STYLE,m_style); + ::SetWindowLong(m_hWnd, GWL_STYLE, m_style); } } return S_OK; @@ -77,34 +82,33 @@ STDMETHODIMP CControl::put_ID(short newVal) STDMETHODIMP CControl::get_Visibility(BOOL *pVal) { - if(!m_hParent || !m_hWnd){ + if (!m_hParent || !m_hWnd) { *pVal = 0; - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_DESTROYED); } + WINDOWPLACEMENT pls = {0}; pls.length = sizeof(WINDOWPLACEMENT); - ::GetWindowPlacement(m_hWnd,&pls); - *pVal = (pls.showCmd != SW_HIDE)?true:false; + ::GetWindowPlacement(m_hWnd, &pls); + *pVal = (pls.showCmd != SW_HIDE) ? true : false; return S_OK; } STDMETHODIMP CControl::put_Visibility(BOOL newVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } - ::ShowWindow(m_hWnd,newVal?SW_SHOWNORMAL:SW_HIDE); + + ::ShowWindow(m_hWnd, newVal ? SW_SHOWNORMAL : SW_HIDE); return S_OK; } STDMETHODIMP CControl::get_Enable(BOOL *pVal) { - if(!m_hParent || !m_hWnd){ + if (!m_hParent || !m_hWnd) { *pVal = 0; - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_DESTROYED); } *pVal = ::IsWindowEnabled(m_hWnd); return S_OK; @@ -112,9 +116,8 @@ STDMETHODIMP CControl::get_Enable(BOOL *pVal) STDMETHODIMP CControl::put_Enable(BOOL newVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } ::EnableWindow(m_hWnd,newVal); return S_OK; @@ -132,9 +135,9 @@ STDMETHODIMP CControl::get_CheckState(short *pVal) STDMETHODIMP CControl::put_CheckState(short newVal) { m_bChecked = newVal; - if(m_hWnd && newVal >= 0 && newVal <= 2){ + if (m_hWnd && newVal >= 0 && newVal <= 2) { // 0:Unchecked 1:Checked 2:interminate - ::SendMessage(m_hWnd,BM_SETCHECK,newVal,0); + ::SendMessage(m_hWnd, BM_SETCHECK, newVal, 0); } return S_OK; } @@ -142,7 +145,7 @@ STDMETHODIMP CControl::put_CheckState(short newVal) BOOL CControl::Create(HWND hParent) { // << ƒfƒBƒtƒHƒ‹ƒg‚̃vƒbƒVƒ…ƒ{ƒ^ƒ“‚ɕω»‚³‚¹‚éƒNƒ–‚p >> - if((m_nID == IDOK) && !lstrcmp(m_classname,"BUTTON")){ + if ((m_nID == IDOK) && !lstrcmp(m_classname, _TEXT("BUTTON"))) { // IDOK‚È‚ç•ÏX‚·‚é m_style |= BS_DEFPUSHBUTTON; } @@ -157,8 +160,8 @@ BOOL CControl::Create(HWND hParent) ,NULL ,_Module.m_hInst ,NULL); - ::SetWindowLong(m_hWnd, GWL_ID, m_nID); - ::SetWindowLong(m_hWnd, GWL_USERDATA,(LPARAM)this); + ::SetWindowLongPtr(m_hWnd, GWLP_ID, m_nID); + ::SetWindowLongPtr(m_hWnd, GWLP_USERDATA, (LONG_PTR) this); ::SetWindowText(m_hWnd,m_caption); // e‚ªƒfƒBƒZ[ƒuƒ‹‚È‚çŽq‚àƒfƒBƒZ[ƒuƒ‹ó‘Ԃō쐬‚·‚é @@ -168,7 +171,7 @@ BOOL CControl::Create(HWND hParent) ////////////////////////// // Ž–‘Oó‘Ԃ̐ݒè - if(!lstrcmp(m_classname,"BUTTON")){ + if (!lstrcmp(m_classname, _TEXT("BUTTON"))) { // ƒ{ƒ^ƒ“‚È‚çƒ`ƒFƒbƒNó‘Ԃ̃Zƒbƒg if(m_bChecked){ ::SendMessage(m_hWnd,BM_SETCHECK,1,0); @@ -177,11 +180,11 @@ BOOL CControl::Create(HWND hParent) else if(!lstrcmp(m_classname,WC_LISTVIEW)){ // ƒŠƒXƒgƒrƒ…[‚È‚çƒJƒ‰ƒ€‚̐ݒè‚ðs‚¤ TCHAR szColumn[MAX_PATH]; - LPCSTR p = m_caption; + LPCTSTR p = m_caption; m_nColumnCount = 0; // ƒEƒBƒ“ƒhƒEƒLƒƒƒvƒVƒ‡ƒ“‚©‚ç—ñŒ©o‚µ‚ðì¬‚·‚é while(*p){ - LPCSTR d = p; + LPCTSTR d = p; while(*p && *p != ',' && *p != ':'){ p = CharNext(p); } @@ -414,67 +417,69 @@ STDMETHODIMP CControl::put_Exstyle(long newVal) STDMETHODIMP CControl::get_ClassName(BSTR *pVal) { - WCHAR wmes[MAX_PATH]; - MultiByteToWideChar(GetACP(),0,m_classname,-1,wmes,MAX_PATH); - *pVal = SysAllocString(wmes); + CComBSTR tmp(m_classname); + *pVal = tmp.Detach(); return S_OK; } STDMETHODIMP CControl::Refresh() { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; - } - ::SetWindowPos(m_hWnd,NULL,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_NOCOPYBITS); + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); + } + ::SetWindowPos( + m_hWnd, + NULL, + 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOCOPYBITS); return S_OK; } STDMETHODIMP CControl::get_HWND(long *pVal) { - *pVal = (long)m_hWnd; + *pVal = (long) m_hWnd; return S_OK; } -LPSTR CControl::ConvertVariantToString(VARIANT text) +HRESULT CControl::ConvertVariantToString(VARIANT text, ATL::CString &retval) { CComVariant varText; - if(varText.ChangeType(VT_BSTR,&text) != S_OK){ - // •¶Žš‚É•ÏŠ·‚Å‚«‚È‚¯‚ê‚Ή½‚à‚µ‚È‚¢ - return NULL; - } - int sz = WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,NULL,0,NULL,NULL); - LPSTR pBuf = new CHAR[sz+1]; - WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,pBuf,sz,NULL,NULL); - pBuf[sz] = 0; - return pBuf; + HRESULT hr = varText.ChangeType(VT_BSTR, &text); + if (FAILED(hr)) { + return hr; + } + + retval = varText.bstrVal; + return S_OK; } STDMETHODIMP CControl::AddString(VARIANT text,VARIANT* pRet) { - CComVariant ret; ::VariantInit(pRet); - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } - LPSTR pBuf; - if(!(pBuf = ConvertVariantToString(text))){ - return DISP_E_TYPEMISMATCH; + + ATL::CString buf; + HRESULT hr = ConvertVariantToString(text, buf); + if (FAILED(hr)) { + return hr; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + CComVariant ret; + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚É•¶Žš—ñ‚ð’ljÁ‚·‚é - ret = (short)SendMessage(m_hWnd,CB_ADDSTRING,0,(LPARAM)pBuf); + ret = (short)SendMessage(m_hWnd, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)buf); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚É•¶Žš—ñ‚ð’ljÁ‚·‚é - int nIdx = SendMessage(m_hWnd,LB_ADDSTRING,0,(LPARAM)pBuf); + int nIdx = SendMessage(m_hWnd, LB_ADDSTRING, 0, (LPARAM)(LPCTSTR)buf); + // ˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ðƒoƒCƒ“ƒh‚·‚é CComObject* pMap = NULL; IUnknown* pUnk = NULL; - if(pMap->CreateInstance(&pMap) == S_OK){ + if (pMap->CreateInstance(&pMap) == S_OK) { pMap->QueryInterface(IID_IUnknown,(void**)&pUnk); } ::SendMessage(m_hWnd,LB_SETITEMDATA,nIdx,(LPARAM)pUnk); @@ -485,194 +490,185 @@ STDMETHODIMP CControl::AddString(VARIANT text,VARIANT* pRet) int cnt = ListView_GetItemCount(m_hWnd); LVITEM item = {0}; item.mask = LVIF_TEXT; - item.pszText = pBuf; + item.pszText = buf.GetBuffer(); item.iItem = cnt; - int nIdx = ListView_InsertItem(m_hWnd,&item); + int nIdx = ListView_InsertItem(m_hWnd, &item); + // ƒTƒuƒJƒ‰ƒ€‚͋󕶂𖄂߂é - int i; - for(i = 1 ; i* pMap = NULL; IUnknown* pUnk = NULL; - if(pMap->CreateInstance(&pMap) == S_OK){ - pMap->QueryInterface(IID_IUnknown,(void**)&pUnk); + if (pMap->CreateInstance(&pMap) == S_OK) { + pMap->QueryInterface(IID_IUnknown, (void**)&pUnk); } LVITEM itm = {0}; itm.iItem = nIdx; itm.mask = LVIF_PARAM; - itm.lParam = (LPARAM)pUnk; - ListView_SetItem(m_hWnd,&itm); + itm.lParam = (LPARAM) pUnk; + ListView_SetItem(m_hWnd, &itm); ret = (short)nIdx; } - else if(!lstrcmp(m_classname,WC_TREEVIEW)){ + else if (!lstrcmp(m_classname, WC_TREEVIEW)) { // ƒcƒŠ[ƒrƒ…[‚̃‹[ƒg‚ɃAƒCƒeƒ€‚ðì¬‚·‚é IUnknown* pUnk = NULL; - CTreeItem::CreateTreeItem(m_hWnd,TVI_ROOT,pBuf,&pUnk); + CTreeItem::CreateTreeItem(m_hWnd,TVI_ROOT, buf, &pUnk); if(pUnk != NULL){ ret = (IUnknown*)pUnk; } } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - ret.Detach(pRet); - delete[]pBuf; - return retcode; + return ret.Detach(pRet); } STDMETHODIMP CControl::SetColumnText(VARIANT item, VARIANT col, VARIANT text) { - if(!m_hParent || !m_hWnd){ + if (!m_hParent || !m_hWnd) { ErrorInfo(IDS_ERR_DESTROYED); return DISP_E_EXCEPTION; } int nIdx = -1; int nCol = -1; - CComVariant varIdx,varCol; - if(varIdx.ChangeType(VT_I2,&item) == S_OK){ + CComVariant varIdx, varCol; + if (varIdx.ChangeType(VT_I2, &item) == S_OK) { nIdx = varIdx.iVal; } - if(varCol.ChangeType(VT_I2,&col) == S_OK){ + if (varCol.ChangeType(VT_I2, &col) == S_OK) { nCol = varCol.iVal; } - if(nIdx < 0 || nCol < 0){ + if (nIdx < 0 || nCol < 0) { // sEŒ…‚ªŽæ“¾‚Å‚«‚È‚©‚Á‚½ê‡ return DISP_E_TYPEMISMATCH; } - LPSTR pBuf; - if(!(pBuf = ConvertVariantToString(text))){ - return DISP_E_TYPEMISMATCH; + ATL::CString buf; + HRESULT hr = ConvertVariantToString(text, buf); + if (FAILED(hr)) { + return hr; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,WC_LISTVIEW)){ + if (!lstrcmp(m_classname, WC_LISTVIEW)) { int mx = ListView_GetItemCount(m_hWnd); - if(nIdx >= mx || nCol >= m_nColumnCount){ + if (nIdx >= mx || nCol >= m_nColumnCount) { // s‚Ü‚½‚ÍŒ…‚ªƒI[ƒo[‚µ‚Ä‚¢‚éê‡ - ErrorInfo(IDS_ERR_RANDEOUT); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_RANDEOUT); } - else{ + else { // ƒŠƒXƒgƒrƒ…[‚É•¶Žš—ñ‚ð’ljÁ‚·‚é - ListView_SetItemText(m_hWnd,nIdx,nCol,pBuf); + ListView_SetItemText(m_hWnd, nIdx, nCol, buf.GetBuffer()); } } - else{ + else { // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - delete[]pBuf; - return retcode; + return S_OK; } STDMETHODIMP CControl::GetColumnText(VARIANT idx, VARIANT col, VARIANT *pText) { CComVariant ret; - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } int nIdx = -1; int nCol = -1; - CComVariant varIdx,varCol; - if(varIdx.ChangeType(VT_I2,&idx) == S_OK){ + CComVariant varIdx, varCol; + if (varIdx.ChangeType(VT_I2, &idx) == S_OK) { nIdx = varIdx.iVal; } - if(varCol.ChangeType(VT_I2,&col) == S_OK){ + if (varCol.ChangeType(VT_I2, &col) == S_OK) { nCol = varCol.iVal; } - if(nIdx < 0 || nCol < 0){ - return DISP_E_TYPEMISMATCH; + + if (nIdx < 0 || nCol < 0) { + return DISP_E_BADINDEX; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,WC_LISTVIEW)){ + + if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒCƒ“ƒfƒbƒNƒX‚𒲍¸ int mx = ListView_GetItemCount(m_hWnd); - if(nIdx >= mx || nCol >= m_nColumnCount){ - ErrorInfo(IDS_ERR_RANDEOUT); - return DISP_E_EXCEPTION; + if (nIdx >= mx || nCol >= m_nColumnCount) { + return Error(IDS_ERR_RANDEOUT); } + // ƒŠƒXƒgƒrƒ…[‚©‚當Žš—ñ‚ðŽæ“¾‚·‚é - LPSTR pBuf = new CHAR[MAX_PATH+1]; - ListView_GetItemText(m_hWnd,nIdx,nCol,pBuf,MAX_PATH); + ATL::CString buf; + LPTSTR pBuf = buf.GetBufferSetLength(MAX_PATH); + ListView_GetItemText(m_hWnd, nIdx, nCol, pBuf, MAX_PATH); ret = pBuf; - delete[]pBuf; } - else{ + else { // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - ret.Detach(pText); - return retcode; + return ret.Detach(pText); } STDMETHODIMP CControl::get_ItemObject(VARIANT idx, VARIANT *pVal) { ::VariantInit(pVal); - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } int nIdx = -1; CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) == S_OK){ + if (varIdx.ChangeType(VT_I2,&idx) == S_OK) { nIdx = varIdx.iVal; } - if(nIdx < 0 ){ - return DISP_E_TYPEMISMATCH; + + if (nIdx < 0 ) { + return DISP_E_BADINDEX; } IUnknown* pUnk = NULL; - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"LISTBOX")){ + if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚©‚ç˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ðŽæ“¾‚·‚é int mx = ::SendMessage(m_hWnd,LB_GETCOUNT,0,0); - if(nIdx >= mx){ - ErrorInfo(IDS_ERR_RANDEOUT); - return DISP_E_EXCEPTION; + if (nIdx >= mx) { + return Error(IDS_ERR_RANDEOUT); } - DWORD data = ::SendMessage(m_hWnd,LB_GETITEMDATA ,nIdx,0); - if(data != LB_ERR && data){ - pUnk = (IUnknown*)data; + DWORD data = ::SendMessage(m_hWnd, LB_GETITEMDATA, nIdx, 0); + if (data != LB_ERR && data) { + pUnk = (IUnknown*) data; } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚©‚ç˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ðŽæ“¾‚·‚é int mx = ListView_GetItemCount(m_hWnd); - if(nIdx >= mx){ - ErrorInfo(IDS_ERR_RANDEOUT); - return DISP_E_EXCEPTION; + if (nIdx >= mx) { + return Error(IDS_ERR_RANDEOUT); } + LVITEM itm = {0}; itm.mask = LVIF_PARAM; itm.iItem = nIdx; - if(ListView_GetItem(m_hWnd,&itm)){ - if(itm.lParam){ - pUnk = (IUnknown*)itm.lParam; + if (ListView_GetItem(m_hWnd, &itm)) { + if (itm.lParam) { + pUnk = (IUnknown*) itm.lParam; } } } - else{ + else { // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - if(pUnk){ + + if (pUnk) { pUnk->AddRef(); pVal->vt = VT_UNKNOWN; pVal->punkVal = pUnk; } - return retcode; + return S_OK; } STDMETHODIMP CControl::DeleteAllItems() @@ -682,51 +678,49 @@ STDMETHODIMP CControl::DeleteAllItems() return DISP_E_EXCEPTION; } // ƒRƒ“ƒgƒ[ƒ‹‚Ì“à•”ƒAƒCƒeƒ€‚ÉŠÖ˜A•t‚¯‚ç‚ê‚Ä‚¢‚½˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ð‰ð•ú‚·‚é - if(!lstrcmp(m_classname,"LISTBOX")){ + if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒg‚̉ð•ú - int mx = ::SendMessage(m_hWnd,CB_GETCOUNT,0,0); - int i; - for(i=0;iRelease(); + int mx = ::SendMessage(m_hWnd, CB_GETCOUNT, 0, 0); + for (int i = 0; i < mx; i++) { + DWORD data = ::SendMessage(m_hWnd, LB_GETITEMDATA, i, 0); + if (data != LB_ERR && data) { + ((IUnknown*) data)->Release(); } } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚̘A‘z”z—ñ‚̉ð•ú int mx = ListView_GetItemCount(m_hWnd); LVITEM itm = {0}; - int i; - for(i=0;iRelease(); + if (ListView_GetItem(m_hWnd,&itm)) { + if (itm.lParam) { + ((IUnknown*) itm.lParam)->Release(); } } } } - else if(!lstrcmp(m_classname,WC_TREEVIEW)){ + else if (!lstrcmp(m_classname, WC_TREEVIEW)) { // ƒcƒŠ[ƒrƒ…[‚̘A‘z”z—ñ‚̉ð•ú HTREEITEM hItem = TreeView_GetRoot(m_hWnd); - while(hItem){ + while (hItem) { HTREEITEM hNextItem = TreeView_GetNextSibling(m_hWnd,hItem); - CTreeItem::DeleteTreeItemWithData(m_hWnd,hItem); + CTreeItem::DeleteTreeItemWithData(m_hWnd, hItem); hItem = hNextItem; } } // ˜A‘z”z—ñ‚ð‚à‚½‚È‚¢ƒRƒ“ƒgƒ[ƒ‹‚̏‰Šú‰» - else if(!lstrcmp(m_classname,"COMBOBOX")){ + else if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // COMBOBOX - int cnt = ::SendMessage(m_hWnd,CB_GETCOUNT,0,0); - while(cnt > 0){ - ::SendMessage(m_hWnd,CB_DELETESTRING,0,0); + int cnt = ::SendMessage(m_hWnd, CB_GETCOUNT, 0, 0); + while (cnt > 0) { + ::SendMessage(m_hWnd, CB_DELETESTRING, 0, 0); cnt--; } } - else if(!lstrcmp(m_classname,"EDIT")){ + else if (!lstrcmp(m_classname, _TEXT("EDIT"))) { // EditB CComVariant dmy(L""); put_Text(dmy.bstrVal); @@ -735,160 +729,159 @@ STDMETHODIMP CControl::DeleteAllItems() } STDMETHODIMP CControl::DeleteString(VARIANT idx, VARIANT *pRet) { - CComVariant ret; ::VariantInit(pRet); - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } int nIdx = -1; CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) == S_OK){ + if (varIdx.ChangeType(VT_I2, &idx) == S_OK) { nIdx = varIdx.iVal; } - if(nIdx < 0 ){ - return DISP_E_TYPEMISMATCH; + if (nIdx < 0 ) { + return DISP_E_BADINDEX; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + CComVariant ret; + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚©‚當Žš—ñ‚ðíœ‚·‚é - int mx = ::SendMessage(m_hWnd,CB_GETCOUNT,0,0); - if(nIdx >= mx){ - ErrorInfo(IDS_ERR_RANDEOUT); - return DISP_E_EXCEPTION; + int mx = ::SendMessage(m_hWnd,CB_GETCOUNT, 0, 0); + if (nIdx >= mx) { + return Error(IDS_ERR_RANDEOUT); } - int result = ::SendMessage(m_hWnd,CB_DELETESTRING,nIdx,0); + int result = ::SendMessage(m_hWnd,CB_DELETESTRING, nIdx, 0); ret = (bool)(result != LB_ERR); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚©‚當Žš—ñ‚ðíœ‚·‚é - int mx = ::SendMessage(m_hWnd,LB_GETCOUNT,0,0); - if(nIdx >= mx){ - ErrorInfo(IDS_ERR_RANDEOUT); - return DISP_E_EXCEPTION; + int mx = ::SendMessage(m_hWnd, LB_GETCOUNT, 0, 0); + if (nIdx >= mx) { + return Error(IDS_ERR_RANDEOUT); } + // ˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ð”jŠü‚·‚é - DWORD data = ::SendMessage(m_hWnd,LB_GETITEMDATA ,nIdx,0); - if(data != LB_ERR && data){ + DWORD data = ::SendMessage(m_hWnd,LB_GETITEMDATA, nIdx, 0); + if (data != LB_ERR && data) { ((IUnknown*)data)->Release(); } + // íœ - int result = ::SendMessage(m_hWnd,LB_DELETESTRING,nIdx,0); + int result = ::SendMessage(m_hWnd, LB_DELETESTRING, nIdx, 0); ret = (bool)(result != LB_ERR); } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚©‚當Žš—ñ‚ðíœ‚·‚é int mx = ListView_GetItemCount(m_hWnd); - if(nIdx >= mx){ - ErrorInfo(IDS_ERR_RANDEOUT); - return DISP_E_EXCEPTION; + if (nIdx >= mx) { + return Error(IDS_ERR_RANDEOUT); } + // ˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ð”jŠü‚·‚é LVITEM itm = {0}; itm.mask = LVIF_PARAM; itm.iItem = nIdx; - if(ListView_GetItem(m_hWnd,&itm)){ - if(itm.lParam){ - ((IUnknown*)itm.lParam)->Release(); + if (ListView_GetItem(m_hWnd,&itm)) { + if (itm.lParam) { + ((IUnknown*) itm.lParam)->Release(); } } + // íœ - ret = (bool)(ListView_DeleteItem(m_hWnd,nIdx)?true:false); + ret = ListView_DeleteItem(m_hWnd, nIdx) ? true : false; } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - *pRet = ret; - return retcode; + + return ret.Detach(pRet); } STDMETHODIMP CControl::GetCount(VARIANT *pRet) { - CComVariant ret; ::VariantInit(pRet); - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + + if (!m_hParent || !m_hWnd){ + return Error(IDS_ERR_DESTROYED); } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + CComVariant ret; + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚̃JƒEƒ“ƒg - int mx = ::SendMessage(m_hWnd,CB_GETCOUNT,0,0); - if(mx == LB_ERR) mx = 0; + int mx = ::SendMessage(m_hWnd, CB_GETCOUNT, 0, 0); + if (mx == LB_ERR) { + mx = 0; + } ret = (short)mx; } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚̃JƒEƒ“ƒg - int mx = ::SendMessage(m_hWnd,LB_GETCOUNT,0,0); - if(mx == LB_ERR) mx = 0; + int mx = ::SendMessage(m_hWnd, LB_GETCOUNT, 0, 0); + if (mx == LB_ERR) { + mx = 0; + } ret = (short)mx; } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚̃JƒEƒ“ƒg ret = (short)ListView_GetItemCount(m_hWnd); } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - ret.Detach(pRet); - return retcode; + return ret.Detach(pRet); } STDMETHODIMP CControl::get_CurrentSelectedItem(VARIANT *pVal) { ::VariantInit(pVal); - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } CComVariant ret; - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ð‚ð•Ô‚· - ret = (long)::SendMessage(m_hWnd,CB_GETCURSEL,0,0); + ret = (long)::SendMessage(m_hWnd, CB_GETCURSEL, 0, 0); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if(!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ðƒAƒCƒeƒ€‚ð•Ô‚· - if(!(m_style & LBS_MULTIPLESEL)){ + if (!(m_style & LBS_MULTIPLESEL)) { // ƒVƒ“ƒOƒ‹ƒZƒŒƒNƒg‚̏ꍇ - ret = (long)::SendMessage(m_hWnd,LB_GETCURSEL,0,0); + ret = (long)::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0); } else{ // ƒ}ƒ‹ƒ`ƒZƒŒƒNƒg‚̏ꍇ‚͍ŏ‰‚Ì‘I‘ðƒAƒCƒeƒ€‚ð•Ô‚· ret = (long)-1; int mx = ::SendMessage(m_hWnd,LB_GETCOUNT,0,0); - if(mx > 0){ - long* pBuf = new long[mx+1]; - int cnt = ::SendMessage(m_hWnd,LB_GETSELITEMS,mx,(LPARAM)pBuf); - if(cnt != LB_ERR && cnt > 0){ - ret = (long)pBuf[0]; + if (mx > 0) { + std::vector buf(mx + 1); + long* pBuf = &buf[0]; + int cnt = ::SendMessage(m_hWnd, LB_GETSELITEMS, mx, (LPARAM)pBuf); + if (cnt != LB_ERR && cnt > 0) { + ret = buf[0]; } - delete[]pBuf; } } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚̍ŏ‰‚Ì‘I‘ðƒAƒCƒeƒ€‚ð’T‚· ret = (long)ListView_GetNextItem(m_hWnd,-1,LVNI_SELECTED); } - else if(!lstrcmp(m_classname,WC_TREEVIEW)){ + else if (!lstrcmp(m_classname, WC_TREEVIEW)) { // ƒcƒŠ[ƒrƒ…[‚ÌŽw’èƒAƒCƒeƒ€‚Ì‘®«‚𒲂ׂé HTREEITEM hItem = TreeView_GetSelection(m_hWnd); - if(hItem){ + if (hItem) { CComObject* pItem = NULL; - if(pItem->CreateInstance(&pItem) == S_OK){ + if (pItem->CreateInstance(&pItem) == S_OK) { pItem->AddRef(); pItem->SetParam(m_hWnd,hItem); IUnknown* pUnk = NULL; - if(pItem->QueryInterface(IID_IUnknown,(void**)&pUnk) == S_OK){ + if (pItem->QueryInterface(IID_IUnknown, (void**)&pUnk) == S_OK) { ret = pUnk; } } @@ -896,63 +889,56 @@ STDMETHODIMP CControl::get_CurrentSelectedItem(VARIANT *pVal) } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - ret.Detach(pVal); - return retcode; + return ret.Detach(pVal); } STDMETHODIMP CControl::put_CurrentSelectedItem(VARIANT newVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } - HRESULT retcode = S_OK; long nIdx = -1; CComVariant varIdx; if(varIdx.ChangeType(VT_I4,&newVal) == S_OK){ nIdx = varIdx.lVal; } - if(!lstrcmp(m_classname,"COMBOBOX")){ + + if( !lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚ð‘I‘ð‚ðŽw’è‚·‚é - ::SendMessage(m_hWnd,CB_SETCURSEL,nIdx,0); + ::SendMessage(m_hWnd, CB_SETCURSEL, nIdx, 0); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚Ì‘I‘ð - if(!(m_style & LBS_MULTIPLESEL)){ + if (!(m_style & LBS_MULTIPLESEL)) { // ƒVƒ“ƒOƒ‹ƒZƒŒƒNƒg‚̏ꍇ - ::SendMessage(m_hWnd,LB_SETCURSEL,nIdx,0); + ::SendMessage(m_hWnd, LB_SETCURSEL, nIdx, 0); } - else{ + else { // ƒ}ƒ‹ƒ`ƒZƒŒƒNƒg‚̏ꍇ - int mx = ::SendMessage(m_hWnd,LB_GETCOUNT,0,0); - int i; - for(i=0;i= 0 && nIdx < mx){ - ::SendMessage(m_hWnd,LB_SETSEL,true,nIdx); + if (nIdx >= 0 && nIdx < mx) { + ::SendMessage(m_hWnd, LB_SETSEL, TRUE, nIdx); } } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚Ì‘I‘ð int mx = ListView_GetItemCount(m_hWnd); - int i; - for(i = 0 ; i= 0 && nIdx < mx){ - ListView_SetItemState(m_hWnd,i,LVIS_SELECTED ,LVIS_SELECTED); + ListView_SetItemState(m_hWnd, -1, LVIS_SELECTED, 0); // TODO:—vŠm”F -1‚Å‘SƒAƒCƒeƒ€‘ΏہAˆÈ‘O‚Ímx‰ñƒ‹[ƒv‚µ‚Ä‚¢‚½B + if (nIdx >= 0 && nIdx < mx) { + // FIXME:TODO: —vŠm”F@nIdx‚Å‚Í‚È‚­i‚ðŽg‚Á‚Ä‚¢‚½H³‚µ‚¢‚Æ‚ÍŽv‚¦‚È‚¢B + ListView_SetItemState(m_hWnd, nIdx, LVIS_SELECTED, LVIS_SELECTED); } } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } return S_OK; } @@ -960,81 +946,77 @@ STDMETHODIMP CControl::put_CurrentSelectedItem(VARIANT newVal) STDMETHODIMP CControl::get__NewEnum(IUnknown **pVal) { *pVal = NULL; + if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_DESTROYED); } - VARIANT* pvarArray = NULL; + std::vector varArray; int mx = 0; - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ð‚ð•Ô‚· int nIdx = ::SendMessage(m_hWnd,CB_GETCURSEL,0,0); mx = 1; - pvarArray = new VARIANT[1]; - ::VariantInit(&pvarArray[0]); - pvarArray[0].vt = VT_I2; - pvarArray[0].iVal = nIdx; + varArray.resize(1); + ::VariantInit(&varArray[0]); + varArray[0].vt = VT_I2; + varArray[0].iVal = nIdx; } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ðƒAƒCƒeƒ€‚ð•Ô‚· - if(!(m_style & LBS_MULTIPLESEL)){ + if (!(m_style & LBS_MULTIPLESEL)) { // ƒVƒ“ƒOƒ‹ƒZƒŒƒNƒg‚̏ꍇ - int nIdx = ::SendMessage(m_hWnd,LB_GETCURSEL,0,0); + int nIdx = ::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0); mx = 1; - pvarArray = new VARIANT[1]; - ::VariantInit(&pvarArray[0]); - pvarArray[0].vt = VT_I2; - pvarArray[0].iVal = nIdx; + varArray.resize(1); + ::VariantInit(&varArray[0]); + varArray[0].vt = VT_I2; + varArray[0].iVal = nIdx; } else{ // ƒ}ƒ‹ƒ`ƒZƒŒƒNƒg‚̏ꍇ‚͍ŏ‰‚Ì‘I‘ðƒAƒCƒeƒ€‚ð•Ô‚· int sz = ::SendMessage(m_hWnd,LB_GETCOUNT,0,0); - long* pBuf = new long[sz+1]; - mx = ::SendMessage(m_hWnd,LB_GETSELITEMS,sz,(LPARAM)pBuf); - if(mx != LB_ERR){ + std::vector buf(sz + 1); + long* pBuf = &buf[0]; + mx = ::SendMessage(m_hWnd, LB_GETSELITEMS, sz, (LPARAM)pBuf); + if (mx != LB_ERR) { // ‘I‘ð‚ª•Ô‚³‚ꂽê‡ - pvarArray = new VARIANT[mx+1]; - int i; - for(i=0 ; i* pCol = NULL; - if(pCol->CreateInstance(&pCol) == S_OK){ + if (CComObject::CreateInstance(&pCol) == S_OK) { pCol->AddRef(); - pCol->Init(&pvarArray[0],&pvarArray[mx],pCol,AtlFlagCopy); + pCol->Init(&varArray[0], &varArray[mx], pCol, AtlFlagCopy); *pVal = pCol; } - delete[]pvarArray; return S_OK; } @@ -1055,90 +1037,86 @@ STDMETHODIMP CControl::get_ItemSelectState(VARIANT idx, VARIANT *pVal) nIdx = idx.iVal; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ð‚ð•Ô‚· - int nSel = ::SendMessage(m_hWnd,CB_GETCURSEL,0,0); + int nSel = ::SendMessage(m_hWnd, CB_GETCURSEL, 0, 0); // Žw’肵‚½ƒAƒCƒeƒ€‚Æ‘I‘ð‚ªˆê’v‚µ‚Ä‚¢‚ê‚Îtrue ret = (bool)((nSel == nIdx)?true:false); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ðƒAƒCƒeƒ€‚ð•Ô‚· - if(!(m_style & LBS_MULTIPLESEL)){ + if (!(m_style & LBS_MULTIPLESEL)) { // ƒVƒ“ƒOƒ‹ƒZƒŒƒNƒg‚̏ꍇ - int nSel = ::SendMessage(m_hWnd,LB_GETCURSEL,0,0); + int nSel = ::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0); // Žw’肵‚½ƒAƒCƒeƒ€‚Æ‘I‘ð‚ªˆê’v‚µ‚Ä‚¢‚ê‚Îtrue - ret = (bool)((nSel == nIdx)?true:false); + ret = (nSel == nIdx); } else{ // ƒ}ƒ‹ƒ`ƒZƒŒƒNƒg‚̏ꍇ - ret = (bool)(::SendMessage(m_hWnd,LB_GETSEL,nIdx,0)>0?true:false); + ret = ::SendMessage(m_hWnd, LB_GETSEL, nIdx, 0) > 0; } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚ÌŽw’èƒAƒCƒeƒ€‚Ì‘®«‚𒲂ׂé int mx = ListView_GetItemCount(m_hWnd); - if(nIdx >= 0 && nIdx < mx){ - UINT state = ListView_GetItemState(m_hWnd,nIdx,LVNI_SELECTED); - ret = (bool)((state & LVNI_SELECTED)?true:false); + if (nIdx >= 0 && nIdx < mx) { + UINT state = ListView_GetItemState(m_hWnd, nIdx, LVNI_SELECTED); + ret = (state & LVNI_SELECTED) != 0; } } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } ret.Detach(pVal); - return retcode; + return S_OK; } STDMETHODIMP CControl::put_ItemSelectState(VARIANT idx, VARIANT newVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } int nIdx = -1; CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) == S_OK){ + if (varIdx.ChangeType(VT_I2,&idx) == S_OK) { nIdx = idx.iVal; } - BOOL bSelected = false; + + bool bSelected = false; CComVariant varSelected; - if(varSelected.ChangeType(VT_I2,&newVal) == S_OK){ - bSelected = newVal.iVal; + if (varSelected.ChangeType(VT_I2,&newVal) == S_OK) { + bSelected = newVal.iVal != 0; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ð‚ð•ÏX‚·‚é - ::SendMessage(m_hWnd,CB_SETCURSEL,bSelected?nIdx:-1,0); + ::SendMessage(m_hWnd, CB_SETCURSEL, bSelected ? nIdx : -1, 0); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚ÌŒ»Ý‚Ì‘I‘ðƒAƒCƒeƒ€‚ð•Ô‚· - if(!(m_style & LBS_MULTIPLESEL)){ + if (!(m_style & LBS_MULTIPLESEL)) { // ƒVƒ“ƒOƒ‹ƒZƒŒƒNƒg‚̏ꍇ - ::SendMessage(m_hWnd,LB_SETCURSEL,bSelected?nIdx:-1,0); + ::SendMessage(m_hWnd, LB_SETCURSEL, bSelected ? nIdx : -1, 0); } - else{ + else { // ƒ}ƒ‹ƒ`ƒZƒŒƒNƒg - ::SendMessage(m_hWnd,LB_SETSEL,nIdx,bSelected); + ::SendMessage(m_hWnd, LB_SETSEL, nIdx, bSelected); } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if(!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚ÌŽw’èƒAƒCƒeƒ€‚Ì‘®«‚𒲂ׂé int mx = ListView_GetItemCount(m_hWnd); - if(nIdx >= 0 && nIdx < mx){ - ListView_SetItemState(m_hWnd,nIdx,bSelected?LVNI_SELECTED:0,LVNI_SELECTED); + if (nIdx >= 0 && nIdx < mx) { + ListView_SetItemState(m_hWnd, nIdx, bSelected ? LVNI_SELECTED : 0, LVNI_SELECTED); } } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - return retcode; + return S_OK; } STDMETHODIMP CControl::get_SelectedCount(short *pVal) @@ -1149,33 +1127,31 @@ STDMETHODIMP CControl::get_SelectedCount(short *pVal) return DISP_E_EXCEPTION; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚̃JƒEƒ“ƒg int nIdx = ::SendMessage(m_hWnd,CB_GETCURSEL,0,0); *pVal = (short)(nIdx>=0?1:0); } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚̃JƒEƒ“ƒg - if(!(m_style & LBS_MULTIPLESEL)){ - int nIdx = ::SendMessage(m_hWnd,LB_GETCURSEL,0,0); - *pVal = (short)(nIdx>=0?1:0); + if (!(m_style & LBS_MULTIPLESEL)) { + int nIdx = ::SendMessage(m_hWnd, LB_GETCURSEL, 0, 0); + *pVal = (short)(nIdx >= 0 ? 1 : 0); } else{ // ƒ}ƒ‹ƒ`ƒZƒŒƒNƒg - *pVal = (short)::SendMessage(m_hWnd,LB_GETSELCOUNT,0,0); + *pVal = (short)::SendMessage(m_hWnd, LB_GETSELCOUNT, 0, 0); } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[‚̃JƒEƒ“ƒg *pVal = (short)ListView_GetSelectedCount(m_hWnd); } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - return retcode; + return S_OK; } STDMETHODIMP CControl::get_TreeRoot(VARIANT *pVal) @@ -1203,57 +1179,60 @@ STDMETHODIMP CControl::get_TreeRoot(VARIANT *pVal) void CControl::ListSort(int column) { - if(!m_hParent || !m_hWnd){ + if (!m_hParent || !m_hWnd) { return; } + // ‚¨‚È‚¶ƒJƒ‰ƒ€‚ðƒ\[ƒg‚µ‚½ê‡‚Í‹t‡‚Æ‚·‚é - if(m_dLastSortColumn == column){ + if (m_dLastSortColumn == column) { m_bSortReverse = !m_bSortReverse; } - else{ + else { m_bSortReverse = false; } + m_dLastSortColumn = column; m_typCompare = VT_EMPTY; // ƒ\[ƒg‚ðŒÄ‚яo‚· - ListView_SortItems(m_hWnd,CompareFunc,(LPARAM)this); + ListView_SortItems(m_hWnd, CompareFunc, (LPARAM)this); } int CControl::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { - if(!lParam1 || !lParam2){ + if (!lParam1 || !lParam2) { // ƒCƒŒƒMƒ…ƒ‰[Bƒf[ƒ^[‚ª‚È‚¢‚Ì‚Å”äŠr•s‰Â”\ return 0; } + CControl* me = (CControl*)lParamSort; IObjectMap* pMap1 = (IObjectMap*)lParam1; IObjectMap* pMap2 = (IObjectMap*)lParam2; - CHAR mes[16]; - wsprintf(mes,"SORT%d",me->m_dLastSortColumn); + TCHAR mes[16]; + wsprintf(mes, _TEXT("SORT%d"), me->m_dLastSortColumn); CComVariant key(mes); CComVariant val1,val2; - if(!me->m_bSortReverse){ - pMap1->get_Value(key,&val1); - pMap2->get_Value(key,&val2); + if (!me->m_bSortReverse) { + pMap1->get_Value(key, &val1); + pMap2->get_Value(key, &val2); } else{ - pMap1->get_Value(key,&val2); - pMap2->get_Value(key,&val1); + pMap1->get_Value(key, &val2); + pMap2->get_Value(key, &val1); } - if(me->m_typCompare == VT_EMPTY){ + if (me->m_typCompare == VT_EMPTY) { // ‚Ü‚¾”äŠr‚ðŠJŽn‚µ‚Ä‚¢‚È‚¢‚È‚ç”äŠrƒ^ƒCƒv‚ðŒˆ’è‚·‚é me->m_typCompare = val1.vt; - if(val1.vt != val2.vt){ + if (val1.vt != val2.vt) { me->m_typCompare = VT_BSTR; } } int ret = 0; - switch(me->m_typCompare) + switch (me->m_typCompare) { case VT_UI1: { @@ -1294,7 +1273,7 @@ int CControl::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { val1.ChangeType(VT_CY); val2.ChangeType(VT_CY); - ret = (int)(val1.cyVal.int64 - val2.cyVal.int64); //UNDONE: ‚æ‚낵‚­‚È‚¢BŒ¸ŽZŒ‹‰Ê‚ªŒ…‚ ‚ӂꂵ‚½ê‡A”äŠrŠÖ”‚ª”j’]‚·‚éB‚È‚¨‚³‚˂΁B + ret = (int)(val1.cyVal.int64 - val2.cyVal.int64); //FIXME: ‚æ‚낵‚­‚È‚¢BŒ¸ŽZŒ‹‰Ê‚ªŒ…‚ ‚ӂꂵ‚½ê‡A”äŠrŠÖ”‚ª”j’]‚·‚éB‚È‚¨‚³‚˂΁B break; } case VT_DATE: @@ -1320,13 +1299,14 @@ int CControl::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) void CControl::OnRClick() { - if(!m_hParent || !m_hWnd){ + if (!m_hParent || !m_hWnd) { return; } - if(!lstrcmp(m_classname,WC_TREEVIEW)){ + + if (!lstrcmp(m_classname, WC_TREEVIEW)) { // ƒcƒŠ[ƒrƒ…[‚Å‚ ‚ê‚΃hƒƒbƒvƒnƒCƒ‰ƒCƒg‚ð‘I‘ð‚É‚·‚é HTREEITEM hItem = TreeView_GetDropHilight(m_hWnd); - if(hItem){ + if (hItem) { TreeView_SelectItem(m_hWnd,hItem); } } @@ -1335,167 +1315,166 @@ void CControl::OnRClick() STDMETHODIMP CControl::get_ItemCheckState(VARIANT idx, BOOL *pVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } - if(lstrcmp(m_classname,WC_LISTVIEW)){ + + if (lstrcmp(m_classname, WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[ˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } + CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) != S_OK){ - return DISP_E_TYPEMISMATCH; + HRESULT hr = varIdx.ChangeType(VT_I2, &idx); + if (FAILED(hr)) { + return hr; } + *pVal = VB_FALSE; - if(m_afterstyle & LVS_EX_CHECKBOXES){ - *pVal = ListView_GetCheckState(m_hWnd,varIdx.iVal)?VB_TRUE:VB_FALSE; + if (m_afterstyle & LVS_EX_CHECKBOXES) { + *pVal = ListView_GetCheckState(m_hWnd, varIdx.iVal) ? VB_TRUE : VB_FALSE; } return S_OK; } STDMETHODIMP CControl::put_ItemCheckState(VARIANT idx, BOOL newVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } - if(lstrcmp(m_classname,WC_LISTVIEW)){ + + if (lstrcmp(m_classname,WC_LISTVIEW)) { // ƒŠƒXƒgƒrƒ…[ˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } + CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) != S_OK){ - return DISP_E_TYPEMISMATCH; + HRESULT hr = varIdx.ChangeType(VT_I2, &idx); + if (FAILED(hr)) { + return hr; } - if(m_afterstyle & LVS_EX_CHECKBOXES){ - ListView_SetCheckState(m_hWnd,varIdx.iVal,newVal); + + if (m_afterstyle & LVS_EX_CHECKBOXES) { + ListView_SetCheckState(m_hWnd, varIdx.iVal, newVal); } return S_OK; } STDMETHODIMP CControl::DeleteSelectedItem() { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"LISTBOX")){ + + if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒgƒ{ƒbƒNƒX‚Ì‘I‘ðíœ - CComVariant varRet,dmy; - while(get_CurrentSelectedItem(&varRet) == S_OK && varRet.vt != VT_EMPTY){ + CComVariant varRet, dmy; + while (get_CurrentSelectedItem(&varRet) == S_OK && varRet.vt != VT_EMPTY) { varRet.ChangeType(VT_I4); - if(varRet.lVal < 0){ + if (varRet.lVal < 0) { break; } - DeleteString(varRet,&dmy); + DeleteString(varRet, &dmy); } } else if(!lstrcmp(m_classname,WC_LISTVIEW)){ // ƒŠƒXƒgƒrƒ…[‚̍폜 int nIdx = -1; - while((nIdx = ListView_GetNextItem(m_hWnd,nIdx,LVNI_SELECTED)) != -1){ - CComVariant varIdx((long)nIdx),dmy; - DeleteString(varIdx,&dmy); + while ((nIdx = ListView_GetNextItem(m_hWnd, nIdx, LVNI_SELECTED)) != -1) { + CComVariant varIdx((long)nIdx), dmy; + DeleteString(varIdx, &dmy); nIdx = -1; } } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } return S_OK; } STDMETHODIMP CControl::get_ItemText(VARIANT idx, BSTR *pVal) { - _bstr_t tmp; if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_DESTROYED); } + int nIdx = -1; CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) == S_OK){ + if (varIdx.ChangeType(VT_I2,&idx) == S_OK) { nIdx = varIdx.iVal; } + if(nIdx < 0){ return DISP_E_TYPEMISMATCH; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,"COMBOBOX")){ + CComBSTR ret; + if (!lstrcmp(m_classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒzƒ{ƒbƒNƒX‚©‚當Žš—ñ‚ðŽæ“¾‚·‚é - int siz = ::SendMessage(m_hWnd,CB_GETLBTEXTLEN,nIdx,0); - if(siz > 0){ - LPTSTR p = new CHAR[siz+1]; - if(::SendMessage(m_hWnd,CB_GETLBTEXT,nIdx,(LPARAM)p) > 0){ - tmp = (LPCSTR)p; + int siz = ::SendMessage(m_hWnd, CB_GETLBTEXTLEN, nIdx, 0); + if (siz > 0) { + ATL::CString tmp; + LPTSTR p = tmp.GetBufferSetLength(siz + 1); + if (::SendMessage(m_hWnd, CB_GETLBTEXT, nIdx, (LPARAM)p) > 0) { + ret = p; } - delete[]p; } } - else if(!lstrcmp(m_classname,"LISTBOX")){ + else if (!lstrcmp(m_classname, _TEXT("LISTBOX"))) { // ƒŠƒXƒg‚©‚當Žš—ñ‚ðŽæ“¾‚·‚é - int siz = ::SendMessage(m_hWnd,LB_GETTEXTLEN,nIdx,0); - if(siz > 0){ - LPTSTR p = new CHAR[siz+1]; - if(::SendMessage(m_hWnd,LB_GETTEXT,nIdx,(LPARAM)p) > 0){ - tmp = (LPCSTR)p; + int siz = ::SendMessage(m_hWnd, LB_GETTEXTLEN, nIdx, 0); + if (siz > 0) { + ATL::CString tmp; + LPTSTR p = tmp.GetBufferSetLength(siz + 1); + if (::SendMessage(m_hWnd, LB_GETTEXT, nIdx, (LPARAM)p) > 0) { + ret = p; } - delete[]p; } } - else if(!lstrcmp(m_classname,WC_LISTVIEW)){ - CComVariant arg,ret; + else if (!lstrcmp(m_classname, WC_LISTVIEW)) { + CComVariant arg, text; arg = (long)0; - if((retcode = GetColumnText(idx,arg,&ret)) == S_OK){ - if(ret.ChangeType(VT_BSTR) == S_OK){ - tmp = ret.bstrVal; + HRESULT hr; + if (SUCCEEDED(GetColumnText(idx, arg, &text))) { + if (SUCCEEDED(text.ChangeType(VT_BSTR))) { + ret = text.bstrVal; } } } else{ // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return Error(IDS_ERR_NOTSUPPORTCONTROL); } - *pVal = tmp.copy(); - return retcode; + *pVal = ret.Detach(); + return S_OK; } STDMETHODIMP CControl::put_ItemText(VARIANT idx, BSTR newVal) { - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } + int nIdx = -1; CComVariant varIdx; - if(varIdx.ChangeType(VT_I2,&idx) == S_OK){ + if (varIdx.ChangeType(VT_I2, &idx) == S_OK) { nIdx = varIdx.iVal; } - if(nIdx < 0){ - return DISP_E_TYPEMISMATCH; + + if (nIdx < 0) { + return DISP_E_BADINDEX; } - HRESULT retcode = S_OK; - if(!lstrcmp(m_classname,WC_LISTVIEW)){ - CComVariant arg,text; + if (!lstrcmp(m_classname, WC_LISTVIEW)) { + CComVariant arg, text; arg = (long)0; text = (BSTR)newVal; - retcode = SetColumnText(idx,arg,text); - } - else{ - // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO - ErrorInfo(IDS_ERR_NOTSUPPORTCONTROL); - retcode = DISP_E_EXCEPTION; + return SetColumnText(idx, arg, text); } - return retcode; + + // ‚»‚êˆÈŠO‚̓Tƒ|[ƒgŠO + return Error(IDS_ERR_NOTSUPPORTCONTROL); } STDMETHODIMP CControl::SetClassEvent(BSTR name,VARIANT* pvarUnk) @@ -1513,27 +1492,28 @@ void CControl::GetClassEvent(BSTR *pEventName) STDMETHODIMP CControl::CreateChild(VARIANT text, VARIANT varItem, VARIANT* pvarUnk) { ::VariantInit(pvarUnk); - if(!m_hParent || !m_hWnd){ - ErrorInfo(IDS_ERR_DESTROYED); - return DISP_E_EXCEPTION; + if (!m_hParent || !m_hWnd) { + return Error(IDS_ERR_DESTROYED); } + // ƒAƒCƒeƒ€‚ÌŒŸØ CComVariant tmp; - if(tmp.ChangeType(VT_UNKNOWN,&varItem) == S_OK){ + if (tmp.ChangeType(VT_UNKNOWN, &varItem) == S_OK) { ITreeItem * pItem = NULL; - if(tmp.punkVal->QueryInterface(IID_ITreeItem,(void**)&pItem) != S_OK){ + if (tmp.punkVal->QueryInterface(IID_ITreeItem, (void**) &pItem) != S_OK) { return DISP_E_UNKNOWNINTERFACE; } + IUnknown* pUnk = NULL; - if(pItem->Create(text,&pUnk) == S_OK){ + if (pItem->Create(text,&pUnk) == S_OK) { pvarUnk->vt = VT_UNKNOWN; pvarUnk->punkVal = pUnk; } pItem->Release(); } else{ - tmp.ChangeType(VT_VARIANT,&varItem); - if(tmp.vt == VT_ERROR || tmp.vt == VT_NULL || tmp.vt == VT_EMPTY){ + tmp.ChangeType(VT_VARIANT, &varItem); + if (tmp.vt == VT_ERROR || tmp.vt == VT_NULL || tmp.vt == VT_EMPTY) { // ƒ‹[ƒgã‚ɃAƒCƒeƒ€‚ðì¬‚·‚é AddString(text,pvarUnk); } diff --git a/Control.h b/Control.h index 487a2bc..f23c635 100644 --- a/Control.h +++ b/Control.h @@ -10,7 +10,7 @@ // CControl class ATL_NO_VTABLE CControl : public CComObjectRootEx, -// public CComCoClass, + public CComCoClass, public ISupportErrorInfo, public IConnectionPointContainerImpl, public IDispatchImpl @@ -34,32 +34,36 @@ public: m_nColumnCount = 0; m_dLastSortColumn = -1; //ÅŒã‚Ƀ\[ƒg‚µ‚½ƒJƒ‰ƒ€ } - void SetParam(DWORD afterstyle,DWORD exstyle,LPCSTR classname,LPCSTR caption,DWORD style,int x,int y,int w,int h,int nID) + + void SetParam(DWORD afterstyle, DWORD exstyle, LPCTSTR classname, LPCTSTR caption, DWORD style, int x, int y, int w, int h, int nID) { - CHAR tmp[64]; - wsprintf(tmp,"OnCommand%d",nID); + TCHAR tmp[64]; + wsprintf(tmp, _T("OnCommand%d"), nID); m_x = x; m_y = y; m_h = h; m_w = w; - m_exstyle = exstyle; - m_style = style; - lstrcpy(m_classname,classname); - lstrcpy(m_caption,caption); - m_nID = nID; + m_exstyle = exstyle; + m_style = style; + lstrcpy(m_classname, classname); + lstrcpy(m_caption, caption); + m_nID = nID; m_bstrClassEvent = tmp; m_hWnd = NULL; m_hParent = NULL; m_afterstyle = afterstyle; } + HWND GetHWnd() { return m_hWnd; } + void Redraw() { - RedrawWindow(m_hWnd,NULL,NULL,RDW_ERASE|RDW_FRAME|RDW_INTERNALPAINT|RDW_INVALIDATE); + RedrawWindow(m_hWnd, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INTERNALPAINT | RDW_INVALIDATE); } + void SetFont(HFONT hFont) { if(m_hWnd){ @@ -183,7 +187,7 @@ protected: VARTYPE m_typCompare; int m_dLastSortColumn; int m_nColumnCount; - LPSTR ConvertVariantToString(VARIANT text); + HRESULT ConvertVariantToString(VARIANT text, ATL::CString &retval); }; #endif //__CONTROL_H_ diff --git a/Draw.cpp b/Draw.cpp index 7fb3f55..83762e3 100644 --- a/Draw.cpp +++ b/Draw.cpp @@ -64,7 +64,7 @@ STDMETHODIMP CCanvas::get_Layer(VARIANT varLay, VARIANT *pVal) // ˆóüƒƒ\ƒbƒhEƒvƒƒpƒeƒB STDMETHODIMP CCanvas::PrintAs(VARIANT print,VARIANT* pRet) { - CComVariant varRet,varPrint; + CComVariant varRet, varPrint; PRINTDLG pdlg = {0}; pdlg.lStructSize = sizeof(PRINTDLG); pdlg.hwndOwner = m_hParent; @@ -77,11 +77,11 @@ STDMETHODIMP CCanvas::PrintAs(VARIANT print,VARIANT* pRet) delete m_pPrinterDeviceMode; } DEVMODE *pDevMode = (DEVMODE*)GlobalLock(pdlg.hDevMode); - m_pPrinterDeviceMode = (DEVMODE*)new BYTE[siz+1]; - CopyMemory(m_pPrinterDeviceMode,pDevMode,siz); + m_pPrinterDeviceMode = (DEVMODE*) new BYTE[siz + 1]; + CopyMemory(m_pPrinterDeviceMode, pDevMode, siz); // ƒvƒŠƒ“ƒ^–¼‚ð•Û‘¶ - lstrcpy(m_szPrinterName,(LPCSTR)pDevMode->dmDeviceName); - varRet = (LPCSTR)(pDevMode->dmDeviceName); + StringCbCopy(m_szPrinterName, MAX_PATH, (LPCTSTR) pDevMode->dmDeviceName); + varRet = pDevMode->dmDeviceName; GlobalUnlock(pdlg.hDevMode); GlobalFree(pdlg.hDevMode); } @@ -131,7 +131,7 @@ BOOL CCanvas::PrintCore(CDC dc) // ƒvƒŠƒ“ƒ^‚̃I[ƒvƒ“ DOCINFO dinfo = {0}; dinfo.cbSize = sizeof(DOCINFO); - dinfo.lpszDocName = "SeraphyScriptTools"; + dinfo.lpszDocName = _TEXT("SeraphyScriptTools"); int nJob = StartDoc(dc.m_hDC,&dinfo); StartPage(dc.m_hDC); // ˆóü”͈͂̐ݒè @@ -159,35 +159,41 @@ BOOL CCanvas::PrintCore(CDC dc) STDMETHODIMP CCanvas::GetPrinterDefault(VARIANT name) { - TCHAR szPrinterName[MAX_PATH]; - DWORD namesz = MAX_PATH; CComVariant varName; - if(varName.ChangeType(VT_BSTR,&name) == S_OK){ - WideCharToMultiByte(GetACP(),0,varName.bstrVal,-1,szPrinterName,MAX_PATH,NULL,NULL); + ATL::CString szPrinterName(_TEXT("")); + if (varName.ChangeType(VT_BSTR,&name) == S_OK) { + szPrinterName = varName.bstrVal; } - else if(!GetDefaultPrinter(szPrinterName,&namesz)){ - // Šù’è‚̃vƒŠƒ“ƒ^‚ªŒ©‚‚©‚ç‚È‚©‚Á‚½ê‡ - ErrorInfo(IDS_ERR_NODEFPRINTER); - return DISP_E_EXCEPTION; + else { + DWORD namesz = MAX_PATH; + LPTSTR pName = szPrinterName.GetBufferSetLength(namesz); + if (!GetDefaultPrinter(pName, &namesz)){ + // Šù’è‚̃vƒŠƒ“ƒ^‚ªŒ©‚‚©‚ç‚È‚©‚Á‚½ê‡ + return Error(IDS_ERR_NODEFPRINTER); + } + szPrinterName.ReleaseBuffer(); } + HANDLE hp; - if(OpenPrinter(szPrinterName,&hp,NULL)){ - if(m_pPrinterDeviceMode){ + if (OpenPrinter(szPrinterName.GetBuffer(), &hp, NULL)) { + if (m_pPrinterDeviceMode) { // Šù‘¶‚̃oƒbƒtƒA‚ðƒNƒŠƒA delete m_pPrinterDeviceMode; } + // •K—v‚ȃpƒ‰ƒ[ƒ^[‚Ì•ÛŽ - DWORD sz = (DWORD)DocumentProperties(m_hParent,hp,szPrinterName,NULL,NULL,0); + DWORD sz = (DWORD)DocumentProperties(m_hParent, hp, szPrinterName.GetBuffer(), NULL, NULL, 0); m_pPrinterDeviceMode = (DEVMODE*)new BYTE[sz+1]; - DocumentProperties(m_hParent,hp,szPrinterName,m_pPrinterDeviceMode,NULL,DM_OUT_BUFFER); + + DocumentProperties(m_hParent, hp, szPrinterName.GetBuffer(), m_pPrinterDeviceMode, NULL, DM_OUT_BUFFER); ClosePrinter(hp); + // ƒvƒŠƒ“ƒ^–¼‚Ì•Û‘¶ - lstrcpy(m_szPrinterName,szPrinterName); + lstrcpy(m_szPrinterName, szPrinterName); } else{ // ƒvƒŠƒ“ƒ^î•ñ‚̎擾‚ÉŽ¸”s‚µ‚½ê‡ - ErrorInfo(IDS_ERR_PRINTERSETTING); - return DISP_E_EXCEPTION; + return Error(IDS_ERR_PRINTERSETTING); } return S_OK; } diff --git a/Form.cpp b/Form.cpp index 132e99f..9367b40 100644 --- a/Form.cpp +++ b/Form.cpp @@ -65,25 +65,39 @@ STDMETHODIMP CForm::get_Control(VARIANT varNum, VARIANT *pVal) STDMETHODIMP CForm::SetControlFont(VARIANT fontname, VARIANT fontsize) { - CComVariant varName,varSize; - TCHAR szFontName[MAX_PATH] = {0}; - if(varName.ChangeType(VT_BSTR,&fontname) == S_OK){ - WideCharToMultiByte(GetACP(),0,varName.bstrVal,-1,szFontName,MAX_PATH,NULL,NULL); + CComVariant varName; + ATL::CString szFontName; + if (varName.ChangeType(VT_BSTR,&fontname) == S_OK) { + szFontName = varName.bstrVal; } + + CComVariant varSize; int siz = 20; - if(varSize.ChangeType(VT_I2,&fontsize) == S_OK){ + if (varSize.ChangeType(VT_I2, &fontsize) == S_OK) { siz = varSize.iVal; } + // Šm•ÛÏ‚݃tƒHƒ“ƒg‚ð‰ð•ú‚·‚é - if(m_hControlFont){ + if (m_hControlFont) { DeleteObject(m_hControlFont); } + // V‚µ‚¢ƒtƒHƒ“ƒg‚ðì¬‚·‚é - m_hControlFont = CreateFont(siz,0,0,0,0,false,false,false,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_DONTCARE,szFontName); + m_hControlFont = CreateFont( + siz, + 0, 0, 0, 0, false, false, false, + SHIFTJIS_CHARSET, + OUT_DEFAULT_PRECIS, + CLIP_DEFAULT_PRECIS, + DEFAULT_QUALITY, + FF_DONTCARE, + szFontName); + m_nControlFontSize = siz; + // Œ»Ý‚̃Rƒ“ƒgƒ[ƒ‹‚·‚ׂĂɓK—p‚·‚é(¶¬‚³‚ê‚Ä‚¢‚ê‚Î) list*>::iterator p = m_lstControl.begin(); - while(p != m_lstControl.end()){ + while (p != m_lstControl.end()) { (*p)->SetFont(m_hControlFont); p++; } @@ -93,49 +107,49 @@ STDMETHODIMP CForm::SetControlFont(VARIANT fontname, VARIANT fontsize) STDMETHODIMP CForm::Label(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,SS_NOTIFY,0,"STATIC"); + CreateControlCore(text,width,dmy,pvarUnk,0,SS_NOTIFY,0, _TEXT("STATIC")); return S_OK; } STDMETHODIMP CForm::Button(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_PUSHBUTTON,0,"BUTTON"); + CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_PUSHBUTTON,0, _TEXT("BUTTON")); return S_OK; } STDMETHODIMP CForm::CheckBox(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTOCHECKBOX,0,"BUTTON"); + CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTOCHECKBOX,0, _TEXT("BUTTON")); return S_OK; } STDMETHODIMP CForm::RadioButton(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,BS_AUTORADIOBUTTON|(m_bControlNextIsGroupHead?WS_TABSTOP:0),0,"BUTTON"); + CreateControlCore(text,width,dmy,pvarUnk,0,BS_AUTORADIOBUTTON|(m_bControlNextIsGroupHead?WS_TABSTOP:0),0, _TEXT("BUTTON")); return S_OK; } STDMETHODIMP CForm::CheckBox3state(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTO3STATE,0,"BUTTON"); + CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTO3STATE,0, _TEXT("BUTTON")); return S_OK; } STDMETHODIMP CForm::PushCheckButton(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTOCHECKBOX|BS_PUSHLIKE,0,"BUTTON"); + CreateControlCore(text,width,dmy,pvarUnk,0,WS_TABSTOP|BS_AUTOCHECKBOX|BS_PUSHLIKE,0, _TEXT("BUTTON")); return S_OK; } STDMETHODIMP CForm::PushRadioButton(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,0,BS_AUTORADIOBUTTON|BS_PUSHLIKE|(m_bControlNextIsGroupHead?WS_TABSTOP:0),0,"BUTTON"); + CreateControlCore(text,width,dmy,pvarUnk,0,BS_AUTORADIOBUTTON|BS_PUSHLIKE|(m_bControlNextIsGroupHead?WS_TABSTOP:0),0, _TEXT("BUTTON")); return S_OK; } @@ -150,7 +164,7 @@ STDMETHODIMP CForm::ReadonlyEdit(VARIANT text, VARIANT width, VARIANT height, VA // ’Pˆês style |= ES_AUTOHSCROLL; } - CreateControlCore(text,width,height,punkVal,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,style,0,"EDIT"); + CreateControlCore(text,width,height,punkVal,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,style,0, _TEXT("EDIT")); return S_OK; } @@ -165,41 +179,41 @@ STDMETHODIMP CForm::Edit(VARIANT text, VARIANT width, VARIANT height, VARIANT *p // ’Pˆês style |= ES_AUTOHSCROLL; } - CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,style,0,"EDIT"); + CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,style,0, _TEXT("EDIT")); return S_OK; } STDMETHODIMP CForm::PasswordEdit(VARIANT text, VARIANT width, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(text,width,dmy,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|ES_PASSWORD,0,"EDIT"); + CreateControlCore(text,width,dmy,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|ES_PASSWORD,0, _TEXT("EDIT")); return S_OK; } STDMETHODIMP CForm::ListBox(VARIANT width, VARIANT height,VARIANT* pvarUnk) { CComVariant text; - CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|LBS_NOTIFY|LBS_USETABSTOPS|LBS_NOINTEGRALHEIGHT|LBS_DISABLENOSCROLL,0,"LISTBOX"); + CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|LBS_NOTIFY|LBS_USETABSTOPS|LBS_NOINTEGRALHEIGHT|LBS_DISABLENOSCROLL,0, _TEXT("LISTBOX")); return S_OK; } STDMETHODIMP CForm::MultiListBox(VARIANT width, VARIANT height, VARIANT *pvarUnk) { CComVariant text; - CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|LBS_NOTIFY|LBS_USETABSTOPS|LBS_NOINTEGRALHEIGHT|LBS_MULTIPLESEL|/*LBS_EXTENDEDSEL|*/LBS_DISABLENOSCROLL|LBS_HASSTRINGS,0,"LISTBOX"); + 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")); return S_OK; } STDMETHODIMP CForm::DropdownList(VARIANT width, VARIANT height, VARIANT *pvarUnk) { CComVariant dmy; - CreateControlCore(dmy,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|CBS_DROPDOWNLIST|CBS_SORT,0,"COMBOBOX"); + CreateControlCore(dmy,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|CBS_DROPDOWNLIST|CBS_SORT,0,_TEXT("COMBOBOX")); return S_OK; } STDMETHODIMP CForm::DropdownEdit(VARIANT text,VARIANT width, VARIANT height, VARIANT *pvarUnk) { - CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|CBS_DROPDOWN|CBS_AUTOHSCROLL|CBS_SORT,0,"COMBOBOX"); + CreateControlCore(text,width,height,pvarUnk,WS_EX_CLIENTEDGE,WS_TABSTOP|CBS_DROPDOWN|CBS_AUTOHSCROLL|CBS_SORT,0,_TEXT("COMBOBOX")); return S_OK; } @@ -258,12 +272,12 @@ STDMETHODIMP CForm::ClearControls() return S_OK; } -CControl* CForm::CreateControlCore(VARIANT &text, VARIANT &width, VARIANT &height,VARIANT *pvarUnk, DWORD extstyle, DWORD style, DWORD afterstyle,LPCSTR classname) +CControl* CForm::CreateControlCore(VARIANT &text, VARIANT &width, VARIANT &height,VARIANT *pvarUnk, DWORD extstyle, DWORD style, DWORD afterstyle,LPCTSTR classname) { CComVariant varText; - TCHAR szCaption[MAX_PATH] = {0}; - if(varText.ChangeType(VT_BSTR,&text) == S_OK){ - WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,szCaption,MAX_PATH,NULL,NULL); + ATL::CString szCaption; + if (varText.ChangeType(VT_BSTR,&text) == S_OK) { + szCaption = varText.bstrVal; } // ”z’uƒTƒCƒY‚̎擾 @@ -321,7 +335,7 @@ CControl* CForm::CreateControlCore(VARIANT &text, VARIANT &width, VARIANT &heigh pvarUnk->punkVal = pUnk; // ŽŸ‚ɉüs‚µ‚½‚Æ‚«‚Ɉړ®‚·‚é—Ê - if(!lstrcmp(classname,"COMBOBOX")){ + if (!lstrcmp(classname, _TEXT("COMBOBOX"))) { // ƒRƒ“ƒ{ƒ{ƒbƒNƒX‚Í•\Ž¦‚³‚ê‚Ä‚¢‚é‚Ì‚Í1s•ª‚¾‚¯B nHeight = m_nControlFontSize; } @@ -381,7 +395,7 @@ STDMETHODIMP CForm::ControlPad(VARIANT width, VARIANT height) STDMETHODIMP CForm::StatusLabel(VARIANT text, VARIANT width, VARIANT height, VARIANT *pvarUnk) { - CreateControlCore(text,width,height,pvarUnk,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,SS_NOTIFY,0,"STATIC"); + CreateControlCore(text,width,height,pvarUnk,m_bControlUseStaticEdge?WS_EX_STATICEDGE:WS_EX_CLIENTEDGE,SS_NOTIFY,0,_TEXT("STATIC")); return S_OK; } diff --git a/Form.h b/Form.h index c9570c4..0b33122 100644 --- a/Form.h +++ b/Form.h @@ -91,8 +91,10 @@ public: STDMETHOD(Button)(/*[in]*/VARIANT text,/*[in]*/VARIANT width,/*[out,retval]*/ VARIANT *pvarUnk); STDMETHOD(Label)(/*[in]*/VARIANT text,/*[in,optional]*/VARIANT width,/*[out,retval]*/VARIANT* pvarUnk); protected: - CControl* CreateControlCore(VARIANT& text,VARIANT& width,VARIANT& height,VARIANT* pvarUnk,DWORD extstyle,DWORD style,DWORD afterstyle,LPCSTR classname); - list*> m_lstControl; + CControl* CreateControlCore(VARIANT& text, VARIANT& width, VARIANT& height, VARIANT* pvarUnk, + DWORD extstyle, DWORD style, DWORD afterstyle, LPCTSTR classname); + + std::list*> m_lstControl; BOOL m_bControlUseStaticEdge; BOOL m_bControlNextIsGroupHead; int m_nCommandID; diff --git a/Layer.cpp b/Layer.cpp index cfb3da8..eff6782 100644 --- a/Layer.cpp +++ b/Layer.cpp @@ -42,7 +42,8 @@ void CLayer::Draw(CDC dc) fntsiz = MulDiv(fntsiz,height_mm,height_px); ReleaseDC(hWnd,hdc); } - HFONT hFont = CreateFont(fntsiz,0,0,0,0,false,false,false,SHIFTJIS_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,FF_DONTCARE,m_szFontName); + HFONT hFont = CreateFont(fntsiz, 0, 0, 0, 0, false, false, false, + SHIFTJIS_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, FF_DONTCARE, m_szFontName); HFONT hOldFont = NULL; if(hFont){ hOldFont = (HFONT)SelectObject(dc.m_hDC,hFont); @@ -80,40 +81,43 @@ void CLayer::FinalRelease() STDMETHODIMP CLayer::Text(VARIANT x,VARIANT y,VARIANT text) { CComVariant str; - if(str.ChangeType(VT_BSTR,&text) != S_OK){ - return DISP_E_TYPEMISMATCH; + HRESULT hr = str.ChangeType(VT_BSTR, &text); + if(FAILED(hr)) { + return hr; } + long lx = GetMappedValue(x); long ly = GetMappedValue(y); int len = SysStringByteLen(str.bstrVal); - LPSTR pBuf = new CHAR[len+1]; - WideCharToMultiByte(GetACP(),0,str.bstrVal,len,pBuf,len,0,0); - pBuf[len] = 0; - AddDrawData(new textdata(lx,ly,pBuf,m_bTextMappingMode)); - delete[]pBuf; + + ATL::CString buf(str.bstrVal); + + AddDrawData(new textdata(lx, ly, buf, m_bTextMappingMode)); return S_OK; } STDMETHODIMP CLayer::TextBox(VARIANT sx, VARIANT sy, VARIANT ex, VARIANT ey, VARIANT text, VARIANT fmt) { - CComVariant str,cfmt; long lsx = GetMappedValue(sx); long lsy = GetMappedValue(sy); long lex = GetMappedValue(ex); long ley = GetMappedValue(ey); + UINT ufmt = 0; - if(cfmt.ChangeType(VT_I4,&fmt) == S_OK){ + CComVariant cfmt; + if (cfmt.ChangeType(VT_I4, &fmt) == S_OK){ ufmt = cfmt.lVal; } - if(str.ChangeType(VT_BSTR,&text) != S_OK){ - return DISP_E_TYPEMISMATCH; + + CComVariant str; + HRESULT hr = str.ChangeType(VT_BSTR, &text); + if (FAILED(hr)) { + return hr; } - int len = SysStringByteLen(str.bstrVal); - LPSTR pBuf = new CHAR[len+1]; - int cnt = WideCharToMultiByte(GetACP(),0,str.bstrVal,-1,pBuf,len,0,0); - pBuf[cnt-1] = 0; - AddDrawData(new textboxdata(lsx,lsy,lex,ley,pBuf,ufmt,m_bTextMappingMode)); - delete[]pBuf; + + ATL::CString buf(str.bstrVal); + + AddDrawData(new textboxdata(lsx, lsy, lex, ley, buf, ufmt, m_bTextMappingMode)); return S_OK; } @@ -333,15 +337,14 @@ STDMETHODIMP CLayer::put_Visible(BOOL newVal) STDMETHODIMP CLayer::get_FontName(BSTR *pVal) { - WCHAR wmes[MAX_PATH]; - MultiByteToWideChar(GetACP(),0,m_szFontName,-1,wmes,MAX_PATH); - *pVal = SysAllocString(wmes); + CComBSTR ret(m_szFontName); + *pVal = ret.Detach(); return S_OK; } STDMETHODIMP CLayer::put_FontName(BSTR newVal) { - WideCharToMultiByte(GetACP(),0,newVal,-1,m_szFontName,MAX_PATH,NULL,NULL); + m_szFontName = newVal; return S_OK; } diff --git a/Layer.h b/Layer.h index 2c356cd..7574acc 100644 --- a/Layer.h +++ b/Layer.h @@ -61,7 +61,7 @@ protected: class textdata : public drawdata { public: - textdata(long x,long y,LPCSTR text,BOOL mapmode) + textdata(long x, long y, LPCTSTR text, BOOL mapmode) { pBuf = new TCHAR[lstrlen(text)+1]; lstrcpy(pBuf,text); @@ -69,11 +69,13 @@ public: m_y = y; m_bTextMappingMode = mapmode; } + virtual void Destroy() { delete pBuf; delete this; } + virtual void Draw(CDC dc) { POINT pt = {m_x,m_y}; @@ -95,7 +97,7 @@ protected: class textboxdata : public drawdata { public: - textboxdata(long sx,long sy,long ex,long ey,LPCSTR text,UINT fmt,BOOL mapmode) + textboxdata(long sx, long sy, long ex, long ey, LPCTSTR text, UINT fmt, BOOL mapmode) { pBuf = new TCHAR[lstrlen(text)+1]; lstrcpy(pBuf,text); @@ -509,7 +511,7 @@ public: m_nFontSize = 0; m_dwFillColor = 0x808080; m_dwFontColor = ::GetSysColor(COLOR_WINDOWTEXT); - ZeroMemory(m_szFontName,MAX_PATH); + m_szFontName.Empty(); // ƒ}ƒbƒsƒ“ƒOƒ‚[ƒh m_bTextMappingMode = 0; m_bFontTextMappingMode = 0; @@ -572,7 +574,7 @@ protected: DWORD m_dwColor; int m_nFontSize; BOOL m_bVisible; - CHAR m_szFontName[MAX_PATH]; + ATL::CString m_szFontName; int m_bTextMappingMode; int m_bFontTextMappingMode; }; diff --git a/ObjectMap.cpp b/ObjectMap.cpp index 1dcba00..c86a8ad 100644 --- a/ObjectMap.cpp +++ b/ObjectMap.cpp @@ -232,24 +232,21 @@ STDMETHODIMP CObjectMap::ExpandVariables(VARIANT text, VARIANT env, VARIANT *pVa } } } - else if(bEnv){ + else if (bEnv){ // ˜A‘z”z—ñ‚É‚Í‘¶Ý‚¹‚¸AŠÂ‹«•Ï”“WŠJ‚ªŽwŽ¦‚³‚ê‚Ä‚¢‚é - CHAR szName [MAX_PATH] = { 0 }; - CHAR szBuf [MAX_PATH] = { 0 }; - WCHAR wbuf[MAX_PATH] = { 0 }; - WideCharToMultiByte(GetACP(),0,name,-1,szName,MAX_PATH,NULL,NULL); - DWORD ret = GetEnvironmentVariable(szName,szBuf,MAX_PATH); - if(ret && ret < MAX_PATH){ + ATL::CString szName(name); + TCHAR szBuf[MAX_PATH] = {0}; + DWORD ret = GetEnvironmentVariable(szName, szBuf, MAX_PATH); + if (ret && ret < MAX_PATH) { // ŠÂ‹«•Ï”‚ª”­Œ©‚³‚ꂽ - if(phase == 0){ + if (phase == 0) { // ƒtƒG[ƒY1‚̓JƒEƒ“ƒg‚·‚邾‚¯ expandsize += ret; } else{ // ƒtƒF[ƒY2‚ÍŽÀÛ‚ɏ‘‚«ž‚Þ - MultiByteToWideChar(GetACP(),0,szBuf,ret,wbuf,MAX_PATH); - UINT i; - for(i=0;ihdr.hwndFrom,GWL_USERDATA); - if(addr){ + LONG_PTR addr = ::GetWindowLongPtr(pnmv->hdr.hwndFrom, GWLP_USERDATA); + if (addr) { // ƒJƒ‰ƒ€ƒNƒŠƒbƒN‚É‚æ‚éƒ\[ƒeƒBƒ“ƒO‚ðs‚¤ CComObject* pCtrl = (CComObject*)addr; pCtrl->ListSort(pnmv->iSubItem); @@ -564,8 +564,8 @@ LRESULT CALLBACK COverlappedWindow::WindowProc(HWND hWnd, UINT uMsg, WPARAM wPar { // ListView - TreeView ‚ʼnEƒNƒŠƒbƒN‚³‚ꂽ‚±‚Æ‚ð’Ê’m‚·‚é LPNMHDR lpnmh = (LPNMHDR) lParam; - DWORD addr = ::GetWindowLong(lpnmh->hwndFrom,GWL_USERDATA); - if(addr){ + LONG_PTR addr = ::GetWindowLong(lpnmh->hwndFrom, GWLP_USERDATA); + if (addr) { CComObject* pCtrl = (CComObject*)addr; pCtrl->OnRClick(); // ƒRƒ“ƒgƒ[ƒ‹‚ɉEƒNƒŠƒbƒN‚ð’Ê’m‚µ‘Oˆ—‚ðs‚킹‚é } @@ -790,10 +790,9 @@ STDMETHODIMP COverlappedWindow::DoEvent(VARIANT *varResult) } } // ƒƒjƒ…[‚ÌŒŸõ - if(m_hMenu && nID >= 100){ - map::iterator p; - p = m_cMenuMap.find(nID); - if(p != m_cMenuMap.end()){ + if (m_hMenu && nID >= 100) { + map::iterator p = m_cMenuMap.find(nID); + if (p != m_cMenuMap.end()) { // ”­Œ©‚³‚ꂽ ClassObjectInvoke(p->second); } @@ -1251,33 +1250,32 @@ STDMETHODIMP COverlappedWindow::SetMenu(VARIANT fmt) HRESULT hRet = S_OK; CComVariant tmp; if(tmp.ChangeType(VT_BSTR,&fmt) == S_OK){ - UINT len = SysStringByteLen(tmp.bstrVal)+1; - LPSTR pBuf = new CHAR[len]; - int cnt = WideCharToMultiByte(GetACP(),0,tmp.bstrVal,-1,pBuf,len,NULL,NULL); - pBuf[cnt - 1] = 0; + ATL::CString buf(tmp.bstrVal); + // ŒÃ‚¢ƒƒjƒ…[‚ð”jŠü‚·‚é - if(m_hMenu){ + if (m_hMenu) { m_cMenuMap.clear(); ::SetMenu(m_hPopupWnd,NULL); DestroyMenu(m_hMenu); m_hMenu = NULL; } - if(cnt > 1){ + + if (buf.GetLength() > 0) { // €–Ú‚ª‚ ‚ê‚΃ƒjƒ…[–¼‚ðƒp[ƒX‚·‚é m_hMenu = CreateMenu(); TCHAR menuname[MAX_PATH]; TCHAR szSubmenu[MAX_PATH]; - LPSTR p = pBuf; + LPTSTR p = buf.GetBuffer(); HMENU hPopupMenu = NULL; int lv1 = 0; int lv2 = 0; int cmd = 0; - while(*p){ - while(*p == ' ' || *p == '\t')p++; // ƒuƒ‰ƒ“ƒNƒXƒLƒbƒv - if(*p == '/'){ + while (*p) { + while (*p == ' ' || *p == '\t') p++; // ƒuƒ‰ƒ“ƒNƒXƒLƒbƒv + if (*p == '/') { p++; // ƒ|ƒbƒvƒAƒbƒvƒƒjƒ…[‚̍쐬 - if(hPopupMenu){ + if (hPopupMenu) { // Šù‘¶‚̃|ƒbƒvƒAƒbƒv‚𖄂ߍž‚Þ MENUITEMINFO inf = {0}; inf.cbSize = sizeof(MENUITEMINFO); @@ -1291,38 +1289,38 @@ STDMETHODIMP COverlappedWindow::SetMenu(VARIANT fmt) lv2 = 0; cmd = 0; hPopupMenu = CreatePopupMenu(); - LPSTR d = p; - while(*p && *p != ',' && *p != '/' && *p != ':'){ + LPTSTR d = p; + while (*p && *p != ',' && *p != '/' && *p != ':') { p = CharNext(p); } - ZeroMemory(szSubmenu,MAX_PATH); - CopyMemory(szSubmenu,d,p-d); - if(*p == ',' || *p == ':'){ + ZeroMemory(szSubmenu, MAX_PATH); + CopyMemory(szSubmenu, d, p-d); + if (*p == ',' || *p == ':') { p++; } } else{ // ƒƒjƒ…[‚̍쐬 - if(hPopupMenu){ - LPSTR d = p; - while(*p && *p != ',' && *p != '/' && *p != ':'){ + if (hPopupMenu) { + LPTSTR d = p; + while (*p && *p != ',' && *p != '/' && *p != ':') { p = CharNext(p); } - ZeroMemory(menuname,MAX_PATH); - CopyMemory(menuname,d,p-d); + ZeroMemory(menuname, MAX_PATH); + CopyMemory(menuname, d, p-d); // ƒRƒ}ƒ“ƒhƒZƒpƒŒ[ƒ^[‚ðŒŸ¸‚·‚é - _bstr_t eventname; - LPSTR findcmd = strchr(menuname,'@'); + CComBSTR eventname; + LPTSTR findcmd = _tcschr(menuname, _TEXT('@')); if(findcmd){ *findcmd = 0; eventname = (LPCSTR)(findcmd + 1); } else{ - CHAR tmp[64]; - wsprintf(tmp,"OnMenu%d",lv1*100+cmd); + TCHAR tmp[64]; + wsprintf(tmp, _TEXT("OnMenu%d"), lv1 * 100 + cmd); eventname = tmp; } - m_cMenuMap.insert(pair(lv1*100+cmd,eventname)); + m_cMenuMap.insert(std::pair(lv1 * 100 + cmd, eventname)); // ƒƒjƒ…[‚̍쐬 MENUITEMINFO inf = {0}; inf.cbSize = sizeof(MENUITEMINFO); @@ -1362,7 +1360,6 @@ STDMETHODIMP COverlappedWindow::SetMenu(VARIANT fmt) } ::SetMenu(m_hPopupWnd,m_hMenu); } - delete[]pBuf; } return hRet; } @@ -1370,70 +1367,75 @@ STDMETHODIMP COverlappedWindow::SetMenu(VARIANT fmt) STDMETHODIMP COverlappedWindow::TrackPopupMenu(VARIANT text, VARIANT cmd,VARIANT* pRet) { SafeCreateWnd(); - CComVariant varCmd; - CComVariant varText; + CComVariant varRet; varRet = 0; int nCommand = 0; - if(varCmd.ChangeType(VT_I2,&cmd) == S_OK){ + CComVariant varCmd; + if (varCmd.ChangeType(VT_I2, &cmd) == S_OK){ nCommand = varCmd.iVal; } - if(varText.ChangeType(VT_BSTR,&text) == S_OK){ + + CComVariant varText; + if (varText.ChangeType(VT_BSTR, &text) == S_OK) { TCHAR menuname[MAX_PATH]; - UINT len = SysStringByteLen(varText.bstrVal)+1; - LPSTR pBuf = new CHAR[len]; - int cnt = WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,pBuf,len,NULL,NULL); - pBuf[cnt - 1] = 0; - LPSTR p = pBuf; + + ATL::CString buf(varText.bstrVal); + UINT len = buf.GetLength() + 1; + LPTSTR p = buf.GetBuffer(); + int lv = 0; int cmd = 0; HMENU hPopupMenu = CreatePopupMenu(); - while(*p){ - LPSTR d = p; - while(*p == ' ' || *p == '\t'){ + while (*p) { + LPTSTR d = p; + while (*p == ' ' || *p == '\t') { p++; } - while(*p && *p != ',' && *p != '/' && *p != ':'){ + while (*p && *p != ',' && *p != '/' && *p != ':') { p = CharNext(p); } - ZeroMemory(menuname,MAX_PATH); - CopyMemory(menuname,d,p-d); + ZeroMemory(menuname, MAX_PATH); + CopyMemory(menuname, d, p-d); MENUITEMINFO inf = {0}; inf.cbSize = sizeof(MENUITEMINFO); inf.fMask = MIIM_TYPE|MIIM_ID; inf.fType = MFT_STRING; - if(nCommand != 0){ - inf.wID = nCommand + cmd; + if (nCommand != 0) { + inf.wID = nCommand + cmd; } - else{ + else { // ƒRƒ}ƒ“ƒhƒx[ƒX‚ª0‚È‚ç‚΃Rƒ}ƒ“ƒhƒCƒxƒ“ƒg‚Í”­¶‚³‚¹‚È‚¢B // TrackPopupMenu‚̓Rƒ}ƒ“ƒh‚ð‘I‘ð‚µ‚È‚©‚Á‚½ê‡‚Í0‚ð•Ô‚·‚½‚߁A0‚æ‚è‚à‘å‚«‚È’l‚É‚·‚é•K—v‚ª‚ ‚éB inf.wID = nCommand + cmd + 1; } inf.dwTypeData = menuname; - InsertMenuItem(hPopupMenu,lv,true,&inf); + InsertMenuItem(hPopupMenu, lv, true, &inf); lv++; cmd++; - if(*p == ',' || *p == '/'){ + if (*p == ',' || *p == '/') { p++; } - else if(*p == ':'){ + else if (*p == ':') { inf.fMask = MIIM_TYPE; inf.fType = MFT_SEPARATOR; - InsertMenuItem(hPopupMenu,lv,true,&inf); + InsertMenuItem(hPopupMenu, lv, true, &inf); p++; lv++; } } - delete[]pBuf; + // TrackPopupMene DWORD pos = GetMessagePos(); ::SetFocus(m_hPopupWnd); - varRet = (SHORT)::TrackPopupMenuEx(hPopupMenu - ,TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON | - (nCommand==0?(TPM_NONOTIFY|TPM_RETURNCMD):0) // ƒRƒ}ƒ“ƒhƒx[ƒX‚ª0‚Å‚ ‚ê‚΁AƒRƒ}ƒ“ƒhƒCƒxƒ“ƒg‚ð’Ê’m‚³‚¹‚È‚¢B - ,LOWORD(pos),HIWORD(pos),m_hPopupWnd,NULL); + varRet = (SHORT) ::TrackPopupMenuEx(hPopupMenu, + TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON | + (nCommand == 0 ? (TPM_NONOTIFY | TPM_RETURNCMD) : 0), // ƒRƒ}ƒ“ƒhƒx[ƒX‚ª0‚Å‚ ‚ê‚΁AƒRƒ}ƒ“ƒhƒCƒxƒ“ƒg‚ð’Ê’m‚³‚¹‚È‚¢B + LOWORD(pos), + HIWORD(pos), + m_hPopupWnd, + NULL); DestroyMenu(hPopupMenu); } varRet.Detach(pRet); @@ -1641,36 +1643,38 @@ STDMETHODIMP COverlappedWindow::get_Exstyle(long *pVal) STDMETHODIMP COverlappedWindow::put_Exstyle(long newVal) { windowParam.exstyle = (DWORD)newVal; - if(m_hPopupWnd){ - ::SetWindowLong(m_hPopupWnd,GWL_STYLE,windowParam.exstyle); + if (m_hPopupWnd) { + ::SetWindowLong(m_hPopupWnd, GWL_STYLE, windowParam.exstyle); } return S_OK; } STDMETHODIMP COverlappedWindow::get_WindowClassName(BSTR *pVal) { - WCHAR wmes[MAX_PATH]; - MultiByteToWideChar(GetACP(),0,windowParam.szClassName,-1,wmes,MAX_PATH); - *pVal = SysAllocString(wmes); + CComBSTR tmp(windowParam.szClassName); + *pVal = tmp.Detach(); return S_OK; } STDMETHODIMP COverlappedWindow::Refresh() { - if(m_hPopupWnd){ - ::SetWindowPos(m_hPopupWnd,NULL,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE|SWP_NOZORDER|SWP_DRAWFRAME|SWP_FRAMECHANGED|SWP_NOCOPYBITS); + if (m_hPopupWnd) { + ::SetWindowPos( + m_hPopupWnd, + NULL, + 0, 0, 0, 0, + SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_DRAWFRAME | SWP_FRAMECHANGED | SWP_NOCOPYBITS); } return S_OK; } void COverlappedWindow::SetTitle() { - if(!m_hPopupWnd){ + if (!m_hPopupWnd) { return; } - TCHAR szTitle[MAX_PATH] = {0}; - WideCharToMultiByte(GetACP(),0,m_bstrCaption,-1,szTitle,MAX_PATH,NULL,NULL); - ::SetWindowText(m_hPopupWnd,szTitle); + ATL::CString tmp(m_bstrCaption); + ::SetWindowText(m_hPopupWnd, tmp); } STDMETHODIMP COverlappedWindow::SetPlacement(VARIANT x, VARIANT y, VARIANT w, VARIANT h, VARIANT *pvarUnk) @@ -1929,8 +1933,8 @@ void COverlappedWindow::CreateWindowList(list& lstWnd,BOOL bSearchRoot) HWND* hWnds = NULL; if(m_hParentWnd && bSearchRoot){ // ªŒ³‚Å‚È‚¯‚ê‚΁A‚³‚ç‚É–â‚¢‡‚킹‚é - COverlappedWindow* pParent = (COverlappedWindow*)::GetWindowLong(m_hParentWnd,GWL_USERDATA); - if(pParent){ + COverlappedWindow* pParent = (COverlappedWindow*)::GetWindowLongPtr(m_hParentWnd, GWLP_USERDATA); + if (pParent) { pParent->CreateWindowList(lstWnd,true); } } @@ -2024,20 +2028,22 @@ STDMETHODIMP COverlappedWindow::put_WaitCursor(short newVal) STDMETHODIMP COverlappedWindow::LoadIcon(VARIANT text) { - CHAR szPath[MAX_PATH]; CComVariant varText; - if(varText.ChangeType(VT_BSTR,&text) != S_OK){ + if (varText.ChangeType(VT_BSTR, &text) != S_OK) { return DISP_E_TYPEMISMATCH; } - WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,szPath,MAX_PATH,NULL,NULL); - if(m_hIcon){ + ATL::CString szPath(varText.bstrVal); + + if (m_hIcon) { DestroyIcon(m_hIcon); m_hIcon = NULL; } - m_hIcon = (HICON)LoadImage(NULL,szPath,IMAGE_ICON - ,GetSystemMetrics(SM_CXSMICON) - ,GetSystemMetrics(SM_CYSMICON),LR_LOADFROMFILE); - if(m_hIcon && m_hPopupWnd){ + m_hIcon = (HICON)LoadImage(NULL, szPath, IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + LR_LOADFROMFILE); + + if (m_hIcon && m_hPopupWnd) { ::SendMessage(m_hPopupWnd, WM_SETICON, false, (LPARAM)m_hIcon); } return S_OK; diff --git a/OverlappedWindow.h b/OverlappedWindow.h index cf1d6eb..4726908 100644 --- a/OverlappedWindow.h +++ b/OverlappedWindow.h @@ -35,9 +35,9 @@ public: } void Clear() { - list::iterator p = m_lstPath.begin(); + list::iterator p = m_lstPath.begin(); while(p != m_lstPath.end()){ - delete (*p); + delete[] *p; p = m_lstPath.erase(p); } } @@ -48,7 +48,7 @@ public: int i; for(i=0;i::iterator p = m_lstPath.begin(); + list::iterator p = m_lstPath.begin(); while(p != m_lstPath.end()){ - WCHAR wbuf[MAX_PATH]; - MultiByteToWideChar(GetACP(),0,*p,-1,wbuf,MAX_PATH); - VariantInit(&pvars[i]); - pvars[i].vt = VT_BSTR; - pvars[i].bstrVal = SysAllocString(wbuf); + CComVariant wbuf(*p); + wbuf.Detach(&pvars[i]); p++; i++; } @@ -81,7 +78,7 @@ public: pvarPathName->parray = pArray; } protected: - list m_lstPath; + list m_lstPath; }; ///////////////////////////////////////////////////////////////////////////// @@ -122,11 +119,11 @@ public: width = w; height = h; } - inline void SetWindowClassName(LPCSTR name) + inline void SetWindowClassName(LPCTSTR name) { lstrcpy(szClassName,name); } - CHAR szClassName[MAX_PATH]; + TCHAR szClassName[MAX_PATH]; DWORD wndstyle; DWORD style; DWORD exstyle; @@ -390,7 +387,7 @@ protected: HWND m_hPopupWnd; HWND m_hParentWnd; HICON m_hIcon; - map m_cMenuMap; + map m_cMenuMap; }; #endif //__OverlappedWindow_H_ diff --git a/PrivateProfile.cpp b/PrivateProfile.cpp index 3013074..95908c3 100644 --- a/PrivateProfile.cpp +++ b/PrivateProfile.cpp @@ -24,8 +24,7 @@ STDMETHODIMP CPrivateProfile::InterfaceSupportsErrorInfo(REFIID riid) STDMETHODIMP CPrivateProfile::get_ProfilePath(BSTR *pVal) { - *pVal = m_bstr_profilepath.copy(); - return S_OK; + return m_bstr_profilepath.CopyTo(pVal); } STDMETHODIMP CPrivateProfile::put_ProfilePath(BSTR newVal) @@ -41,15 +40,17 @@ STDMETHODIMP CPrivateProfile::OpenSection(VARIANT text,VARIANT* pVal) if(varText.ChangeType(VT_BSTR,&text) != S_OK){ return DISP_E_TYPEMISMATCH; } - if(m_bstr_profilepath.length() <= 0){ + if (m_bstr_profilepath.Length() <= 0) { ErrorInfo(IDS_ERR_PROFILEPATH); return DISP_E_EXCEPTION; } CComObject* pSection = NULL; pSection->CreateInstance(&pSection); ATLASSERT(pSection); - WideCharToMultiByte(GetACP(),0,m_bstr_profilepath,-1,pSection->m_szProfilePath,MAX_PATH,NULL,NULL); - WideCharToMultiByte(GetACP(),0,varText.bstrVal ,-1,pSection->m_szSectionName,MAX_PATH,NULL,NULL); + + pSection->m_szProfilePath = m_bstr_profilepath; + pSection->m_szSectionName = varText.bstrVal; + IUnknown* pUnk = NULL; pSection->QueryInterface(IID_IUnknown,(void**)&pUnk); ATLASSERT(pUnk); diff --git a/PrivateProfile.h b/PrivateProfile.h index 1d3aba1..c5bef6b 100644 --- a/PrivateProfile.h +++ b/PrivateProfile.h @@ -37,7 +37,7 @@ public: STDMETHOD(get_ProfilePath)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_ProfilePath)(/*[in]*/ BSTR newVal); protected: - _bstr_t m_bstr_profilepath; + CComBSTR m_bstr_profilepath; }; #endif //__PRIVATEPROFILE_H_ diff --git a/ProfileSection.cpp b/ProfileSection.cpp index 13f405c..abaaaf0 100644 --- a/ProfileSection.cpp +++ b/ProfileSection.cpp @@ -23,37 +23,40 @@ STDMETHODIMP CProfileSection::InterfaceSupportsErrorInfo(REFIID riid) STDMETHODIMP CProfileSection::get_Value(VARIANT idx, VARIANT *pVal) { ::VariantInit(pVal); + + ATL::CString szKeyname; CComVariant varIdx; - CHAR szKeyname[MAX_PATH] = { 0 }; - const int siz = 1024 * 8; // 8KBytes - LPSTR szReturn = new CHAR[siz]; - if(varIdx.ChangeType(VT_BSTR,&idx) == S_OK){ - WideCharToMultiByte(GetACP(),0,varIdx.bstrVal,-1,szKeyname,MAX_PATH,NULL,NULL); + if (varIdx.ChangeType(VT_BSTR, &idx) == S_OK){ + szKeyname = varIdx.bstrVal; } - if(GetPrivateProfileString(m_szSectionName,szKeyname,"",szReturn,siz,m_szProfilePath)){ - CComVariant ret((LPCSTR)szReturn); + + const int siz = 1024 * 8; // 8KBytes + ATL::CString buf; + LPTSTR szReturn = buf.GetBufferSetLength(siz); + if (GetPrivateProfileString(m_szSectionName, szKeyname, _TEXT(""), szReturn, siz, m_szProfilePath)) { + CComVariant ret(szReturn); ret.Detach(pVal); } - delete[]szReturn; return S_OK; } STDMETHODIMP CProfileSection::put_Value(VARIANT idx, VARIANT newVal) { // ƒfƒBƒtƒHƒ‹ƒg‚Ì’l‚‚«Žæ“¾ - CComVariant varIdx,varNew; - CHAR szKeyname[MAX_PATH] = { 0 }; - const int siz = 1024 * 8; // 8KBytes - LPSTR szWrite = new CHAR[siz+1]; - if(varIdx.ChangeType(VT_BSTR,&idx) == S_OK){ - WideCharToMultiByte(GetACP(),0,varIdx.bstrVal,-1,szKeyname,MAX_PATH,NULL,NULL); + + ATL::CString szKeyname; + CComVariant varIdx; + if (varIdx.ChangeType(VT_BSTR, &idx) == S_OK) { + szKeyname = varIdx.bstrVal; } - if(varNew.ChangeType(VT_BSTR,&newVal) == S_OK){ - int cnt = WideCharToMultiByte(GetACP(),0,varNew.bstrVal,-1,szWrite,siz,NULL,NULL); - szWrite[cnt] = 0; + + ATL::CString szWrite; + CComVariant varNew; + if (varNew.ChangeType(VT_BSTR, &newVal) == S_OK){ + szWrite = varNew.bstrVal; } - WritePrivateProfileString(m_szSectionName,szKeyname,szWrite,m_szProfilePath); - delete[]szWrite; + + WritePrivateProfileString(m_szSectionName, szKeyname, szWrite, m_szProfilePath); return S_OK; } @@ -61,22 +64,26 @@ STDMETHODIMP CProfileSection::GetValue(VARIANT idx, VARIANT def,VARIANT* pVal) { // ƒfƒBƒtƒHƒ‹ƒg‚Ì’l‚‚«Žæ“¾ ::VariantInit(pVal); - CComVariant varIdx,varDef; - CHAR szKeyname[MAX_PATH] = { 0 }; - CHAR szDefault[MAX_PATH] = { 0 }; - const int siz = 1024 * 8; // 8KBytes - LPSTR szReturn = new CHAR[siz]; - if(varIdx.ChangeType(VT_BSTR,&idx) == S_OK){ - WideCharToMultiByte(GetACP(),0,varIdx.bstrVal,-1,szKeyname,MAX_PATH,NULL,NULL); + + ATL::CString szKeyname; + CComVariant varIdx; + if (varIdx.ChangeType(VT_BSTR, &idx) == S_OK) { + szKeyname = varIdx.bstrVal; } - if(varDef.ChangeType(VT_BSTR,&def) == S_OK){ - WideCharToMultiByte(GetACP(),0,varDef.bstrVal,-1,szDefault,MAX_PATH,NULL,NULL); + + ATL::CString szDefault; + CComVariant varDef; + if (varDef.ChangeType(VT_BSTR, &def) == S_OK) { + szDefault = varDef.bstrVal; } - if(GetPrivateProfileString(m_szSectionName,szKeyname,szDefault,szReturn,siz,m_szProfilePath)){ - CComVariant ret((LPCSTR)szReturn); + + const int siz = 1024 * 8; // 8KBytes + ATL::CString buf; + LPTSTR szReturn = buf.GetBufferSetLength(siz); + if (GetPrivateProfileString(m_szSectionName, szKeyname, szDefault, szReturn, siz, m_szProfilePath)) { + CComVariant ret(szReturn); ret.Detach(pVal); } - delete[]szReturn; return S_OK; } @@ -86,30 +93,30 @@ STDMETHODIMP CProfileSection::GetKeyNames(VARIANT *pVal) DWORD siz = 4096; DWORD oldsiz = 0; DWORD retsiz = 0; - LPSTR pBuf = new CHAR[siz]; - while( (retsiz = GetPrivateProfileSection(m_szSectionName,pBuf,siz,m_szProfilePath)) && - (retsiz == (siz - 2)) && ( oldsiz != retsiz ) ){ + LPTSTR pBuf = new TCHAR[siz]; + while ((retsiz = GetPrivateProfileSection(m_szSectionName, pBuf, siz, m_szProfilePath)) && + (retsiz == (siz - 2)) && (oldsiz != retsiz)) { oldsiz = siz; siz *= 2; delete []pBuf; - pBuf = new CHAR[siz]; + pBuf = new TCHAR[siz]; } // ƒJƒEƒ“ƒg‚·‚é - LPSTR p = pBuf; + LPTSTR p = pBuf; long count = 0; - while(*p){ + while (*p) { count++; - while(*p++); + while (*p++); } // ˆêŽŸ”z—ñ‚̐¶¬ - SAFEARRAY* pArray = SafeArrayCreateVector(VT_VARIANT,0,count); + SAFEARRAY* pArray = SafeArrayCreateVector(VT_VARIANT, 0, count); long idx = 0; p = pBuf; - while(*p){ + while (*p) { CComVariant tmp; - LPCSTR pb = p; - while(*p){ - if(*p == '='){ + LPCTSTR pb = p; + while (*p) { + if (*p == '=') { *p = 0; } p++; diff --git a/ProfileSection.h b/ProfileSection.h index b1093ef..4ba515c 100644 --- a/ProfileSection.h +++ b/ProfileSection.h @@ -37,8 +37,8 @@ public: STDMETHOD(GetValue)(/*[in]*/VARIANT idx,/*[in,optional]*/VARIANT def,/*[out,retval]*/VARIANT* pVal); STDMETHOD(get_Value)(/*[in]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal); STDMETHOD(put_Value)(/*[in]*/VARIANT idx, /*[in]*/ VARIANT newVal); - CHAR m_szProfilePath[MAX_PATH]; - CHAR m_szSectionName[MAX_PATH]; + ATL::CString m_szProfilePath; + ATL::CString m_szSectionName; }; #endif //__PROFILESECTION_H_ diff --git a/SeraphyScriptTools.cpp b/SeraphyScriptTools.cpp index 4277a44..dedb6e4 100644 --- a/SeraphyScriptTools.cpp +++ b/SeraphyScriptTools.cpp @@ -24,6 +24,9 @@ #include "profilesection.h" #include "privateprofile.h" +// Common Controls—plib‚̃[ƒh +#pragma comment(lib, "comctl32.lib") + CComModule _Module; BEGIN_OBJECT_MAP(ObjectMap) diff --git a/SeraphyScriptTools.h b/SeraphyScriptTools.h index 2b96bce..224ce5a 100644 --- a/SeraphyScriptTools.h +++ b/SeraphyScriptTools.h @@ -4,7 +4,7 @@ /* File created by MIDL compiler version 8.00.0603 */ -/* at Sun Jul 19 17:53:12 2015 +/* at Sat Jul 25 10:10:02 2015 */ /* Compiler settings for SeraphyScriptTools.idl: Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 8.00.0603 diff --git a/SeraphyScriptTools.sln b/SeraphyScriptTools.sln index 99ca8c9..2be6752 100644 --- a/SeraphyScriptTools.sln +++ b/SeraphyScriptTools.sln @@ -6,26 +6,32 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SeraphyScriptTools", "Serap EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release MinDependency|Win32 = Release MinDependency|Win32 - Release MinSize|Win32 = Release MinSize|Win32 + MBCS Debug|Win32 = MBCS Debug|Win32 + MBCS Debug|x64 = MBCS Debug|x64 + MBCS Release|Win32 = MBCS Release|Win32 + MBCS Release|x64 = MBCS Release|x64 Unicode Debug|Win32 = Unicode Debug|Win32 - Unicode Release MinDependency|Win32 = Unicode Release MinDependency|Win32 - Unicode Release MinSize|Win32 = Unicode Release MinSize|Win32 + Unicode Debug|x64 = Unicode Debug|x64 + Unicode Release|Win32 = Unicode Release|Win32 + Unicode Release|x64 = Unicode Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Debug|Win32.ActiveCfg = Debug|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Debug|Win32.Build.0 = Debug|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Release MinDependency|Win32.ActiveCfg = Release MinDependency|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Release MinDependency|Win32.Build.0 = Release MinDependency|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Release MinSize|Win32.ActiveCfg = Release MinSize|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Release MinSize|Win32.Build.0 = Release MinSize|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Debug|Win32.ActiveCfg = Unicode Debug|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Debug|Win32.Build.0 = Unicode Debug|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release MinDependency|Win32.ActiveCfg = Unicode Release MinDependency|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release MinDependency|Win32.Build.0 = Unicode Release MinDependency|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release MinSize|Win32.ActiveCfg = Unicode Release MinSize|Win32 - {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release MinSize|Win32.Build.0 = Unicode Release MinSize|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Debug|Win32.ActiveCfg = MBCS Debug|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Debug|Win32.Build.0 = MBCS Debug|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Debug|x64.ActiveCfg = MBCS Debug|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Debug|x64.Build.0 = MBCS Debug|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Release|Win32.ActiveCfg = MBCS Release|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Release|Win32.Build.0 = MBCS Release|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Release|x64.ActiveCfg = MBCS Release|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.MBCS Release|x64.Build.0 = MBCS Release|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Debug|Win32.ActiveCfg = Unicode Release|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Debug|Win32.Build.0 = Unicode Release|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Debug|x64.ActiveCfg = Unicode Debug|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Debug|x64.Build.0 = Unicode Debug|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release|Win32.ActiveCfg = Unicode Release|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release|Win32.Build.0 = Unicode Release|Win32 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release|x64.ActiveCfg = Unicode Release|x64 + {06035D5C-5F95-47F2-88B4-D614B0E06D2F}.Unicode Release|x64.Build.0 = Unicode Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SeraphyScriptTools.vcproj b/SeraphyScriptTools.vcproj deleted file mode 100644 index 15bad66..0000000 --- a/SeraphyScriptTools.vcproj +++ /dev/null @@ -1,704 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/SeraphyScriptTools.vcxproj b/SeraphyScriptTools.vcxproj index 252cbc8..9e913ff 100644 --- a/SeraphyScriptTools.vcxproj +++ b/SeraphyScriptTools.vcxproj @@ -1,30 +1,38 @@  - - Debug + + MBCS Debug Win32 - - Release MinDependency - Win32 + + MBCS Debug + x64 - - Release MinSize + + MBCS Release Win32 + + MBCS Release + x64 + Unicode Debug Win32 - - Unicode Release MinDependency - Win32 + + Unicode Debug + x64 - - Unicode Release MinSize + + Unicode Release Win32 + + Unicode Release + x64 + @@ -35,43 +43,51 @@ DynamicLibrary - v120 false Unicode + v120 - + DynamicLibrary - v120 false - Dynamic MultiByte + v120 - + DynamicLibrary + false + Unicode v120 + + + DynamicLibrary false - Dynamic Unicode + v120 - + + Static + Unicode DynamicLibrary v120 - false - MultiByte - + + Static + MultiByte DynamicLibrary v120 - false + + Static Unicode - - DynamicLibrary v120 - false + + Static - MultiByte + Unicode + DynamicLibrary + v120 @@ -79,319 +95,224 @@ - + + + + - + - + - + - + + + + <_ProjectFileVersion>12.0.30501.0 - - .\ReleaseMinDependency\ - .\ReleaseMinDependency\ + false - - .\ReleaseUMinDependency\ - .\ReleaseUMinDependency\ + false - - .\Debug\ - .\Debug\ - true - - - .\ReleaseUMinSize\ - .\ReleaseUMinSize\ + false - - .\ReleaseMinSize\ - .\ReleaseMinSize\ + false - .\DebugU\ - .\DebugU\ true - + + true + + + true + + + true + + + + true + MultiThreaded + true + Create + MinSpace + OnlyExplicitInline + ProgramDatabase + + + + Windows + false + true + + + .\ReleaseUMinDependency/SeraphyScriptTools.tlb + + + + 0x0411 + + + + true + MultiThreaded + true + Create MinSpace OnlyExplicitInline - WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + + + + Windows + false + + + .\ReleaseUMinDependency/SeraphyScriptTools.tlb + + + + 0x0411 + + + + true MultiThreaded true - Use - stdafx.h - .\ReleaseMinDependency/SeraphyScriptTools.pch - .\ReleaseMinDependency/ - .\ReleaseMinDependency/ - .\ReleaseMinDependency/ - Level3 - true + Create - - 登録を行っています - regsvr32 /s /c "$(TargetPath)" -echo regsvr32 exec. time > "$(OutDir)regsvr32.trg" - - $(OutDir)regsvr32.trg;%(Outputs) - + - /MACHINE:I386 %(AdditionalOptions) - comctl32.lib;odbc32.lib;odbccp32.lib;version.lib;%(AdditionalDependencies) - .\ReleaseMinDependency/SeraphyScriptTools.dll - true - .\SeraphyScriptTools.def - .\ReleaseMinDependency/SeraphyScriptTools.pdb Windows - .\ReleaseMinDependency/SeraphyScriptTools.lib + false - .\ReleaseMinDependency/SeraphyScriptTools.tlb + .\ReleaseUMinDependency/SeraphyScriptTools.tlb + - NDEBUG;%(PreprocessorDefinitions) 0x0411 - + - OnlyExplicitInline - WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) true MultiThreaded true - Use - stdafx.h - .\ReleaseUMinDependency/SeraphyScriptTools.pch - .\ReleaseUMinDependency/ - .\ReleaseUMinDependency/ - .\ReleaseUMinDependency/ - Level3 - true + Create - - 登録を行っています - if "%25OS%25"=="" goto NOTNT -if not "%25OS%25"=="Windows_NT" goto NOTNT -regsvr32 /s /c "$(TargetPath)" -echo regsvr32 exec. time > "$(OutDir)regsvr32.trg" -goto end -:NOTNT -echo 警告 : Windows 95 に Unicode DLL を登録することはできません -:end - - $(OutDir)regsvr32.trg;%(Outputs) - + - /MACHINE:I386 %(AdditionalOptions) - comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\ReleaseUMinDependency/SeraphyScriptTools.dll - true - .\SeraphyScriptTools.def - .\ReleaseUMinDependency/SeraphyScriptTools.pdb Windows - .\ReleaseUMinDependency/SeraphyScriptTools.lib + false .\ReleaseUMinDependency/SeraphyScriptTools.tlb + - NDEBUG;%(PreprocessorDefinitions) 0x0411 - + Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug - Use - stdafx.h - .\Debug/SeraphyScriptTools.pch - .\Debug/ - .\Debug/ - .\Debug/ - Level3 - true + Create EditAndContinue - - 登録を行っています - regsvr32 /s /c "$(TargetPath)" -echo regsvr32 exec. time > "$(OutDir)regsvr32.trg" - - $(OutDir)regsvr32.trg;%(Outputs) - + - /MACHINE:I386 %(AdditionalOptions) - comctl32.lib;odbc32.lib;odbccp32.lib;version.lib;%(AdditionalDependencies) - .\Debug/SeraphyScriptTools.dll - true - .\SeraphyScriptTools.def true - .\Debug/SeraphyScriptTools.pdb Windows - .\Debug/SeraphyScriptTools.lib + false - .\Debug/SeraphyScriptTools.tlb + .\DebugU/SeraphyScriptTools.tlb + - _DEBUG;%(PreprocessorDefinitions) 0x0411 - + - OnlyExplicitInline - WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - MultiThreaded - true - Use - stdafx.h - .\ReleaseUMinSize/SeraphyScriptTools.pch - .\ReleaseUMinSize/ - .\ReleaseUMinSize/ - .\ReleaseUMinSize/ - Level3 - true + Disabled + EnableFastChecks + MultiThreadedDebug + Create + EditAndContinue - - 登録を行っています - if "%25OS%25"=="" goto NOTNT -if not "%25OS%25"=="Windows_NT" goto NOTNT -regsvr32 /s /c "$(TargetPath)" -echo regsvr32 exec. time > "$(OutDir)regsvr32.trg" -goto end -:NOTNT -echo 警告 : Windows 95 に Unicode DLL を登録することはできません -:end - - $(OutDir)regsvr32.trg;%(Outputs) - + - /MACHINE:I386 %(AdditionalOptions) - comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\ReleaseUMinSize/SeraphyScriptTools.dll - true - .\SeraphyScriptTools.def - .\ReleaseUMinSize/SeraphyScriptTools.pdb + true Windows - .\ReleaseUMinSize/SeraphyScriptTools.lib + false - .\ReleaseUMinSize/SeraphyScriptTools.tlb + .\DebugU/SeraphyScriptTools.tlb + - NDEBUG;%(PreprocessorDefinitions) 0x0411 - + - OnlyExplicitInline - WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) - true - MultiThreaded - true - Use - stdafx.h - .\ReleaseMinSize/SeraphyScriptTools.pch - .\ReleaseMinSize/ - .\ReleaseMinSize/ - .\ReleaseMinSize/ - Level3 - true + Disabled + EnableFastChecks + MultiThreadedDebug + ProgramDatabase + Create - - 登録を行っています - regsvr32 /s /c "$(TargetPath)" -echo regsvr32 exec. time > "$(OutDir)regsvr32.trg" - - $(OutDir)regsvr32.trg;%(Outputs) - + - /MACHINE:I386 %(AdditionalOptions) - comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\ReleaseMinSize/SeraphyScriptTools.dll - true - .\SeraphyScriptTools.def - .\ReleaseMinSize/SeraphyScriptTools.pdb + true Windows - .\ReleaseMinSize/SeraphyScriptTools.lib - .\ReleaseMinSize/SeraphyScriptTools.tlb + .\DebugU/SeraphyScriptTools.tlb + - NDEBUG;%(PreprocessorDefinitions) 0x0411 - + Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) EnableFastChecks MultiThreadedDebug - Use - stdafx.h - .\DebugU/SeraphyScriptTools.pch - .\DebugU/ - .\DebugU/ - .\DebugU/ - Level3 - true - EditAndContinue + ProgramDatabase + Create - - 登録を行っています - if "%25OS%25"=="" goto NOTNT -if not "%25OS%25"=="Windows_NT" goto NOTNT -regsvr32 /s /c "$(TargetPath)" -echo regsvr32 exec. time > "$(OutDir)regsvr32.trg" -goto end -:NOTNT -echo 警告 : Windows 95 に Unicode DLL を登録することはできません -:end - - $(OutDir)regsvr32.trg;%(Outputs) - + - /MACHINE:I386 %(AdditionalOptions) - comctl32.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) - .\DebugU/SeraphyScriptTools.dll - true - .\SeraphyScriptTools.def true - .\DebugU/SeraphyScriptTools.pdb Windows - .\DebugU/SeraphyScriptTools.lib .\DebugU/SeraphyScriptTools.tlb + - _DEBUG;%(PreprocessorDefinitions) 0x0411 @@ -412,12 +333,14 @@ echo 警告 : Windows 95 に Unicode DLL を登録することはできません - Create - Create - Create Create - Create - Create + Create + Create + Create + Create + Create + Create + Create @@ -443,40 +366,50 @@ echo 警告 : Windows 95 に Unicode DLL を登録することはできません - true - .\SeraphyScriptTools.tlb - SeraphyScriptTools.h - SeraphyScriptTools_i.c - true - .\SeraphyScriptTools.tlb - SeraphyScriptTools.h - SeraphyScriptTools_i.c - true - .\SeraphyScriptTools.tlb - SeraphyScriptTools.h - SeraphyScriptTools_i.c true + true + true + true .\SeraphyScriptTools.tlb + .\SeraphyScriptTools.tlb + .\SeraphyScriptTools.tlb + .\SeraphyScriptTools.tlb SeraphyScriptTools.h + SeraphyScriptTools.h + SeraphyScriptTools.h + SeraphyScriptTools.h SeraphyScriptTools_i.c - true - .\SeraphyScriptTools.tlb - SeraphyScriptTools.h - SeraphyScriptTools_i.c - true - .\SeraphyScriptTools.tlb - SeraphyScriptTools.h - SeraphyScriptTools_i.c + SeraphyScriptTools_i.c + SeraphyScriptTools_i.c + SeraphyScriptTools_i.c + true + true + true + true + .\SeraphyScriptTools.tlb + .\SeraphyScriptTools.tlb + .\SeraphyScriptTools.tlb + .\SeraphyScriptTools.tlb + SeraphyScriptTools.h + SeraphyScriptTools.h + SeraphyScriptTools.h + SeraphyScriptTools.h + SeraphyScriptTools_i.c + SeraphyScriptTools_i.c + SeraphyScriptTools_i.c + SeraphyScriptTools_i.c - $(OUTDIR) - $(OUTDIR) - $(OUTDIR) $(OUTDIR) - $(OUTDIR) - $(OUTDIR) + $(OUTDIR) + $(OUTDIR) + $(OUTDIR) + $(OUTDIR) + $(OUTDIR) + $(OUTDIR) + $(OUTDIR) diff --git a/Shell.cpp b/Shell.cpp index 5b5968e..c0e91cf 100644 --- a/Shell.cpp +++ b/Shell.cpp @@ -4,8 +4,11 @@ #include "Shell.h" #include "generic.h" #include +#include using namespace std; +#pragma comment(lib, "Version.lib") + ///////////////////////////////////////////////////////////////////////////// // CShell @@ -25,67 +28,73 @@ STDMETHODIMP CShell::InterfaceSupportsErrorInfo(REFIID riid) STDMETHODIMP CShell::ShellExecute(VARIANT path, VARIANT param, VARIANT initdir, VARIANT show, VARIANT *punkVal) { - CComVariant varPath,varParam,varInitDir,varMode; - CHAR szPath[MAX_PATH] = { 0 }; - CHAR szInitDir[MAX_PATH] = { 0 }; - int nShow = SW_SHOWNORMAL; - LPSTR pBuf = NULL; - if(varPath.ChangeType(VT_BSTR,&path) == S_OK){ - WideCharToMultiByte(GetACP(),0,varPath.bstrVal,-1,szPath,MAX_PATH,NULL,NULL); + ATL::CString szPath; + CComVariant varPath; + if (varPath.ChangeType(VT_BSTR, &path) == S_OK) { + szPath = varPath.bstrVal; } - if(varParam.ChangeType(VT_BSTR,¶m) == S_OK){ - int needsize = WideCharToMultiByte(GetACP(),0,varParam.bstrVal,-1,NULL,0,NULL,NULL); - pBuf = new CHAR[needsize+1]; - WideCharToMultiByte(GetACP(),0,varParam.bstrVal,-1,pBuf,needsize,NULL,NULL); + + ATL::CString szParam; + CComVariant varParam; + if (varParam.ChangeType(VT_BSTR, ¶m) == S_OK) { + szParam = varParam.bstrVal; } - if(varInitDir.ChangeType(VT_BSTR,&initdir) == S_OK){ - WideCharToMultiByte(GetACP(),0,varInitDir.bstrVal,-1,szInitDir,MAX_PATH,NULL,NULL); + + ATL::CString szInitDir; + CComVariant varInitDir; + if (varInitDir.ChangeType(VT_BSTR, &initdir) == S_OK) { + szInitDir = varInitDir.bstrVal; } - if(varMode.ChangeType(VT_I2,&show) == S_OK){ - switch(varMode.iVal) + + int nShow = SW_SHOWNORMAL; + CComVariant varMode; + if (varMode.ChangeType(VT_I2, &show) == S_OK) { + switch (varMode.iVal) { case 0: nShow = SW_HIDE; break; + case 1: default: nShow = SW_SHOWNORMAL; break; + case 2: nShow = SW_SHOWMAXIMIZED; break; + case 3: nShow = SW_SHOWMINIMIZED; break; + case 4: nShow = SW_SHOWMINNOACTIVE; break; } } + // SHELLEXECUTEINFO info = {0}; info.cbSize = sizeof(SHELLEXECUTEINFO); info.fMask = SEE_MASK_DOENVSUBST | SEE_MASK_NOCLOSEPROCESS; info.hwnd = GetMainWindow(); - info.lpVerb = "OPEN"; + info.lpVerb = _TEXT("OPEN"); info.lpFile = szPath; - info.lpParameters = pBuf; + info.lpParameters = szParam; info.lpDirectory = szInitDir; info.nShow = nShow; - if(ShellExecuteEx(&info)){ + if (ShellExecuteEx(&info)) { // ShellExecObj‚̐¶¬ CComObject* pExec = NULL; - if(pExec->CreateInstance(&pExec) == S_OK){ + if (pExec->CreateInstance(&pExec) == S_OK) { pExec->m_hProcess = info.hProcess; IUnknown* pUnk = NULL; - pExec->QueryInterface(IID_IUnknown,(void**)&pUnk); + pExec->QueryInterface(IID_IUnknown, (void**)&pUnk); punkVal->vt = VT_UNKNOWN; punkVal->punkVal = pUnk; } } - if(pBuf){ - delete[]pBuf; - } return S_OK; } @@ -97,33 +106,33 @@ STDMETHODIMP CShellExecObj::Wait(VARIANT tim, VARIANT *pVal) { ::VariantInit(pVal); BOOL bExit = true; - if(m_hProcess){ + if (m_hProcess) { CComVariant varTim; DWORD dwWaitTime = 0; - if(varTim.ChangeType(VT_I4,&tim) == S_OK){ - if(varTim.lVal < 0){ + if (varTim.ChangeType(VT_I4, &tim) == S_OK) { + if (varTim.lVal < 0) { // –³ŒÀ‚Ü‚¿ dwWaitTime = INFINITE; } - else{ + else { dwWaitTime = (DWORD)varTim.lVal; } } - DWORD ret = WaitForSingleObject(m_hProcess,dwWaitTime); - if(ret == WAIT_TIMEOUT){ + DWORD ret = WaitForSingleObject(m_hProcess, dwWaitTime); + if (ret == WAIT_TIMEOUT) { // ƒvƒƒZƒX‚͏I—¹‚µ‚Ä‚¢‚È‚¢ bExit = false; } } pVal->vt = VT_BOOL; - pVal->boolVal = bExit?VB_TRUE:VB_FALSE; + pVal->boolVal = bExit ? VB_TRUE : VB_FALSE; return S_OK; } STDMETHODIMP CShellExecObj::get_ExitCode(long *pVal) { - if(m_hProcess){ - GetExitCodeProcess(m_hProcess,(DWORD*)pVal); + if (m_hProcess) { + GetExitCodeProcess(m_hProcess, (DWORD*)pVal); } return S_OK; } @@ -131,113 +140,116 @@ STDMETHODIMP CShellExecObj::get_ExitCode(long *pVal) class SPECIALFOLDERPAIR { public: - SPECIALFOLDERPAIR(LPCSTR arg_name,int arg_id){ + SPECIALFOLDERPAIR(LPCTSTR arg_name, int arg_id) { name = arg_name; id = arg_id; } - LPCSTR name; + LPCTSTR name; int id; }; STDMETHODIMP CShell::GetSpecialFolderLocations(IUnknown *punkVal) { - if(!punkVal){ + if (!punkVal) { return E_FAIL; } + IObjectMap* pMap = NULL; - if(punkVal->QueryInterface(IID_IObjectMap,(void**)&pMap) != S_OK){ + if (punkVal->QueryInterface(IID_IObjectMap, (void**)&pMap) != S_OK) { return DISP_E_TYPEMISMATCH; } + // ƒVƒXƒeƒ€ƒo[ƒWƒ‡ƒ“ƒ`ƒFƒbƒN BOOL bWinNT; get_IsWindowNT(&bWinNT); // NTŒn‚̏ꍇ‚Æ9xŒn‚̏ꍇ‚Ƃ͎擾‚Å‚«‚éƒtƒHƒ‹ƒ_‚ÌŽí—Þ‚ª‚¿‚ª‚¤‚Ì‚Å•ª‚¯‚Ä‚¨‚­ - list lst; - if(bWinNT){ + std::list lst; + if (bWinNT) { // WINNT - lst.push_back(SPECIALFOLDERPAIR("ADMINTOOLS",CSIDL_ADMINTOOLS)); - lst.push_back(SPECIALFOLDERPAIR("ALTSTARTUP",CSIDL_ALTSTARTUP)); - lst.push_back(SPECIALFOLDERPAIR("APPDATA",CSIDL_APPDATA)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_ADMINTOOLS",CSIDL_COMMON_ADMINTOOLS)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_ALTSTARTUP",CSIDL_COMMON_ALTSTARTUP)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_APPDATA",CSIDL_COMMON_APPDATA)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_DESKTOPDIRECTORY",CSIDL_COMMON_DESKTOPDIRECTORY)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_DOCUMENTS",CSIDL_COMMON_DOCUMENTS)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_FAVORITES",CSIDL_COMMON_FAVORITES)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_PROGRAMS",CSIDL_COMMON_PROGRAMS)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_STARTMENU",CSIDL_COMMON_STARTMENU)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_STARTUP",CSIDL_COMMON_STARTUP)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_TEMPLATES",CSIDL_COMMON_TEMPLATES)); - lst.push_back(SPECIALFOLDERPAIR("COOKIES",CSIDL_COOKIES)); - lst.push_back(SPECIALFOLDERPAIR("DESKTOPDIRECTORY",CSIDL_DESKTOPDIRECTORY)); - lst.push_back(SPECIALFOLDERPAIR("FAVORITES",CSIDL_FAVORITES)); - lst.push_back(SPECIALFOLDERPAIR("FONTS",CSIDL_FONTS )); - lst.push_back(SPECIALFOLDERPAIR("HISTORY",CSIDL_HISTORY)); - lst.push_back(SPECIALFOLDERPAIR("INTERNET_CACHE ",CSIDL_INTERNET_CACHE )); - lst.push_back(SPECIALFOLDERPAIR("LOCAL_APPDATA ",CSIDL_LOCAL_APPDATA )); - lst.push_back(SPECIALFOLDERPAIR("MYPICTURES",CSIDL_MYPICTURES)); - lst.push_back(SPECIALFOLDERPAIR("NETHOOD",CSIDL_NETHOOD)); - lst.push_back(SPECIALFOLDERPAIR("PERSONAL",CSIDL_PERSONAL)); - lst.push_back(SPECIALFOLDERPAIR("PRINTHOOD",CSIDL_PRINTHOOD)); - lst.push_back(SPECIALFOLDERPAIR("PROFILE ",CSIDL_PROFILE )); - lst.push_back(SPECIALFOLDERPAIR("PROGRAM_FILES",CSIDL_PROGRAM_FILES)); - lst.push_back(SPECIALFOLDERPAIR("PROGRAM_FILES_COMMON",CSIDL_PROGRAM_FILES_COMMON)); - lst.push_back(SPECIALFOLDERPAIR("PROGRAMS",CSIDL_PROGRAMS)); - lst.push_back(SPECIALFOLDERPAIR("RECENT",CSIDL_RECENT )); - lst.push_back(SPECIALFOLDERPAIR("SENDTO",CSIDL_SENDTO )); - lst.push_back(SPECIALFOLDERPAIR("STARTMENU",CSIDL_STARTMENU)); - lst.push_back(SPECIALFOLDERPAIR("STARTUP",CSIDL_STARTUP)); - lst.push_back(SPECIALFOLDERPAIR("SYSTEM",CSIDL_SYSTEM)); - lst.push_back(SPECIALFOLDERPAIR("TEMPLATES",CSIDL_TEMPLATES)); - lst.push_back(SPECIALFOLDERPAIR("WINDOWS",CSIDL_WINDOWS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("ADMINTOOLS"), CSIDL_ADMINTOOLS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("ALTSTARTUP"), CSIDL_ALTSTARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("APPDATA"), CSIDL_APPDATA)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_ADMINTOOLS"), CSIDL_COMMON_ADMINTOOLS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_ALTSTARTUP"), CSIDL_COMMON_ALTSTARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_APPDATA"), CSIDL_COMMON_APPDATA)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_DESKTOPDIRECTORY"), CSIDL_COMMON_DESKTOPDIRECTORY)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_DOCUMENTS"), CSIDL_COMMON_DOCUMENTS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_FAVORITES"), CSIDL_COMMON_FAVORITES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_PROGRAMS"), CSIDL_COMMON_PROGRAMS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_STARTMENU"), CSIDL_COMMON_STARTMENU)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_STARTUP"), CSIDL_COMMON_STARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_TEMPLATES"), CSIDL_COMMON_TEMPLATES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COOKIES"), CSIDL_COOKIES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("DESKTOPDIRECTORY"), CSIDL_DESKTOPDIRECTORY)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("FAVORITES"), CSIDL_FAVORITES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("FONTS"), CSIDL_FONTS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("HISTORY"), CSIDL_HISTORY)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("INTERNET_CACHE"), CSIDL_INTERNET_CACHE)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("LOCAL_APPDATA"), CSIDL_LOCAL_APPDATA)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("MYPICTURES"), CSIDL_MYPICTURES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("NETHOOD"), CSIDL_NETHOOD)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PERSONAL"), CSIDL_PERSONAL)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PRINTHOOD"), CSIDL_PRINTHOOD)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROFILE"), CSIDL_PROFILE)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROGRAM_FILES"), CSIDL_PROGRAM_FILES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROGRAM_FILES_COMMON"), CSIDL_PROGRAM_FILES_COMMON)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROGRAMS"), CSIDL_PROGRAMS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("RECENT"), CSIDL_RECENT)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("SENDTO"), CSIDL_SENDTO)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("STARTMENU"), CSIDL_STARTMENU)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("STARTUP"), CSIDL_STARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("SYSTEM"), CSIDL_SYSTEM)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("TEMPLATES"), CSIDL_TEMPLATES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("WINDOWS"), CSIDL_WINDOWS)); } else{ // Win9x - lst.push_back(SPECIALFOLDERPAIR("ADMINTOOLS",CSIDL_ADMINTOOLS)); - lst.push_back(SPECIALFOLDERPAIR("ALTSTARTUP",CSIDL_ALTSTARTUP)); - lst.push_back(SPECIALFOLDERPAIR("APPDATA",CSIDL_APPDATA)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_ADMINTOOLS",CSIDL_ADMINTOOLS)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_ALTSTARTUP",CSIDL_ALTSTARTUP)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_APPDATA",CSIDL_APPDATA)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_DESKTOPDIRECTORY",CSIDL_DESKTOPDIRECTORY)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_DOCUMENTS",CSIDL_COMMON_DOCUMENTS)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_FAVORITES",CSIDL_FAVORITES)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_PROGRAMS",CSIDL_PROGRAMS)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_STARTMENU",CSIDL_STARTMENU)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_STARTUP",CSIDL_STARTUP)); - lst.push_back(SPECIALFOLDERPAIR("COMMON_TEMPLATES",CSIDL_TEMPLATES)); - lst.push_back(SPECIALFOLDERPAIR("COOKIES",CSIDL_COOKIES)); - lst.push_back(SPECIALFOLDERPAIR("DESKTOPDIRECTORY",CSIDL_DESKTOPDIRECTORY)); - lst.push_back(SPECIALFOLDERPAIR("FAVORITES",CSIDL_FAVORITES)); - lst.push_back(SPECIALFOLDERPAIR("FONTS",CSIDL_FONTS )); - lst.push_back(SPECIALFOLDERPAIR("HISTORY",CSIDL_HISTORY)); - lst.push_back(SPECIALFOLDERPAIR("INTERNET_CACHE ",CSIDL_INTERNET_CACHE )); - lst.push_back(SPECIALFOLDERPAIR("LOCAL_APPDATA ",CSIDL_LOCAL_APPDATA )); - lst.push_back(SPECIALFOLDERPAIR("MYPICTURES",CSIDL_MYPICTURES)); - lst.push_back(SPECIALFOLDERPAIR("NETHOOD",CSIDL_NETHOOD)); - lst.push_back(SPECIALFOLDERPAIR("PERSONAL",CSIDL_PERSONAL)); - lst.push_back(SPECIALFOLDERPAIR("PRINTHOOD",CSIDL_PRINTHOOD)); - lst.push_back(SPECIALFOLDERPAIR("PROFILE ",CSIDL_PROFILE )); - lst.push_back(SPECIALFOLDERPAIR("PROGRAM_FILES",CSIDL_PROGRAM_FILES)); - lst.push_back(SPECIALFOLDERPAIR("PROGRAM_FILES_COMMON",CSIDL_PROGRAM_FILES)); - lst.push_back(SPECIALFOLDERPAIR("PROGRAMS",CSIDL_PROGRAMS)); - lst.push_back(SPECIALFOLDERPAIR("RECENT",CSIDL_RECENT )); - lst.push_back(SPECIALFOLDERPAIR("SENDTO",CSIDL_SENDTO )); - lst.push_back(SPECIALFOLDERPAIR("STARTMENU",CSIDL_STARTMENU)); - lst.push_back(SPECIALFOLDERPAIR("STARTUP",CSIDL_STARTUP)); - lst.push_back(SPECIALFOLDERPAIR("SYSTEM",CSIDL_SYSTEM)); - lst.push_back(SPECIALFOLDERPAIR("TEMPLATES",CSIDL_TEMPLATES)); - lst.push_back(SPECIALFOLDERPAIR("WINDOWS",CSIDL_WINDOWS)); - } - list::iterator p = lst.begin(); - while(p != lst.end()){ + lst.push_back(SPECIALFOLDERPAIR(_TEXT("ADMINTOOLS"), CSIDL_ADMINTOOLS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("ALTSTARTUP"), CSIDL_ALTSTARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("APPDATA"), CSIDL_APPDATA)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_ADMINTOOLS"), CSIDL_ADMINTOOLS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_ALTSTARTUP"), CSIDL_ALTSTARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_APPDATA"), CSIDL_APPDATA)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_DESKTOPDIRECTORY"), CSIDL_DESKTOPDIRECTORY)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_DOCUMENTS"), CSIDL_COMMON_DOCUMENTS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_FAVORITES"), CSIDL_FAVORITES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_PROGRAMS"), CSIDL_PROGRAMS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_STARTMENU"), CSIDL_STARTMENU)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_STARTUP"), CSIDL_STARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COMMON_TEMPLATES"), CSIDL_TEMPLATES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("COOKIES"), CSIDL_COOKIES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("DESKTOPDIRECTORY"), CSIDL_DESKTOPDIRECTORY)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("FAVORITES"), CSIDL_FAVORITES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("FONTS"), CSIDL_FONTS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("HISTORY"), CSIDL_HISTORY)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("INTERNET_CACHE"), CSIDL_INTERNET_CACHE)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("LOCAL_APPDATA"), CSIDL_LOCAL_APPDATA)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("MYPICTURES"), CSIDL_MYPICTURES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("NETHOOD"), CSIDL_NETHOOD)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PERSONAL"), CSIDL_PERSONAL)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PRINTHOOD"), CSIDL_PRINTHOOD)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROFILE"), CSIDL_PROFILE)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROGRAM_FILES"), CSIDL_PROGRAM_FILES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROGRAM_FILES_COMMON"), CSIDL_PROGRAM_FILES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("PROGRAMS"), CSIDL_PROGRAMS)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("RECENT"), CSIDL_RECENT)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("SENDTO"), CSIDL_SENDTO)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("STARTMENU"), CSIDL_STARTMENU)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("STARTUP"), CSIDL_STARTUP)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("SYSTEM"), CSIDL_SYSTEM)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("TEMPLATES"), CSIDL_TEMPLATES)); + lst.push_back(SPECIALFOLDERPAIR(_TEXT("WINDOWS"), CSIDL_WINDOWS)); + } + + std::list::iterator p = lst.begin(); + while (p != lst.end()) { LPITEMIDLIST pid = NULL; - if(SHGetSpecialFolderLocation(NULL,(*p).id,&pid) == NOERROR){ - CHAR buf[MAX_PATH] = {0}; - if(SHGetPathFromIDList(pid,buf)){ - CComVariant key((LPCSTR)(*p).name); - CComVariant value((LPCSTR)buf); - pMap->put_Value(key,value); + if (SHGetSpecialFolderLocation(NULL, (*p).id, &pid) == NOERROR) { + TCHAR buf[MAX_PATH] = {0}; + if (SHGetPathFromIDList(pid, buf)) { + CComVariant key((*p).name); + CComVariant value(buf); + pMap->put_Value(key, value); } m_pMalloc->Free(pid); } @@ -264,7 +276,7 @@ STDMETHODIMP CShell::get_WindowsVersion(long *pVal) OSVERSIONINFO vinfo = {0}; vinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&vinfo); - if(vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT){ + if (vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) { *pVal = (long)vinfo.dwMajorVersion; } return S_OK; @@ -272,41 +284,49 @@ STDMETHODIMP CShell::get_WindowsVersion(long *pVal) STDMETHODIMP CShell::GetDLLVersion(VARIANT text,VARIANT min, VARIANT *pVal) { - CComVariant varText,varMin; - CHAR lpszDllName[MAX_PATH] = { 0 }; - if(varText.ChangeType(VT_BSTR,&text) == S_OK){ - WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,lpszDllName,MAX_PATH,NULL,NULL); + ATL::CString lpszDllName; + CComVariant varText; + if (varText.ChangeType(VT_BSTR,&text) == S_OK) { + lpszDllName = varText.bstrVal; } + BOOL bMin = false; + CComVariant varMin; if(varMin.ChangeType(VT_I2,&min) == S_OK){ bMin = varMin.iVal; } + CComVariant ret; DWORD siz = GetFileVersionInfoSize(lpszDllName,0); - if(siz){ - LPBYTE pBuf = new BYTE[siz+1]; - if(GetFileVersionInfo(lpszDllName,0,siz,pBuf)){ + if (siz) { + std::vector buf(siz + 1); + LPBYTE pBuf = &buf[0]; + if (GetFileVersionInfo(lpszDllName, 0, siz,pBuf)) { // ƒo[ƒWƒ‡ƒ“î•ñ‚ðŽæ“¾‚·‚é VS_FIXEDFILEINFO* pverInfo; UINT sz = 0; - if(VerQueryValue(pBuf,"\\",(void**)&pverInfo,&sz)){ + if (VerQueryValue(pBuf,_TEXT("\\"), (void**) &pverInfo, &sz)) { // ƒo[ƒWƒ‡ƒ“‚ðŠm”F‰Â”\‚Å‚ ‚é - CHAR mes[256]; - if(bMin){ + TCHAR mes[256]; + if (bMin) { // Ú× - wsprintf(mes,"%d.%d.%d.%d" - ,HIWORD(pverInfo->dwFileVersionMS),LOWORD(pverInfo->dwFileVersionMS) - ,HIWORD(pverInfo->dwFileVersionLS),LOWORD(pverInfo->dwFileVersionLS)); + wsprintf(mes, _TEXT("%d.%d.%d.%d"), + HIWORD(pverInfo->dwFileVersionMS), + LOWORD(pverInfo->dwFileVersionMS), + HIWORD(pverInfo->dwFileVersionLS), + LOWORD(pverInfo->dwFileVersionLS) + ); } - else{ + else { // ’ʏí - wsprintf(mes,"%d.%d" - ,HIWORD(pverInfo->dwFileVersionMS),LOWORD(pverInfo->dwFileVersionMS)); + wsprintf(mes, _TEXT("%d.%d"), + HIWORD(pverInfo->dwFileVersionMS), + LOWORD(pverInfo->dwFileVersionMS) + ); } - ret = (LPCSTR)mes; + ret = mes; } } - delete[]pBuf; } ret.Detach(pVal); return S_OK; @@ -315,13 +335,14 @@ STDMETHODIMP CShell::GetDLLVersion(VARIANT text,VARIANT min, VARIANT *pVal) STDMETHODIMP CShell::ParseName(VARIANT text, VARIANT *pVal) { ::VariantInit(pVal); + CComVariant varText; - if(varText.ChangeType(VT_BSTR,&text) == S_OK){ + if (varText.ChangeType(VT_BSTR,&text) == S_OK) { CComObject* pParse = NULL; - if(pParse->CreateInstance(&pParse) == S_OK){ + 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){ + if (pParse->QueryInterface(IID_IUnknown,(void**)&pUnk) == S_OK) { pVal->vt = VT_UNKNOWN; pVal->punkVal = pUnk; } @@ -335,22 +356,21 @@ STDMETHODIMP CShell::ParseName(VARIANT text, VARIANT *pVal) STDMETHODIMP CParseName::InterfaceSupportsErrorInfo(REFIID riid) { - static const IID* arr[] = - { + static const IID* arr[] = { &IID_ISeraphyScriptTool_ParseName }; - for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) - { - if (IsEqualGUID(*arr[i],riid)) + + for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++) { + if (IsEqualGUID(*arr[i], riid)) { return S_OK; + } } return S_FALSE; } STDMETHODIMP CParseName::get_PathName(BSTR *pVal) { - *pVal = m_bstr_path.copy(); - return S_OK; + return m_bstr_path.CopyTo(pVal); } STDMETHODIMP CParseName::put_PathName(BSTR newVal) @@ -361,10 +381,11 @@ STDMETHODIMP CParseName::put_PathName(BSTR newVal) STDMETHODIMP CParseName::get_FileName(BSTR *pVal) { - LPWSTR p = m_bstr_path; - while(*p)p++; - while(p > (LPCWSTR)m_bstr_path){ - if(*p == '\\' || *p == '/'){ + LPWSTR st = m_bstr_path; + LPWSTR p = st; + while (*p) p++; + while (p > st) { + if (*p == '\\' || *p == '/') { // ––”ö‚©‚çÅ‰‚É”­Œ©‚³‚ꂽƒtƒHƒ‹ƒ_ƒvƒŒ[ƒX‚ÅŽ~‚Ü‚é p++; break; @@ -378,7 +399,7 @@ STDMETHODIMP CParseName::get_FileName(BSTR *pVal) STDMETHODIMP CParseName::put_FileName(BSTR newVal) { WCHAR buf[MAX_PATH]; - lstrcpyW(buf,m_bstr_path); + lstrcpyW(buf, m_bstr_path); LPWSTR p = buf; while(*p)p++; while(p > buf){ @@ -389,7 +410,7 @@ STDMETHODIMP CParseName::put_FileName(BSTR newVal) } p--; } - lstrcpyW(p,newVal); + lstrcpyW(p, newVal); m_bstr_path = buf; return S_OK; } @@ -399,20 +420,20 @@ STDMETHODIMP CParseName::get_Extention(BSTR *pVal) BOOL bFind = false; LPWSTR p = m_bstr_path; while(*p)p++; - while(p > (LPCWSTR)m_bstr_path){ - if(*p == '.'){ + while (p > (LPCWSTR)m_bstr_path) { + if (*p == '.') { bFind = true; p++; break; } - if(*p == '\\' || *p == '/'){ + if (*p == '\\' || *p == '/') { // ƒtƒHƒ‹ƒ_ƒvƒŒ[ƒX‚Å’†Ž~‚·‚é break; } p--; } - if(!bFind){ - while(*p)p++; + if (!bFind) { + while (*p) p++; } *pVal = SysAllocString(p); return S_OK; @@ -424,25 +445,25 @@ STDMETHODIMP CParseName::put_Extention(BSTR newVal) lstrcpyW(buf,m_bstr_path); BOOL bFind = false; LPWSTR p = buf; - while(*p)p++; - while(p > buf){ - if(*p == '.'){ + while (*p) p++; + while (p > buf) { + if (*p == '.') { bFind = true; p++; break; } - if(*p == '\\' || *p == '/'){ + if (*p == '\\' || *p == '/') { // ƒtƒHƒ‹ƒ_ƒvƒŒ[ƒX‚Å’†Ž~‚·‚é break; } p--; } - if(!bFind){ + if (!bFind) { // ‰½‚à‚È‚¯‚ê‚Ζ–”ö‚ɒljÁ‚·‚é - while(*p)p++; - lstrcpyW(p,L"."); + while (*p) p++; + lstrcpyW(p, L"."); } - lstrcpyW(p,newVal); + lstrcpyW(p, newVal); m_bstr_path = buf; return S_OK; } @@ -633,52 +654,61 @@ HRESULT CShell::FileOperationCore(UINT wFunc, FILEOP_FLAGS flag, VARIANT *from, { ::VariantInit(pResult); CComVariant result; - CHAR szDest[MAX_PATH+2] = { 0 }; // double null - if(to){ + + ATL::CString szTo; + if (to) { CComVariant varTo; if(to->vt != VT_NULL && to->vt != VT_ERROR || to->vt == VT_EMPTY - || varTo.ChangeType(VT_BSTR,to) != S_OK){ + || varTo.ChangeType(VT_BSTR, to) != S_OK) { return DISP_E_TYPEMISMATCH; } - WideCharToMultiByte(GetACP(),0,varTo.bstrVal,-1,szDest,MAX_PATH,NULL,NULL); + szTo = varTo.bstrVal; } - LPSTR pFrom = CreateDNStringFromVariant(*from); - if(!pFrom){ + int len = szTo.GetLength(); + LPTSTR pTo = szTo.GetBufferSetLength(len + 2); // ƒ_ƒuƒ‹ƒkƒ‹I’[ + pTo[len] = 0; + pTo[len + 1] = 0; + + std::vector buf; + if (!CreateDNStringFromVariant(*from, buf)) { return DISP_E_TYPEMISMATCH; } + SHFILEOPSTRUCT info = {0}; info.fFlags = flag | FOF_ALLOWUNDO | (m_bSilent?FOF_SILENT:0) | (m_bConfirm?0:(FOF_NOCONFIRMMKDIR|FOF_NOCONFIRMATION)); info.hwnd = GetMainWindow(); - info.pFrom = pFrom; - info.pTo = szDest; + info.pFrom = &buf[0]; + info.pTo = pTo; info.wFunc = wFunc; int ret = SHFileOperation(&info); - delete[]pFrom; + result = (bool)(!ret && !info.fAnyOperationsAborted); result.Detach(pResult); return S_OK; } -LPSTR CShell::CreateDNStringFromVariant(VARIANT &from) +bool CShell::CreateDNStringFromVariant(VARIANT &from, std::vector &buf) { - LPSTR pBuf = NULL; CComVariant varFrom; - if(varFrom.ChangeType(VT_BSTR,&from) == S_OK){ - // BSTR‚É•ÏŠ·‰Â”\‚©? - int needsize = WideCharToMultiByte(GetACP(),0,varFrom.bstrVal,-1,NULL,0,NULL,NULL); - pBuf = new CHAR[needsize+2]; - WideCharToMultiByte(GetACP(),0,varFrom.bstrVal,-1,pBuf,needsize,NULL,NULL); - pBuf[needsize ] = 0; - pBuf[needsize+1] = 0; // double null - return pBuf; - } - else if(varFrom.ChangeType(VT_UNKNOWN,&from) == S_OK){ - // Unknown‚É•ÏŠ·‰Â”\‚©? + + // •¶Žš—ñ‚É•ÏŠ·‰Â”\‚©H + if (varFrom.ChangeType(VT_BSTR, &from) == S_OK) { + ATL::CString tmp(varFrom.bstrVal); + int bufsiz = tmp.GetLength() + 2; // ƒ_ƒuƒ‹ƒkƒ‹I’[•ª + buf.resize(bufsiz, 0); + LPTSTR pBuf = &buf[0]; + StringCbCopy(pBuf, bufsiz, tmp); + return true; + } + + // Unknown -> IObjectVector ‚É•ÏŠ·‰Â”\‚©? + if (varFrom.ChangeType(VT_UNKNOWN, &from) == S_OK) { IObjectVector* pVector = NULL; - if(varFrom.punkVal->QueryInterface(IID_IObjectVector,(void**)&pVector) != S_OK){ + if (varFrom.punkVal->QueryInterface(IID_IObjectVector,(void**)&pVector) != S_OK) { // IObjectVector‚Å‚Í‚È‚¢‚È‚çƒGƒ‰[ - return NULL; + return false; } + // ”z—ñ‚ðŽæ“¾‚·‚é long mx = 0; pVector->get_Count(&mx); @@ -691,121 +721,146 @@ LPSTR CShell::CreateDNStringFromVariant(VARIANT &from) pVector->get_Value(idx,&tmp); if(tmp.ChangeType(VT_BSTR) != S_OK){ // •¶Žš—ñ‚É•ÏŠ·•s‰Â”\ - return NULL; + return false; } - needsize += WideCharToMultiByte(GetACP(),0,tmp.bstrVal,-1,NULL,0,NULL,NULL) + 1; + ATL::CString czTmp(tmp.bstrVal); + needsize += czTmp.GetLength() + 1; // +1‚̓kƒ‹I’[•ª } - needsize += 1; // dobulenull + needsize += 1; // ƒ_ƒuƒ‹ƒkƒ‹I’[•ª + // ”z—ñ‚ðƒ_ƒuƒ‹ƒkƒ‹‚É“WŠJ‚·‚é - pBuf = new CHAR[needsize]; - LPSTR p = pBuf; - for(cnt = 0 ; cnt < mx ; cnt++){ + buf.resize(needsize, 0); + LPTSTR pBuf = &buf[0]; + LPTSTR p = pBuf; + for (cnt = 0 ; cnt < mx ; cnt++) { CComVariant tmp; CComVariant idx((long)cnt); - pVector->get_Value(idx,&tmp); - if(tmp.ChangeType(VT_BSTR) == S_OK){ - int sz = WideCharToMultiByte(GetACP(),0,tmp.bstrVal,-1,p,MAX_PATH,NULL,NULL); - *(p + sz) = 0; - p += sz; + if (SUCCEEDED(pVector->get_Value(idx, &tmp))) { + if (tmp.ChangeType(VT_BSTR) == S_OK) { + ATL::CString szTmp(tmp.bstrVal); + StringCbCopy(p, needsize, szTmp); + int len = szTmp.GetLength() + 1; + p += len; + needsize -= len; + } } } *p = 0; // dobule null pVector->Release(); - return pBuf; - } - else{ - // SafeArray‚©? - VARTYPE vt = VT_EMPTY; - SAFEARRAY* pArray = GetArrayFromVariant(from,&vt); - if(!pArray || vt != VT_VARIANT){ - // SafeArray‚Å‚È‚¢‚©AŒ^‚ª‚¿‚ª‚¤ + return true; + } + + // SafeArray‚©? + VARTYPE vt = VT_EMPTY; + SAFEARRAY* pArray = GetArrayFromVariant(from, &vt); + if (!pArray || vt != VT_VARIANT) { + // SafeArray‚Å‚È‚¢‚©AŒ^‚ª‚¿‚ª‚¤ + return false; + } + + long lb = 0; + long ub = 0; + int dm = SafeArrayGetDim(pArray); + SafeArrayGetLBound(pArray, 1, &lb); // ¶‘¤‚Ì“Y‚¦Žš + SafeArrayGetUBound(pArray, 1, &ub); + if (dm != 1 || lb != 0) { + // 1ŽŸŒ³”z—ñ‚Å‚È‚¢‚©A0ƒx[ƒX‚Å‚È‚¢ + return false; + } + + DWORD needsize = 0; + long dim[1]; + // ƒoƒbƒtƒ@‚É•K—v‚ȃTƒCƒY‚ð‹‚ß‚é + for (long cnt = 0 ; cnt <= ub ; cnt++) { + CComVariant tmp; + dim[0] = cnt; + SafeArrayGetElement(pArray, dim, &tmp); + if (tmp.ChangeType(VT_BSTR) != S_OK) { + // •¶Žš—ñ‚É•ÏŠ·•s‰Â”\ return NULL; } - long lb = 0; - long ub = 0; - int dm = SafeArrayGetDim(pArray); - SafeArrayGetLBound(pArray,1,&lb); // ¶‘¤‚Ì“Y‚¦Žš - SafeArrayGetUBound(pArray,1,&ub); - if(dm != 1 || lb != 0){ - // 1ŽŸŒ³”z—ñ‚Å‚È‚¢‚©A0ƒx[ƒX‚Å‚È‚¢ + ATL::CString szTmp(tmp.bstrVal); + needsize += szTmp.GetLength() + 1; + } + needsize += 1; // ƒ_ƒuƒ‹ƒkƒ‹I’[•ª + + // ƒoƒbƒtƒ@‚ðŠm•Û‚µ“WŠJ‚·‚é + buf.resize(needsize); + LPTSTR pBuf = &buf[0]; + LPTSTR p = pBuf; + for (long cnt = 0 ; cnt <= ub ; cnt++) { + CComVariant tmp; + dim[0] = cnt; + SafeArrayGetElement(pArray, dim, &tmp); + if (tmp.ChangeType(VT_BSTR) != S_OK) { + // •¶Žš—ñ‚É•ÏŠ·•s‰Â”\ return NULL; } - DWORD needsize = 0; - long dim[1]; - long cnt; - // ƒoƒbƒtƒ@‚É•K—v‚ȃTƒCƒY‚ð‹‚ß‚é - for(cnt = 0 ; cnt <= ub ; cnt++){ - CComVariant tmp; - dim[0] = cnt; - SafeArrayGetElement(pArray,dim,&tmp); - if(tmp.ChangeType(VT_BSTR) != S_OK){ - // •¶Žš—ñ‚É•ÏŠ·•s‰Â”\ - return NULL; - } - needsize += WideCharToMultiByte(GetACP(),0,tmp.bstrVal,-1,NULL,0,NULL,NULL) + 1; - } - // ƒoƒbƒtƒ@‚ðŠm•Û‚µ“WŠJ‚·‚é - pBuf = new CHAR[needsize]; - LPSTR p = pBuf; - for(cnt = 0 ; cnt <= ub ; cnt++){ - CComVariant tmp; - dim[0] = cnt; - SafeArrayGetElement(pArray,dim,&tmp); - if(tmp.ChangeType(VT_BSTR) != S_OK){ - // •¶Žš—ñ‚É•ÏŠ·•s‰Â”\ - return NULL; - } - int sz = WideCharToMultiByte(GetACP(),0,tmp.bstrVal,-1,p,MAX_PATH,NULL,NULL); - *(p + sz) = 0; - p += sz; - } - *p = 0; - return pBuf; + + ATL::CString szTmp(tmp.bstrVal); + StringCbCopy(p, needsize, szTmp); + int len = szTmp.GetLength() + 1; + p += len; + needsize -= len; } - return NULL; + *p = 0; // ƒ_ƒuƒ‹ƒkƒ‹I’[ + return true; } STDMETHODIMP CShell::EmptyRecycleBin(VARIANT dir) { - CComVariant varDir; - LPCSTR pTarget = NULL; - CHAR szPath[MAX_PATH]; - if(dir.vt == VT_NULL || dir.vt == VT_ERROR || dir.vt == VT_EMPTY){ + LPCTSTR pTarget = NULL; + + if (dir.vt == VT_NULL || dir.vt == VT_ERROR || dir.vt == VT_EMPTY) { // ‚·‚ׂđΏۂƂ·‚é pTarget = NULL; } - if(varDir.ChangeType(VT_BSTR,&dir) == S_OK){ - // “Á’è‚̃hƒ‰ƒCƒu‚ðƒ^[ƒQƒbƒg‚·‚é - WideCharToMultiByte(GetACP(),0,varDir.bstrVal,-1,szPath,MAX_PATH,NULL,NULL); - pTarget = szPath; - } - else{ - // •ÏŠ·•s‰Â - return DISP_E_TYPEMISMATCH; + else { + ATL::CString szPath; + CComVariant varDir; + if (varDir.ChangeType(VT_BSTR, &dir) == S_OK) { + // “Á’è‚̃hƒ‰ƒCƒu‚ðƒ^[ƒQƒbƒg‚·‚é + szPath = varDir.bstrVal; + if (!szPath.IsEmpty()) { + // ‹ó•¶Žš‚Å‚È‚¯‚ê‚Î + pTarget = szPath; + } + } + else { + // •ÏŠ·•s‰Â + return DISP_E_TYPEMISMATCH; + } } - SHEmptyRecycleBin(NULL,pTarget,(m_bConfirm?0:SHERB_NOCONFIRMATION) | (m_bSilent?(SHERB_NOPROGRESSUI|SHERB_NOSOUND ):0)); + + SHEmptyRecycleBin(NULL, pTarget, (m_bConfirm?0:SHERB_NOCONFIRMATION) | (m_bSilent?(SHERB_NOPROGRESSUI|SHERB_NOSOUND) : 0)); return S_OK; } STDMETHODIMP CShell::RecentDocs(VARIANT text) { - CComVariant varText; - LPCSTR pTarget = NULL; - CHAR szPath[MAX_PATH]; + LPCTSTR pTarget = NULL; + if(text.vt == VT_NULL || text.vt == VT_ERROR || text.vt == VT_EMPTY){ // —š—ð‚ðƒNƒŠƒA‚·‚é pTarget = NULL; } - if(varText.ChangeType(VT_BSTR,&text) == S_OK){ - // “Á’è‚̃tƒ@ƒCƒ‹‚ð’ljÁ‚·‚é - WideCharToMultiByte(GetACP(),0,varText.bstrVal,-1,szPath,MAX_PATH,NULL,NULL); - pTarget = szPath; - } - else{ - // •ÏŠ·•s‰Â - return DISP_E_TYPEMISMATCH; + else { + ATL::CString szPath; + CComVariant varText; + if (varText.ChangeType(VT_BSTR, &text) == S_OK){ + // “Á’è‚̃tƒ@ƒCƒ‹‚ð’ljÁ‚·‚é + szPath = text.bstrVal; + if (!szPath.IsEmpty()) { + // ‹ó•¶Žš‚Å‚È‚¯‚ê‚Î + pTarget = szPath; + } + } + else{ + // •ÏŠ·•s‰Â + return DISP_E_TYPEMISMATCH; + } } - SHAddToRecentDocs(SHARD_PATH,pTarget); + SHAddToRecentDocs(SHARD_PATH, pTarget); return S_OK; } @@ -818,8 +873,8 @@ STDMETHODIMP CShell::SetMainWindow(VARIANT varUnk) } // ƒCƒ“ƒ^[ƒtƒFƒCƒX‚̎擾 CComVariant tmp; - if(tmp.ChangeType(VT_UNKNOWN,&varUnk) == S_OK){ - if(tmp.punkVal->QueryInterface(IID_IOverlappedWindow,(void**)&m_pMainWindow) == S_OK){ + if (tmp.ChangeType(VT_UNKNOWN, &varUnk) == S_OK) { + if (tmp.punkVal->QueryInterface(IID_IOverlappedWindow, (void**)&m_pMainWindow) == S_OK) { return S_OK; } } @@ -828,18 +883,23 @@ STDMETHODIMP CShell::SetMainWindow(VARIANT varUnk) STDMETHODIMP CShell::IsExist(VARIANT name, VARIANT *pVal) { - CComVariant varName,varRet; - if(varName.ChangeType(VT_BSTR,&name) != S_OK){ + CComVariant varRet; + + CComVariant varName; + if (varName.ChangeType(VT_BSTR, &name) != S_OK){ return DISP_E_TYPEMISMATCH; } - CHAR szPath[MAX_PATH]; - WideCharToMultiByte(GetACP(),0,varName.bstrVal,-1,szPath,MAX_PATH,NULL,NULL); + + ATL::CString szPath(varName.bstrVal); + DWORD attr = GetFileAttributes(szPath); - if(attr != (DWORD)-1){ - if(attr & FILE_ATTRIBUTE_DIRECTORY) + if (attr != (DWORD) -1) { + if (attr & FILE_ATTRIBUTE_DIRECTORY) { varRet = 2; - else + } + else { varRet = 1; + } } varRet.Detach(pVal); return S_OK; diff --git a/Shell.h b/Shell.h index cd42fe0..75c7af8 100644 --- a/Shell.h +++ b/Shell.h @@ -5,6 +5,8 @@ #include "resource.h" // ƒƒCƒ“ ƒVƒ“ƒ{ƒ‹ +#include + ///////////////////////////////////////////////////////////////////////////// // CShell class ATL_NO_VTABLE CShell : @@ -62,7 +64,7 @@ public: BOOL m_bSilent; BOOL m_bConfirm; HRESULT FileOperationCore(UINT wFunc,FILEOP_FLAGS flag,VARIANT* from,VARIANT* to,VARIANT* pResult); - LPSTR CreateDNStringFromVariant(VARIANT& from); + bool CreateDNStringFromVariant(VARIANT& from, std::vector &buf); STDMETHOD(get_Silent)(/*[out, retval]*/ BOOL *pVal); STDMETHOD(put_Silent)(/*[in]*/ BOOL newVal); STDMETHOD(get_Confirm)(/*[out, retval]*/ BOOL *pVal); @@ -162,7 +164,7 @@ public: STDMETHOD(put_FileName)(/*[in]*/ BSTR newVal); STDMETHOD(get_PathName)(/*[out, retval]*/ BSTR *pVal); STDMETHOD(put_PathName)(/*[in]*/ BSTR newVal); - _bstr_t m_bstr_path; + CComBSTR m_bstr_path; }; #endif //__SHELL_H_ diff --git a/StdAfx.h b/StdAfx.h index 8bf9ebe..f4a5b38 100644 --- a/StdAfx.h +++ b/StdAfx.h @@ -21,13 +21,16 @@ extern CComModule _Module; #include #include +#include #include #include #include -#define WM_MOVENEXT_OVERLAPPED (WM_USER+100) -#define WM_KEYDOWN_EX (WM_USER+101) +#include + +#define WM_MOVENEXT_OVERLAPPED (WM_USER + 100) +#define WM_KEYDOWN_EX (WM_USER + 101) //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ ‚Í‘Os‚Ì’¼‘O‚ɒljÁ‚̐錾‚ð‘}“ü‚µ‚Ü‚·B diff --git a/TreeItem.cpp b/TreeItem.cpp index 16e3ba4..7587599 100644 --- a/TreeItem.cpp +++ b/TreeItem.cpp @@ -62,36 +62,37 @@ BOOL CTreeItem::DeleteTreeItemWithData(HWND hWnd,HTREEITEM hItem) return true; } -void CTreeItem::CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCSTR text, IUnknown **punkVal) +void CTreeItem::CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCTSTR text, IUnknown **punkVal) { // ƒAƒCƒeƒ€‚ª•Û—L‚·‚é˜A‘z”z—ñ‚𐶐¬‚·‚é IUnknown* pUnk = NULL; CComObject* pMap = NULL; - if(pMap->CreateInstance(&pMap) == S_OK){ - pMap->QueryInterface(IID_IUnknown,(void**)&pUnk); + if (pMap->CreateInstance(&pMap) == S_OK) { + pMap->QueryInterface(IID_IUnknown, (void**)&pUnk); } // ‘}“ü‚·‚éƒAƒCƒeƒ€‚Ì’è‹` + ATL::CString tmp(text); TVINSERTSTRUCT is = { 0 }; is.hParent = hParent; is.hInsertAfter = TVI_LAST; is.item.mask = TVIF_TEXT | TVIF_PARAM; - is.item.pszText = (LPSTR)text; - is.item.cchTextMax = lstrlen(text); + is.item.pszText = tmp.GetBuffer(); + is.item.cchTextMax = tmp.GetLength(); is.item.lParam = (LPARAM)pUnk; - HTREEITEM hNewItem = TreeView_InsertItem(hWnd,&is); - if(hNewItem){ + HTREEITEM hNewItem = TreeView_InsertItem(hWnd, &is); + if (hNewItem) { // ƒAƒCƒeƒ€‚ւ̃IƒuƒWƒFƒNƒg‚ðì¬‚·‚é CComObject* pItem = NULL; - if(pItem->CreateInstance(&pItem) == S_OK){ - pItem->SetParam(hWnd,hNewItem); - pItem->QueryInterface(IID_IUnknown,(void**)punkVal); + if (pItem->CreateInstance(&pItem) == S_OK) { + pItem->SetParam(hWnd, hNewItem); + pItem->QueryInterface(IID_IUnknown, (void**)punkVal); } } } STDMETHODIMP CTreeItem::IsValid(BOOL *pResult) { - *pResult = (m_hItem != NULL)?VB_TRUE:VB_FALSE; + *pResult = (m_hItem != NULL) ? VB_TRUE : VB_FALSE; return S_OK; } diff --git a/TreeItem.h b/TreeItem.h index 4bf5423..53e662c 100644 --- a/TreeItem.h +++ b/TreeItem.h @@ -37,7 +37,7 @@ END_COM_MAP() // ITreeItem public: STDMETHOD(IsValid)(/*[out,retval]*/BOOL* pResult); - static void CreateTreeItem(HWND hWnd,HTREEITEM hParent,LPCSTR text,IUnknown** punkVal); + static void CreateTreeItem(HWND hWnd,HTREEITEM hParent, LPCTSTR text, IUnknown** punkVal); STDMETHOD(Sort)() { HRESULT ret = InitialCheck(); @@ -103,22 +103,23 @@ public: // ƒAƒCƒeƒ€‚̍쐬 *punkVal = NULL; HRESULT ret = InitialCheck(); - if(ret == S_OK){ - if(m_hItem){ - CHAR mes[MAX_PATH]; - CComVariant str; - if(str.ChangeType(VT_BSTR,&text) == S_OK){ - int cnt = WideCharToMultiByte(GetACP(),0,str.bstrVal,-1,mes,MAX_PATH,NULL,NULL); - CreateTreeItem(m_hWnd,m_hItem,mes,punkVal); - } - } - else{ - // •s³‚ȃAƒCƒeƒ€‚ðŽQÆ‚µ‚Ä‚¢‚é - ret = DISP_E_EXCEPTION; + 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; } - return ret; + // •s³‚ȃAƒCƒeƒ€‚ðŽQÆ‚µ‚Ä‚¢‚é + return DISP_E_EXCEPTION; } + STDMETHOD(get_Object)(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal) { // ƒAƒCƒeƒ€‚ÉŠÖ˜A•t‚¯‚ç‚ꂽ˜A‘z”z—ñƒIƒuƒWƒFƒNƒg‚ðŽæ“¾‚·‚é @@ -151,49 +152,51 @@ public: ErrorInfo(IDS_ERR_TREEERROR); return DISP_E_EXCEPTION; } + STDMETHOD(get_Text)(/*[out, retval]*/ BSTR *pVal) { // ƒeƒLƒXƒg‚̎擾 HRESULT ret = InitialCheck(); - if(!m_hItem){ + if (!m_hItem) { // •s³‚ȃAƒCƒeƒ€‚ðŽQÆ‚µ‚Ä‚¢‚é ret = DISP_E_EXCEPTION; } - if(ret == S_OK){ - CHAR text[MAX_PATH]; + + 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)){ - WCHAR wMes[MAX_PATH] = {0}; - MultiByteToWideChar(GetACP(),0,text,-1,wMes,MAX_PATH); - *pVal = SysAllocString(wMes); + if (TreeView_GetItem(m_hWnd,&itm)) { + CComBSTR ret(text); + *pVal = ret.Detach(); } } return ret; } + STDMETHOD(put_Text)(/*[in]*/ BSTR newVal) { // ƒeƒLƒXƒg‚̏‘‚«Š·‚¦ HRESULT ret = InitialCheck(); - if(!m_hItem){ + if (!m_hItem) { // •s³‚ȃAƒCƒeƒ€‚ðŽQÆ‚µ‚Ä‚¢‚é ret = DISP_E_EXCEPTION; } - if(ret == S_OK){ - CHAR text[MAX_PATH] = {0}; + if (ret == S_OK) { + ATL::CString tmp(newVal); TVITEM itm = {0}; itm.mask = TVIF_TEXT; itm.hItem = m_hItem; - itm.pszText = text; - itm.cchTextMax = MAX_PATH; - WideCharToMultiByte(GetACP(),0,newVal,-1,text,MAX_PATH,NULL,NULL); - TreeView_SetItem(m_hWnd,&itm); + itm.pszText = tmp.GetBuffer(); + itm.cchTextMax = tmp.GetLength(); // Set‚̏ꍇ‚Í–³Ž‹‚³‚ê‚é + TreeView_SetItem(m_hWnd, &itm); } return ret; } + STDMETHOD(get_PrevItem)(/*[out, retval]*/ IUnknown* *pVal) { // ‘O‚̃AƒCƒeƒ€ diff --git a/generic.cpp b/generic.cpp index 116ee12..7e7025c 100644 --- a/generic.cpp +++ b/generic.cpp @@ -6,11 +6,10 @@ void ErrorInfo(int nMessageID) { ICreateErrorInfo *pCErrInfo; if(CreateErrorInfo(&pCErrInfo) == S_OK){ - WCHAR wmes[MAX_PATH]; - CHAR mes[MAX_PATH]; - if(LoadString(_Module.m_hInst,nMessageID,mes,MAX_PATH)){ - MultiByteToWideChar(GetACP(),0,mes,-1,wmes,MAX_PATH); - pCErrInfo->SetDescription(wmes); + TCHAR mes[MAX_PATH]; + if (LoadString(_Module.m_hInst, nMessageID, mes, MAX_PATH)) { + CComBSTR tmp(mes); + pCErrInfo->SetDescription((LPOLESTR) tmp); pCErrInfo->SetGUID(IID_IOverlappedWindow); pCErrInfo->SetSource(L"SeraphyScriptTools"); IErrorInfo* perrinfo;