添加EMenu菜单类;修复了EFileUtils中参数与EString不兼容的问题。

This commit is contained in:
Nomango 2017-11-07 23:32:44 +08:00
parent 339a0724fb
commit f82bccb73d
6 changed files with 139 additions and 25 deletions

View File

@ -236,6 +236,7 @@
<ClCompile Include="Manager\ETimerManager.cpp" /> <ClCompile Include="Manager\ETimerManager.cpp" />
<ClCompile Include="Node\EButton.cpp" /> <ClCompile Include="Node\EButton.cpp" />
<ClCompile Include="Node\EButtonToggle.cpp" /> <ClCompile Include="Node\EButtonToggle.cpp" />
<ClCompile Include="Node\EMenu.cpp" />
<ClCompile Include="Node\ENode.cpp" /> <ClCompile Include="Node\ENode.cpp" />
<ClCompile Include="Node\ESprite.cpp" /> <ClCompile Include="Node\ESprite.cpp" />
<ClCompile Include="Node\EText.cpp" /> <ClCompile Include="Node\EText.cpp" />

View File

@ -210,6 +210,9 @@
<ClCompile Include="Node\EButtonToggle.cpp"> <ClCompile Include="Node\EButtonToggle.cpp">
<Filter>Node</Filter> <Filter>Node</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Node\EMenu.cpp">
<Filter>Node</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="Win\winbase.h"> <ClInclude Include="Win\winbase.h">

69
Easy2D/Node/EMenu.cpp Normal file
View File

@ -0,0 +1,69 @@
#include "..\enodes.h"
e2d::EMenu::EMenu()
: m_bEnable(true)
{
}
e2d::EMenu::EMenu(int number, EButton * button1, ...)
: EMenu()
{
EButton ** ppButton = &button1;
while (number > 0)
{
this->addButton(*ppButton);
ppButton++;
number--;
}
}
bool e2d::EMenu::isEnable() const
{
return m_bEnable;
}
size_t e2d::EMenu::getButtonCount() const
{
return m_vButtons.size();
}
void e2d::EMenu::setEnable(bool enable)
{
m_bEnable = enable;
for (auto &buttons : m_vButtons)
{
buttons->setEnable(enable);
}
}
void e2d::EMenu::addButton(EButton * button)
{
this->addChild(button);
m_vButtons.push_back(button);
}
bool e2d::EMenu::removeButton(EButton * button)
{
if (m_vButtons.empty())
{
return false;
}
this->removeChild(button);
if (button)
{
size_t size = m_vButtons.size();
for (size_t i = 0; i < size; i++)
{
if (m_vButtons[i] == button)
{
m_vButtons.erase(m_vButtons.begin() + i);
return true;
}
}
}
return false;
}

View File

