#define UNICODE
#define _UNICODE
-#define _WIN32_WINNT 0x0600
-#undef _WIN32_IE
-#define _WIN32_IE 0x0400
#include <tchar.h>
#include <direct.h>
}
// メモリを確保してマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoW(LPCSTR lpString, int c)
{
wchar_t* p;
}
// 指定したサイズのメモリを確保してマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoWBuffer(LPCSTR lpString, int c, int size)
{
wchar_t* p;
}
// メモリを確保してNULL区切りマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoWMultiString(LPCSTR lpString)
{
int count;
}
// 指定したサイズのメモリを確保してNULL区切りマルチバイト文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateMtoWMultiStringBuffer(LPCSTR lpString, int size)
{
int count;
}
// メモリを確保してワイド文字列からマルチバイト文字列へ変換
+// リソースIDならば元の値を返す
char* DuplicateWtoM(LPCWSTR lpString, int c)
{
char* p;
}
// メモリを確保してShift_JIS文字列からワイド文字列へ変換
+// リソースIDならば元の値を返す
wchar_t* DuplicateAtoW(LPCSTR lpString, int c)
{
wchar_t* p;
}
// メモリを確保してワイド文字列からShift_JIS文字列へ変換
+// リソースIDならば元の値を返す
char* DuplicateWtoA(LPCWSTR lpString, int c)
{
char* p;
}
// 文字列用に確保したメモリを開放
+// リソースIDならば何もしない
void FreeDuplicatedString(void* p)
{
if(p < (void*)0x00010000 || p == (void*)~0)
return r;
}
-BOOL SetDllDirectoryM(LPCSTR lpPathName)
-{
- BOOL r = FALSE;
- wchar_t* pw0 = NULL;
-START_ROUTINE
- pw0 = DuplicateMtoW(lpPathName, -1);
- r = SetDllDirectoryW(pw0);
-END_ROUTINE
- FreeDuplicatedString(pw0);
- return r;
-}
-
DWORD GetTempPathM(DWORD nBufferLength, LPSTR lpBuffer)
{
DWORD r = 0;
a0.hIcon = v0->hIcon;
a0.pszCaption = DuplicateMtoW(v0->pszCaption, -1);
a0.nPages = v0->nPages;
- a0.pStartPage = DuplicateMtoW(v0->pStartPage, -1);
- if(v0->ppsp && (pwPage = (PROPSHEETPAGEW*)malloc(sizeof(PROPSHEETPAGEW) * v0->nPages)))
+ if(v0->dwFlags & PSH_USEPSTARTPAGE)
+ a0.pStartPage = DuplicateMtoW(v0->pStartPage, -1);
+ else
+ a0.nStartPage = v0->nStartPage;
+ if(v0->dwFlags & PSH_PROPSHEETPAGE)
{
- for(i = 0; i < v0->nPages; i++)
+ if(v0->ppsp && (pwPage = (PROPSHEETPAGEW*)malloc(sizeof(PROPSHEETPAGEW) * v0->nPages)))
{
- pwPage[i].dwSize = sizeof(PROPSHEETPAGEW);
- pwPage[i].dwFlags = v0->ppsp[i].dwFlags;
- pwPage[i].hInstance = v0->ppsp[i].hInstance;
- pwPage[i].pszTemplate = DuplicateMtoW(v0->ppsp[i].pszTemplate, -1);
- if(v0->ppsp[i].dwFlags & PSP_USEICONID)
- pwPage[i].pszIcon = DuplicateMtoW(v0->ppsp[i].pszIcon, -1);
- else
- pwPage[i].hIcon = v0->ppsp[i].hIcon;
- if(v0->ppsp[i].dwFlags & PSP_USETITLE)
- pwPage[i].pszTitle = DuplicateMtoW(v0->ppsp[i].pszTitle, -1);
- pwPage[i].pfnDlgProc = v0->ppsp[i].pfnDlgProc;
- pwPage[i].lParam = v0->ppsp[i].lParam;
- // TODO: pfnCallback
- pwPage[i].pfnCallback = (LPFNPSPCALLBACKW)v0->ppsp[i].pfnCallback;
- pwPage[i].pcRefParent = v0->ppsp[i].pcRefParent;
-// pwPage[i].pszHeaderTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderTitle, -1);
-// pwPage[i].pszHeaderSubTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderSubTitle, -1);
- pwPage[i].hActCtx = v0->ppsp[i].hActCtx;
-// pwPage[i].pszbmHeader = DuplicateMtoW(v0->ppsp[i].pszbmHeader, -1);
+ for(i = 0; i < v0->nPages; i++)
+ {
+ pwPage[i].dwSize = sizeof(PROPSHEETPAGEW);
+ pwPage[i].dwFlags = v0->ppsp[i].dwFlags;
+ pwPage[i].hInstance = v0->ppsp[i].hInstance;
+ if(v0->ppsp[i].dwFlags & PSP_DLGINDIRECT)
+ pwPage[i].pResource = v0->ppsp[i].pResource;
+ else
+ pwPage[i].pszTemplate = DuplicateMtoW(v0->ppsp[i].pszTemplate, -1);
+ if(v0->ppsp[i].dwFlags & PSP_USEICONID)
+ pwPage[i].pszIcon = DuplicateMtoW(v0->ppsp[i].pszIcon, -1);
+ else
+ pwPage[i].hIcon = v0->ppsp[i].hIcon;
+ if(v0->ppsp[i].dwFlags & PSP_USETITLE)
+ pwPage[i].pszTitle = DuplicateMtoW(v0->ppsp[i].pszTitle, -1);
+ pwPage[i].pfnDlgProc = v0->ppsp[i].pfnDlgProc;
+ pwPage[i].lParam = v0->ppsp[i].lParam;
+ // TODO: pfnCallback
+ pwPage[i].pfnCallback = (LPFNPSPCALLBACKW)v0->ppsp[i].pfnCallback;
+ pwPage[i].pcRefParent = v0->ppsp[i].pcRefParent;
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERTITLE)
+ pwPage[i].pszHeaderTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderTitle, -1);
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERSUBTITLE)
+ pwPage[i].pszHeaderSubTitle = DuplicateMtoW(v0->ppsp[i].pszHeaderSubTitle, -1);
+ }
}
+ else
+ pwPage = NULL;
+ a0.ppsp = pwPage;
}
else
- pwPage = NULL;
- a0.ppsp = pwPage;
+ a0.phpage = v0->phpage;
a0.pfnCallback = v0->pfnCallback;
+ if(v0->dwFlags & PSH_USEHBMWATERMARK)
+ a0.hbmWatermark = v0->hbmWatermark;
+ else
+ a0.pszbmWatermark = DuplicateMtoW(v0->pszbmWatermark, -1);
r = PropertySheetW(&a0);
if(a0.dwFlags & PSH_USEICONID)
FreeDuplicatedString((void*)a0.pszIcon);
FreeDuplicatedString((void*)a0.pszCaption);
- FreeDuplicatedString((void*)a0.pStartPage);
- if(pwPage)
+ if(v0->dwFlags & PSH_USEPSTARTPAGE)
+ FreeDuplicatedString((void*)a0.pStartPage);
+ if(v0->dwFlags & PSH_PROPSHEETPAGE)
{
- for(i = 0; i < v0->nPages; i++)
+ if(pwPage)
{
- FreeDuplicatedString((void*)pwPage[i].pszTemplate);
- if(pwPage[i].dwFlags & PSP_USEICONID)
- FreeDuplicatedString((void*)pwPage[i].pszIcon);
- if(pwPage[i].dwFlags & PSP_USETITLE)
- FreeDuplicatedString((void*)pwPage[i].pszTitle);
-// FreeDuplicatedString((void*)pwPage[i].pszHeaderTitle);
-// FreeDuplicatedString((void*)pwPage[i].pszHeaderSubTitle);
-// FreeDuplicatedString((void*)pwPage[i].pszbmHeader);
+ for(i = 0; i < v0->nPages; i++)
+ {
+ if(!(v0->ppsp[i].dwFlags & PSP_DLGINDIRECT))
+ FreeDuplicatedString((void*)pwPage[i].pszTemplate);
+ if(v0->ppsp[i].dwFlags & PSP_USEICONID)
+ FreeDuplicatedString((void*)pwPage[i].pszIcon);
+ if(v0->ppsp[i].dwFlags & PSP_USETITLE)
+ FreeDuplicatedString((void*)pwPage[i].pszTitle);
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERTITLE)
+ FreeDuplicatedString((void*)pwPage[i].pszHeaderTitle);
+ if(v0->ppsp[i].dwFlags & PSP_USEHEADERSUBTITLE)
+ FreeDuplicatedString((void*)pwPage[i].pszHeaderSubTitle);
+ }
+ free(pwPage);
}
- free(pwPage);
}
+ if(!(v0->dwFlags & PSH_USEHBMWATERMARK))
+ FreeDuplicatedString((void*)a0.pszbmWatermark);
END_ROUTINE
return r;
}
wFileOp.fFlags = lpFileOp->fFlags;
wFileOp.fAnyOperationsAborted = lpFileOp->fAnyOperationsAborted;
wFileOp.hNameMappings = lpFileOp->hNameMappings;
- pw2 = DuplicateMtoW(lpFileOp->lpszProgressTitle, -1);
+ if(lpFileOp->fFlags & FOF_SIMPLEPROGRESS)
+ pw2 = DuplicateMtoW(lpFileOp->lpszProgressTitle, -1);
r = SHFileOperationW(&wFileOp);
lpFileOp->fAnyOperationsAborted = wFileOp.fAnyOperationsAborted;
END_ROUTINE
wmii.hbmpChecked = lpmii->hbmpChecked;
wmii.hbmpUnchecked = lpmii->hbmpUnchecked;
wmii.dwItemData = lpmii->dwItemData;
- pw0 = DuplicateMtoWBuffer(lpmii->dwTypeData, -1, lpmii->cch * 4);
- wmii.dwTypeData = pw0;
- wmii.cch = lpmii->cch * 4;
+ if(lpmii->fMask & MIIM_TYPE)
+ {
+ pw0 = DuplicateMtoWBuffer(lpmii->dwTypeData, -1, lpmii->cch * 4);
+ wmii.dwTypeData = pw0;
+ wmii.cch = lpmii->cch * 4;
+ }
+ wmii.hbmpItem = lpmii->hbmpItem;
r = GetMenuItemInfoW(hmenu, item, fByPosition, &wmii);
lpmii->fType = wmii.fType;
lpmii->fState = wmii.fState;