修正代码细节

This commit is contained in:
Nomango 2018-07-25 16:44:22 +08:00
parent 2d4e5ef60a
commit cc300aeb7c
5 changed files with 68 additions and 160 deletions

View File

@ -317,9 +317,9 @@ void e2d::Window::setConsoleEnabled(bool enabled)
hwnd = ::GetConsoleWindow(); hwnd = ::GetConsoleWindow();
// 重定向输入输出 // 重定向输入输出
FILE * stdoutStream, * stdinStream, * stderrStream; FILE * stdoutStream, * stdinStream, * stderrStream;
freopen_s(&stdoutStream, "conout$", "w+t", stdout); WARN_IF(freopen_s(&stdoutStream, "conout$", "w+t", stdout) != 0, "freopen stdout failed!");
freopen_s(&stdinStream, "conin$", "r+t", stdin); WARN_IF(freopen_s(&stdinStream, "conin$", "r+t", stdin) != 0, "freopen stdin failed!");
freopen_s(&stderrStream, "conout$", "w+t", stderr); WARN_IF(freopen_s(&stderrStream, "conout$", "w+t", stderr) != 0, "freopen stderr failed!");
// 禁用控制台关闭按钮 // 禁用控制台关闭按钮
HMENU hmenu = ::GetSystemMenu(hwnd, FALSE); HMENU hmenu = ::GetSystemMenu(hwnd, FALSE);
::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND); ::RemoveMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);

View File