@ -66,37 +66,37 @@ e2d::EString e2d::EFileUtils::getDefaultSavePath()
return path; return path;
} }
void e2d::EFileUtils::saveInt(LPCTSTR key, int value) void e2d::EFileUtils::saveInt(const EString & key, int value)
{ {
::WritePrivateProfileString(L"Default", key, std::to_wstring(value).c_str(), getDefaultSavePath().c_str()); ::WritePrivateProfileString(L"Default", key.c_str(), std::to_wstring(value).c_str(), getDefaultSavePath().c_str());
} }
void e2d::EFileUtils::saveFloat(LPCTSTR key, float value) void e2d::EFileUtils::saveFloat(const EString & key, float value)
{ {
::WritePrivateProfileString(L"Default", key, std::to_wstring(value).c_str(), getDefaultSavePath().c_str()); ::WritePrivateProfileString(L"Default", key.c_str(), std::to_wstring(value).c_str(), getDefaultSavePath().c_str());
} }
void e2d::EFileUtils::saveString(LPCTSTR key, LPCTSTR value) void e2d::EFileUtils::saveString(const EString & key, const EString & value)
{ {
::WritePrivateProfileString(L"Default", key, value, getDefaultSavePath().c_str()); ::WritePrivateProfileString(L"Default", key.c_str(), value.c_str(), getDefaultSavePath().c_str());
} }
int e2d::EFileUtils::getInt(LPCTSTR key, int default) int e2d::EFileUtils::getInt(const EString & key, int default)
{ {
return ::GetPrivateProfileInt(L"Default", key, default, getDefaultSavePath().c_str()); return ::GetPrivateProfileInt(L"Default", key.c_str(), default, getDefaultSavePath().c_str());
} }
float e2d::EFileUtils::getFloat(LPCTSTR key, float default) float e2d::EFileUtils::getFloat(const EString & key, float default)
{ {
TCHAR temp[32] = { 0 }; TCHAR temp[32] = { 0 };
::GetPrivateProfileString(L"Default", key, std::to_wstring(default).c_str(), temp, 31, getDefaultSavePath().c_str()); ::GetPrivateProfileString(L"Default", key.c_str(), std::to_wstring(default).c_str(), temp, 31, getDefaultSavePath().c_str());
return std::stof(temp); return std::stof(temp);
} }
e2d::EString e2d::EFileUtils::geTString(LPCTSTR key, LPCTSTR default) e2d::EString e2d::EFileUtils::geTString(const EString & key, const EString & default)
{ {
TCHAR temp[256] = { 0 }; TCHAR temp[256] = { 0 };
::GetPrivateProfileString(L"Default", key, default, temp, 255, getDefaultSavePath().c_str()); ::GetPrivateProfileString(L"Default", key.c_str(), default.c_str(), temp, 255, getDefaultSavePath().c_str());
return EString(temp); return EString(temp);
} }
@ -117,7 +117,7 @@ e2d::EString e2d::EFileUtils::getFileExtension(const EString & filePath)
return fileExtension; return fileExtension;
} }
e2d::EString e2d::EFileUtils::getSaveFilePath(LPCTSTR title, LPCTSTR defExt) e2d::EString e2d::EFileUtils::getSaveFilePath(const EString & title, const EString & defExt)
{ {
// 弹出保存对话框 // 弹出保存对话框
OPENFILENAME ofn = { 0 }; OPENFILENAME ofn = { 0 };
@ -130,8 +130,8 @@ e2d::EString e2d::EFileUtils::getSaveFilePath(LPCTSTR title, LPCTSTR defExt)
ofn.nMaxFile = sizeof(strFilename); // 缓冲区长度 ofn.nMaxFile = sizeof(strFilename); // 缓冲区长度
ofn.lpstrInitialDir = NULL; // 初始目录为默认 ofn.lpstrInitialDir = NULL; // 初始目录为默认
ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;// 目录必须存在,覆盖文件前发出警告 ofn.Flags = OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;// 目录必须存在,覆盖文件前发出警告
ofn.lpstrTitle = title; // 使用系统默认标题留空即可 ofn.lpstrTitle = title.c_str(); // 使用系统默认标题留空即可
ofn.lpstrDefExt = defExt; // 默认追加的扩展名 ofn.lpstrDefExt = defExt.c_str(); // 默认追加的扩展名
if (GetSaveFileName(&ofn)) if (GetSaveFileName(&ofn))
{ {

View File

@ -782,4 +782,45 @@ protected:
bool m_bToggle; bool m_bToggle;
}; };
class EMenu :
public ENode
{
public:
// 创建空菜单
EMenu();
// 创建菜单
EMenu(
int number, /* 菜单中按钮的数量 */
EButton * button1, /* 第一个按钮 */
...
);
// 获取菜单是否禁用
bool isEnable() const;
// 获取菜单中的按钮数量
size_t getButtonCount() const;
// 设置菜单启用或禁用
void setEnable(
bool enable
);
// 添加按钮
void addButton(
EButton * button
);
// 移除按钮
bool removeButton(
EButton * button
);
protected:
bool m_bEnable;
EVector<EButton*> m_vButtons;
};
} }

View File

@ -113,38 +113,38 @@ public:
// 保存 int 型的值 // 保存 int 型的值
static void saveInt( static void saveInt(
LPCTSTR key, const EString & key,
int value int value
); );
// 保存 float 型的值 // 保存 float 型的值
static void saveFloat( static void saveFloat(
LPCTSTR key, const EString & key,
float value float value
); );
// 保存 字符串 型的值(不要在 Unicode 字符集下保存中文字符) // 保存 字符串 型的值(不要在 Unicode 字符集下保存中文字符)
static void saveString( static void saveString(
LPCTSTR key, const EString & key,
LPCTSTR value const EString & value
); );
// 获取 int 型的值(若不存在则返回 default 参数的值) // 获取 int 型的值(若不存在则返回 default 参数的值)
static int getInt( static int getInt(
LPCTSTR key, const EString & key,
int default int default
); );
// 获取 float 型的值(若不存在则返回 default 参数的值) // 获取 float 型的值(若不存在则返回 default 参数的值)
static float getFloat( static float getFloat(
LPCTSTR key, const EString & key,
float default float default
); );
// 获取 字符串 型的值(若不存在则返回 default 参数的值) // 获取 字符串 型的值(若不存在则返回 default 参数的值)
static EString geTString( static EString geTString(
LPCTSTR key, const EString & key,
LPCTSTR default const EString & default
); );
// 得到文件扩展名(小写) // 得到文件扩展名(小写)
@ -157,8 +157,8 @@ public:
* *
*/ */
static EString getSaveFilePath( static EString getSaveFilePath(
LPCTSTR title = L"保存到", const EString & title = L"±£´æµ½",
LPCTSTR defExt = NULL const EString & defExt = NULL
); );
}; };