mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 17:15:00 -06:00
165 lines
3.7 KiB
C++
Executable File
165 lines
3.7 KiB
C++
Executable File
// Windows/CommonDialog.cpp
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#ifndef _UNICODE
|
|
#include "Common/StringConvert.h"
|
|
#endif
|
|
#include "Common/MyCom.h"
|
|
#include "CommonDialog.h"
|
|
|
|
#ifndef _UNICODE
|
|
extern bool g_IsNT;
|
|
#endif
|
|
|
|
namespace NWindows{
|
|
|
|
#ifndef _UNICODE
|
|
class CDoubleZeroStringListA
|
|
{
|
|
CRecordVector<int> m_Indexes;
|
|
AString m_String;
|
|
public:
|
|
void Add(LPCSTR s);
|
|
void SetForBuffer(LPSTR buffer);
|
|
};
|
|
|
|
void CDoubleZeroStringListA::Add(LPCSTR s)
|
|
{
|
|
m_String += s;
|
|
m_Indexes.Add(m_String.Length());
|
|
m_String += ' ';
|
|
}
|
|
|
|
void CDoubleZeroStringListA::SetForBuffer(LPSTR buffer)
|
|
{
|
|
MyStringCopy(buffer, (const char *)m_String);
|
|
for (int i = 0; i < m_Indexes.Size(); i++)
|
|
buffer[m_Indexes[i]] = '\0';
|
|
}
|
|
#endif
|
|
|
|
class CDoubleZeroStringListW
|
|
{
|
|
CRecordVector<int> m_Indexes;
|
|
UString m_String;
|
|
public:
|
|
void Add(LPCWSTR s);
|
|
void SetForBuffer(LPWSTR buffer);
|
|
};
|
|
|
|
void CDoubleZeroStringListW::Add(LPCWSTR s)
|
|
{
|
|
m_String += s;
|
|
m_Indexes.Add(m_String.Length());
|
|
m_String += L' ';
|
|
}
|
|
|
|
void CDoubleZeroStringListW::SetForBuffer(LPWSTR buffer)
|
|
{
|
|
MyStringCopy(buffer, (const wchar_t *)m_String);
|
|
for (int i = 0; i < m_Indexes.Size(); i++)
|
|
buffer[m_Indexes[i]] = L'\0';
|
|
}
|
|
|
|
bool MyGetOpenFileName(HWND hwnd, LPCWSTR title, LPCWSTR fullFileName, LPCWSTR s, UString &resPath)
|
|
{
|
|
const int kBufferSize = MAX_PATH * 2;
|
|
#ifndef _UNICODE
|
|
if (!g_IsNT)
|
|
{
|
|
CHAR buffer[kBufferSize];
|
|
MyStringCopy(buffer, (const char *)GetSystemString(fullFileName));
|
|
OPENFILENAME info;
|
|
info.lStructSize = sizeof(info);
|
|
info.hwndOwner = hwnd;
|
|
info.hInstance = 0;
|
|
const int kFilterBufferSize = MAX_PATH;
|
|
CHAR filterBuffer[kFilterBufferSize];
|
|
CDoubleZeroStringListA doubleZeroStringList;
|
|
doubleZeroStringList.Add(GetSystemString(s));
|
|
doubleZeroStringList.Add("*.*");
|
|
doubleZeroStringList.SetForBuffer(filterBuffer);
|
|
info.lpstrFilter = filterBuffer;
|
|
|
|
info.lpstrCustomFilter = NULL;
|
|
info.nMaxCustFilter = 0;
|
|
info.nFilterIndex = 0;
|
|
|
|
info.lpstrFile = buffer;
|
|
info.nMaxFile = kBufferSize;
|
|
|
|
info.lpstrFileTitle = NULL;
|
|
info.nMaxFileTitle = 0;
|
|
|
|
info.lpstrInitialDir= NULL;
|
|
|
|
info.lpstrTitle = 0;
|
|
AString titleA;
|
|
if (title != 0)
|
|
{
|
|
titleA = GetSystemString(title);
|
|
info.lpstrTitle = titleA;
|
|
}
|
|
|
|
info.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;
|
|
info.nFileOffset = 0;
|
|
info.nFileExtension = 0;
|
|
info.lpstrDefExt = NULL;
|
|
|
|
info.lCustData = 0;
|
|
info.lpfnHook = NULL;
|
|
info.lpTemplateName = NULL;
|
|
|
|
bool res = BOOLToBool(::GetOpenFileNameA(&info));
|
|
resPath = GetUnicodeString(buffer);
|
|
return res;
|
|
}
|
|
else
|
|
#endif
|
|
{
|
|
WCHAR buffer[kBufferSize];
|
|
MyStringCopy(buffer, fullFileName);
|
|
OPENFILENAMEW info;
|
|
info.lStructSize = sizeof(info);
|
|
info.hwndOwner = hwnd;
|
|
info.hInstance = 0;
|
|
const int kFilterBufferSize = MAX_PATH;
|
|
WCHAR filterBuffer[kFilterBufferSize];
|
|
CDoubleZeroStringListW doubleZeroStringList;
|
|
doubleZeroStringList.Add(s);
|
|
doubleZeroStringList.Add(L"*.*");
|
|
doubleZeroStringList.SetForBuffer(filterBuffer);
|
|
info.lpstrFilter = filterBuffer;
|
|
|
|
info.lpstrCustomFilter = NULL;
|
|
info.nMaxCustFilter = 0;
|
|
info.nFilterIndex = 0;
|
|
|
|
info.lpstrFile = buffer;
|
|
info.nMaxFile = kBufferSize;
|
|
|
|
info.lpstrFileTitle = NULL;
|
|
info.nMaxFileTitle = 0;
|
|
|
|
info.lpstrInitialDir= NULL;
|
|
|
|
info.lpstrTitle = title;
|
|
|
|
info.Flags = OFN_EXPLORER | OFN_HIDEREADONLY;
|
|
info.nFileOffset = 0;
|
|
info.nFileExtension = 0;
|
|
info.lpstrDefExt = NULL;
|
|
|
|
info.lCustData = 0;
|
|
info.lpfnHook = NULL;
|
|
info.lpTemplateName = NULL;
|
|
|
|
bool res = BOOLToBool(::GetOpenFileNameW(&info));
|
|
resPath = buffer;
|
|
return res;
|
|
}
|
|
}
|
|
|
|
}
|