@ -79,7 +79,7 @@ e2d::String e2d::String::format(const char * format, ...)
{ {
std::string tmp; std::string tmp;
va_list marker = nullptr; va_list marker;
va_start(marker, format); va_start(marker, format);
size_t nu_of_chars = _vscprintf(format, marker); size_t nu_of_chars = _vscprintf(format, marker);
@ -101,7 +101,7 @@ e2d::String e2d::String::format(const wchar_t * format, ...)
{ {
std::wstring tmp; std::wstring tmp;
va_list marker = nullptr; va_list marker;
va_start(marker, format); va_start(marker, format);
size_t nu_of_chars = _vscwprintf(format, marker); size_t nu_of_chars = _vscwprintf(format, marker);

View File

@ -1,8 +1,29 @@
#include "..\e2dnode.h" #include "..\e2dnode.h"
#define SAFE_SET(pointer, func, ...) if (pointer) { pointer->##func(__VA_ARGS__); }
#define SET_BUTTON_NODE(Old, New) \
if (New != Old) \
{ \
if (Old) this->removeChild(Old); \
if (New) \
{ \
this->addChild(New); \
this->setSize(New->getWidth(), New->getHeight()); \
} \
Old = New; \
_updateState(); \
_updateVisible(); \
} \
e2d::ToggleButton::ToggleButton() e2d::ToggleButton::ToggleButton()
: Button() : Button()
, _toggle(true) , _toggle(true)
, _normalOn(nullptr)
, _mouseoverOn(nullptr)
, _selectedOn(nullptr)
, _disabledOn(nullptr)
, _normalOff(nullptr) , _normalOff(nullptr)
, _mouseoverOff(nullptr) , _mouseoverOff(nullptr)
, _selectedOff(nullptr) , _selectedOff(nullptr)
@ -13,6 +34,10 @@ e2d::ToggleButton::ToggleButton()
e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, const Function& func) e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, const Function& func)
: Button() : Button()
, _toggle(true) , _toggle(true)
, _normalOn(nullptr)
, _mouseoverOn(nullptr)
, _selectedOn(nullptr)
, _disabledOn(nullptr)
, _normalOff(nullptr) , _normalOff(nullptr)
, _mouseoverOff(nullptr) , _mouseoverOff(nullptr)
, _selectedOff(nullptr) , _selectedOff(nullptr)
@ -26,6 +51,10 @@ e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, c
e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnSelected, Node * toggleOffSelected, const Function& func) e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnSelected, Node * toggleOffSelected, const Function& func)
: Button() : Button()
, _toggle(true) , _toggle(true)
, _normalOn(nullptr)
, _mouseoverOn(nullptr)
, _selectedOn(nullptr)
, _disabledOn(nullptr)
, _normalOff(nullptr) , _normalOff(nullptr)
, _mouseoverOff(nullptr) , _mouseoverOff(nullptr)
, _selectedOff(nullptr) , _selectedOff(nullptr)
@ -41,6 +70,10 @@ e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, N
e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnMouseOver, Node * toggleOffMouseOver, Node * toggleOnSelected, Node * toggleOffSelected, const Function& func) e2d::ToggleButton::ToggleButton(Node * toggleOnNormal, Node * toggleOffNormal, Node * toggleOnMouseOver, Node * toggleOffMouseOver, Node * toggleOnSelected, Node * toggleOffSelected, const Function& func)
: Button() : Button()
, _toggle(true) , _toggle(true)
, _normalOn(nullptr)
, _mouseoverOn(nullptr)
, _selectedOn(nullptr)
, _disabledOn(nullptr)
, _normalOff(nullptr) , _normalOff(nullptr)
, _mouseoverOff(nullptr) , _mouseoverOff(nullptr)
, _selectedOff(nullptr) , _selectedOff(nullptr)
@ -91,186 +124,57 @@ void e2d::ToggleButton::setState(bool bState)
void e2d::ToggleButton::setNormal(Node * normal) void e2d::ToggleButton::setNormal(Node * normal)
{ {
if (normal != _normal) SET_BUTTON_NODE(_normalOn, normal);
{
// 移除旧的
if (_normal)
{
this->removeChild(_normal);
}
// 添加新的
if (normal)
{
this->addChild(normal);
this->setSize(normal->getWidth(), normal->getHeight());
}
_normal = normal;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setMouseOver(Node * mouseover) void e2d::ToggleButton::setMouseOver(Node * mouseover)
{ {
if (mouseover != _mouseover) SET_BUTTON_NODE(_mouseoverOn, mouseover);
{
// 移除旧的
if (_mouseover)
{
this->removeChild(_mouseover);
}
// 添加新的
if (mouseover)
{
this->addChild(mouseover);
}
_mouseover = mouseover;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setSelected(Node * selected) void e2d::ToggleButton::setSelected(Node * selected)
{ {
if (selected != _selected) SET_BUTTON_NODE(_selectedOn, selected);
{
// 移除旧的
if (_selected)
{
this->removeChild(_selected);
}
// 添加新的
if (selected)
{
this->addChild(selected);
}
_selected = selected;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setDisabled(Node * disabled) void e2d::ToggleButton::setDisabled(Node * disabled)
{ {
if (disabled != _disabled) SET_BUTTON_NODE(_disabledOn, disabled);
{
// 移除旧的
if (_disabled)
{
this->removeChild(_disabled);
}
// 添加新的
if (disabled)
{
this->addChild(disabled);
}
_disabled = disabled;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setNormalOff(Node * normal) void e2d::ToggleButton::setNormalOff(Node * normal)
{ {
if (normal != _normalOff) SET_BUTTON_NODE(_normalOff, normal);
{
// 移除旧的
if (_normalOff)
{
this->removeChild(_normalOff);
}
// 添加新的
if (normal)
{
this->addChild(normal);
}
_normalOff = normal;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setMouseOverOff(Node * mouseover) void e2d::ToggleButton::setMouseOverOff(Node * mouseover)
{ {
if (mouseover != _mouseoverOff) SET_BUTTON_NODE(_mouseoverOff, mouseover);
{
// 移除旧的
if (_mouseoverOff)
{
this->removeChild(_mouseoverOff);
}
// 添加新的
if (mouseover)
{
this->addChild(mouseover);
}
_mouseoverOff = mouseover;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setSelectedOff(Node * selected) void e2d::ToggleButton::setSelectedOff(Node * selected)
{ {
if (selected != _selectedOff) SET_BUTTON_NODE(_selectedOff, selected);
{
// 移除旧的
if (_selectedOff)
{
this->removeChild(_selectedOff);
}
// 添加新的
if (selected)
{
this->addChild(selected);
}
_selectedOff = selected;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::setDisabledOff(Node * disabled) void e2d::ToggleButton::setDisabledOff(Node * disabled)
{ {
if (disabled != _disabledOff) SET_BUTTON_NODE(_disabledOff, disabled);
{
// 移除旧的
if (_disabledOff)
{
this->removeChild(_disabledOff);
}
// 添加新的
if (disabled)
{
this->addChild(disabled);
}
_disabledOff = disabled;
_updateState();
_updateVisible();
}
} }
void e2d::ToggleButton::_updateState() void e2d::ToggleButton::_updateState()
{ {
if (_toggle) if (_toggle)
{ {
_normal = _normal; _normal = _normalOn;
_mouseover = _mouseover; _mouseover = _mouseoverOn;
_selected = _selected; _selected = _selectedOn;
_disabled = _disabled; _disabled = _disabledOn;
if (_normalOff) _normalOff->setVisible(false); SAFE_SET(_normalOff, setVisible, false);
if (_mouseoverOff) _mouseoverOff->setVisible(false); SAFE_SET(_mouseoverOff, setVisible, false);
if (_selectedOff) _selectedOff->setVisible(false); SAFE_SET(_selectedOff, setVisible, false);
if (_disabledOff) _disabledOff->setVisible(false); SAFE_SET(_disabledOff, setVisible, false);
} }
else else
{ {
@ -279,10 +183,10 @@ void e2d::ToggleButton::_updateState()
_selected = _selectedOff; _selected = _selectedOff;
_disabled = _disabledOff; _disabled = _disabledOff;
if (_normal) _normal->setVisible(false); SAFE_SET(_normalOn, setVisible, false);
if (_mouseover) _mouseover->setVisible(false); SAFE_SET(_mouseoverOn, setVisible, false);
if (_selected) _selected->setVisible(false); SAFE_SET(_selectedOn, setVisible, false);
if (_disabled) _disabled->setVisible(false); SAFE_SET(_disabledOn, setVisible, false);
} }
} }

View File

@ -461,10 +461,10 @@ bool e2d::Music::_findMediaFileCch(wchar_t* strDestPath, int cchDest, const wcha
// Get the exe _name, and exe path // Get the exe _name, and exe path
wchar_t strExePath[MAX_PATH] = { 0 }; wchar_t strExePath[MAX_PATH] = { 0 };
wchar_t strExeName[MAX_PATH] = { 0 }; wchar_t strExeName[MAX_PATH] = { 0 };
wchar_t* strLastSlash = nullptr;
GetModuleFileName(HINST_THISCOMPONENT, strExePath, MAX_PATH); GetModuleFileName(HINST_THISCOMPONENT, strExePath, MAX_PATH);
strExePath[MAX_PATH - 1] = 0; strExePath[MAX_PATH - 1] = 0;
strLastSlash = wcsrchr(strExePath, TEXT('\\'));
wchar_t* strLastSlash = wcsrchr(strExePath, TEXT('\\'));
if (strLastSlash) if (strLastSlash)
{ {
wcscpy_s(strExeName, MAX_PATH, &strLastSlash[1]); wcscpy_s(strExeName, MAX_PATH, &strLastSlash[1]);

View File

@ -945,6 +945,10 @@ protected:
virtual void _runCallback() override; virtual void _runCallback() override;
protected: protected:
Node* _normalOn;
Node* _mouseoverOn;
Node* _selectedOn;
Node* _disabledOn;
Node* _normalOff; Node* _normalOff;
Node* _mouseoverOff; Node* _mouseoverOff;
Node* _selectedOff; Node* _selectedOff;