将Game::createMutex函数整合到Game::init中
This commit is contained in:
parent
d125e5cf5b
commit
6d45a70ff2
|
|
@ -118,7 +118,7 @@ e2d::Sequence * e2d::Sequence::reverse() const
|
||||||
{
|
{
|
||||||
if (*iter)
|
if (*iter)
|
||||||
{
|
{
|
||||||
newActions.push_back(*iter);
|
newActions.push_back((*iter)->reverse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sequence->add(newActions);
|
sequence->add(newActions);
|
||||||
|
|
|
||||||
|
|
@ -116,7 +116,7 @@ e2d::Spawn * e2d::Spawn::reverse() const
|
||||||
{
|
{
|
||||||
if (*iter)
|
if (*iter)
|
||||||
{
|
{
|
||||||
newActions.push_back(*iter);
|
newActions.push_back((*iter)->reverse());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spawn->add(newActions);
|
spawn->add(newActions);
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ static bool s_bInitialized = false;
|
||||||
static e2d::String s_sGameName;
|
static e2d::String s_sGameName;
|
||||||
|
|
||||||
|
|
||||||
bool e2d::Game::init(const String& name)
|
bool e2d::Game::init(const String& name, const String& mutexName)
|
||||||
{
|
{
|
||||||
if (s_bInitialized)
|
if (s_bInitialized)
|
||||||
{
|
{
|
||||||
|
|
@ -21,6 +21,25 @@ bool e2d::Game::init(const String& name)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mutexName.isEmpty())
|
||||||
|
{
|
||||||
|
// 创建进程互斥体
|
||||||
|
HANDLE hMutex = ::CreateMutex(NULL, TRUE, L"Easy2DApp-" + mutexName);
|
||||||
|
|
||||||
|
if (hMutex == nullptr)
|
||||||
|
{
|
||||||
|
WARN_IF(true, "CreateMutex Failed!");
|
||||||
|
}
|
||||||
|
else if (::GetLastError() == ERROR_ALREADY_EXISTS)
|
||||||
|
{
|
||||||
|
// 如果程序已经存在并且正在运行,弹窗提示
|
||||||
|
Window::info(L"游戏已在其他窗口中打开!", L"提示");
|
||||||
|
// 关闭进程互斥体
|
||||||
|
::CloseHandle(hMutex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 初始化 COM 组件
|
// 初始化 COM 组件
|
||||||
CoInitialize(NULL);
|
CoInitialize(NULL);
|
||||||
|
|
||||||
|
|
@ -206,43 +225,6 @@ void e2d::Game::destroy()
|
||||||
s_bInitialized = false;
|
s_bInitialized = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Game::createMutex(const String& sMutexName, const String& sWindowTitle)
|
|
||||||
{
|
|
||||||
// 创建进程互斥体
|
|
||||||
HANDLE _hMutex = ::CreateMutex(NULL, TRUE, L"Easy2DApp-" + sMutexName);
|
|
||||||
|
|
||||||
if (_hMutex == nullptr)
|
|
||||||
{
|
|
||||||
WARN_IF(true, "CreateMutex Failed!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 如果程序已经存在并且正在运行
|
|
||||||
if (::GetLastError() == ERROR_ALREADY_EXISTS)
|
|
||||||
{
|
|
||||||
// 关闭进程互斥体
|
|
||||||
::CloseHandle(_hMutex);
|
|
||||||
// 打开指定窗口
|
|
||||||
if (!sWindowTitle.isEmpty())
|
|
||||||
{
|
|
||||||
// 获取窗口句柄
|
|
||||||
HWND hProgramWnd = ::FindWindow(L"Easy2DApp", sWindowTitle);
|
|
||||||
if (hProgramWnd)
|
|
||||||
{
|
|
||||||
// 获取窗口显示状态
|
|
||||||
WINDOWPLACEMENT wpm;
|
|
||||||
::GetWindowPlacement(hProgramWnd, &wpm);
|
|
||||||
// 将运行的程序窗口还原成正常状态
|
|
||||||
wpm.showCmd = SW_SHOW;
|
|
||||||
::SetWindowPlacement(hProgramWnd, &wpm);
|
|
||||||
::SetWindowPos(hProgramWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
e2d::String e2d::Game::getName()
|
e2d::String e2d::Game::getName()
|
||||||
{
|
{
|
||||||
return s_sGameName;
|
return s_sGameName;
|
||||||
|
|
|
||||||
|
|
@ -291,7 +291,7 @@ void e2d::Window::setTypewritingEnable(bool enable)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void e2d::Window::prompt(const String & text, const String & title)
|
void e2d::Window::info(const String & text, const String & title)
|
||||||
{
|
{
|
||||||
::MessageBox(s_HWnd, text, title, MB_ICONINFORMATION | MB_OK);
|
::MessageBox(s_HWnd, text, title, MB_ICONINFORMATION | MB_OK);
|
||||||
Game::reset();
|
Game::reset();
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,8 @@ class Game
|
||||||
public:
|
public:
|
||||||
// 初始化游戏
|
// 初始化游戏
|
||||||
static bool init(
|
static bool init(
|
||||||
const String& name = L"" /* 游戏英文名称 */
|
const String& name = L"", /* 游戏英文名称 */
|
||||||
|
const String& mutexName = L"" /* 进程互斥体名称 */
|
||||||
);
|
);
|
||||||
|
|
||||||
// 启动游戏
|
// 启动游戏
|
||||||
|
|
@ -40,12 +41,6 @@ public:
|
||||||
// 游戏是否暂停
|
// 游戏是否暂停
|
||||||
static bool isPaused();
|
static bool isPaused();
|
||||||
|
|
||||||
// 创建进程互斥体
|
|
||||||
static bool createMutex(
|
|
||||||
const String& sMutexName, /* 互斥体名称 */
|
|
||||||
const String& sWindowTitle = L"" /* 窗口标题 */
|
|
||||||
);
|
|
||||||
|
|
||||||
// 获取游戏名称
|
// 获取游戏名称
|
||||||
static String getName();
|
static String getName();
|
||||||
};
|
};
|
||||||
|
|
@ -104,7 +99,7 @@ public:
|
||||||
);
|
);
|
||||||
|
|
||||||
// 弹出提示窗口
|
// 弹出提示窗口
|
||||||
static void prompt(
|
static void info(
|
||||||
const String& text, /* 内容 */
|
const String& text, /* 内容 */
|
||||||
const String& title = L"Prompt" /* 窗口标题 */
|
const String& title = L"Prompt" /* 窗口标题 */
|
||||||
);
|
);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue