mirror of https://github.com/axmolengine/axmol.git
fixed #1634: Added the very first implementation of CCEditBox for Win32.
This commit is contained in:
parent
3bdfb82e9c
commit
157e229f8c
|
@ -243,7 +243,7 @@ static void cc_utf8_trim_ws(std::vector<unsigned short>* str)
|
||||||
*
|
*
|
||||||
* Return value: the length of the string in characters
|
* Return value: the length of the string in characters
|
||||||
**/
|
**/
|
||||||
long
|
CC_DLL long
|
||||||
cc_utf8_strlen (const char * p, int max)
|
cc_utf8_strlen (const char * p, int max)
|
||||||
{
|
{
|
||||||
long len = 0;
|
long len = 0;
|
||||||
|
|
|
@ -22,13 +22,15 @@
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "CCEditBoxImplWin.h"
|
#include "CCEditBoxImplWin.h"
|
||||||
|
|
||||||
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
|
||||||
|
|
||||||
#include "CCEditBox.h"
|
#include "CCEditBox.h"
|
||||||
#include "proj.win32/Win32InputBox.h"
|
#include "proj.win32/Win32InputBox.h"
|
||||||
|
|
||||||
NS_CC_BEGIN
|
NS_CC_BEGIN
|
||||||
extern long cc_utf8_strlen (const char * p, int max);
|
extern CC_DLL long cc_utf8_strlen (const char * p, int max);
|
||||||
NS_CC_END
|
NS_CC_END
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
NS_CC_EXT_BEGIN
|
||||||
|
@ -136,7 +138,7 @@ void CCEditBoxImplWin::setText(const char* pText)
|
||||||
|
|
||||||
if (kEditBoxInputFlagPassword == m_eEditBoxInputFlag)
|
if (kEditBoxInputFlagPassword == m_eEditBoxInputFlag)
|
||||||
{
|
{
|
||||||
long length = strlen(m_strText.c_str());
|
long length = cc_utf8_strlen(m_strText.c_str(), -1);
|
||||||
for (long i = 0; i < length; i++)
|
for (long i = 0; i < length; i++)
|
||||||
{
|
{
|
||||||
strToShow.append("*");
|
strToShow.append("*");
|
||||||
|
@ -241,142 +243,4 @@ void CCEditBoxImplWin::closeKeyboard()
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
||||||
/*
|
#endif /* (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) */
|
||||||
|
|
||||||
#include "CCEditBoxImplWin.h"
|
|
||||||
#include "CCEditBox.h"
|
|
||||||
#include "CCEGLView.h"
|
|
||||||
|
|
||||||
NS_CC_EXT_BEGIN
|
|
||||||
|
|
||||||
CCEditBoxImpl* __createSystemEditBox(CCEditBox* pEditBox)
|
|
||||||
{
|
|
||||||
return new CCEditBoxImplWin(pEditBox);
|
|
||||||
}
|
|
||||||
|
|
||||||
//#define GET_IMPL ((CCEditBoxImplWin*)m_pSysEdit)
|
|
||||||
|
|
||||||
CCEditBoxImplWin::CCEditBoxImplWin(CCEditBox* pEditText)
|
|
||||||
: CCEditBoxImpl(pEditText)
|
|
||||||
, m_pSysEdit(NULL)
|
|
||||||
, m_nMaxTextLength(-1)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
CCEditBoxImplWin::~CCEditBoxImplWin()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::doAnimationWhenKeyboardMove(float duration, float distance)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CCEditBoxImplWin::initWithSize(const CCSize& size)
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
CCEGLViewProtocol* eglView = CCEGLView::sharedOpenGLView();
|
|
||||||
CCEGLView* pMainWnd = CCEGLView::sharedOpenGLView();
|
|
||||||
|
|
||||||
HWND hParent = pMainWnd->getHWnd();
|
|
||||||
m_pSysEdit = ::CreateWindowA("EDIT", "text", WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE, 0, 0, size.width * eglView->getScaleX(),size.height * eglView->getScaleY(), hParent, NULL, NULL, NULL);
|
|
||||||
if (!m_pSysEdit)
|
|
||||||
break;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setFontColor(const ccColor3B& color)
|
|
||||||
{
|
|
||||||
//GET_IMPL.textField.textColor = [UIColor colorWithRed:color.r / 255.0f green:color.g / 255.0f blue:color.b / 255.0f alpha:1.0f];
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setPlaceholderFontColor(const ccColor3B& color)
|
|
||||||
{
|
|
||||||
// TODO need to be implemented.
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setInputMode(EditBoxInputMode inputMode)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setMaxLength(int maxLength)
|
|
||||||
{
|
|
||||||
m_nMaxTextLength = maxLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
int CCEditBoxImplWin::getMaxLength()
|
|
||||||
{
|
|
||||||
return m_nMaxTextLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setInputFlag(EditBoxInputFlag inputFlag)
|
|
||||||
{
|
|
||||||
// TODO: ES_PASSWORD
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setReturnType(KeyboardReturnType returnType)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CCEditBoxImplWin::isEditing()
|
|
||||||
{
|
|
||||||
return true; //GET_IMPL->isEditState() ? true : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setText(const char* pText)
|
|
||||||
{
|
|
||||||
::SetWindowTextA(m_pSysEdit, pText);
|
|
||||||
//GET_IMPL.textField.text = [NSString stringWithUTF8String:pText];
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* CCEditBoxImplWin::getText(void)
|
|
||||||
{
|
|
||||||
int nCharacters = ::GetWindowTextLength(m_pSysEdit);
|
|
||||||
char *szBuff = (char *)malloc(nCharacters + 1);
|
|
||||||
::GetWindowText(m_pSysEdit, szBuff, nCharacters);
|
|
||||||
return szBuff;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setPlaceHolder(const char* pText)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setPosition(const CCPoint& pos)
|
|
||||||
{
|
|
||||||
//TODO should consider anchor point, the default value is (0.5, 0,5)
|
|
||||||
RECT rect;
|
|
||||||
::GetWindowRect(m_pSysEdit, &rect);
|
|
||||||
POINT pt;
|
|
||||||
pt.x = rect.left;
|
|
||||||
pt.y = rect.top;
|
|
||||||
CCEGLView* pMainWnd = CCEGLView::sharedOpenGLView();
|
|
||||||
::ScreenToClient(pMainWnd->getHWnd(), &pt);
|
|
||||||
::SetWindowPos(m_pSysEdit, NULL, pt.x + pos.x-m_tContentSize.width/2, pt.y + pos.y+m_tContentSize.height/2, 0, 0, SWP_NOSIZE|SWP_NOOWNERZORDER|SWP_NOZORDER|SWP_NOCOPYBITS);
|
|
||||||
//GET_IMPL->setPosition(ccp(pos.x-m_tContentSize.width/2, pos.y+m_tContentSize.height/2));;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::setContentSize(const CCSize& size)
|
|
||||||
{
|
|
||||||
m_tContentSize = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::visit(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::openKeyboard()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void CCEditBoxImplWin::closeKeyboard()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
NS_CC_EXT_END
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
#define __CCEditBoxIMPLWIN_H__
|
#define __CCEditBoxIMPLWIN_H__
|
||||||
|
|
||||||
#include "cocos2d.h"
|
#include "cocos2d.h"
|
||||||
|
|
||||||
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
|
||||||
|
|
||||||
#include "ExtensionMacros.h"
|
#include "ExtensionMacros.h"
|
||||||
#include "CCEditBoxImpl.h"
|
#include "CCEditBoxImpl.h"
|
||||||
|
|
||||||
|
@ -87,5 +90,7 @@ private:
|
||||||
|
|
||||||
NS_CC_EXT_END
|
NS_CC_EXT_END
|
||||||
|
|
||||||
|
#endif /* (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) */
|
||||||
|
|
||||||
#endif /* __CCEditBoxIMPLWIN_H__ */
|
#endif /* __CCEditBoxIMPLWIN_H__ */
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
#include "Win32InputBox.h"
|
#include "Win32InputBox.h"
|
||||||
|
|
||||||
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#pragma warning (disable: 4312)
|
#pragma warning (disable: 4312)
|
||||||
|
@ -214,8 +217,8 @@ void CWin32InputBox::InitDialog()
|
||||||
::SetDlgItemText(_param->hDlg, (int) definputbox_buttonids[i], definputbox_buttonnames[i]);
|
::SetDlgItemText(_param->hDlg, (int) definputbox_buttonids[i], definputbox_buttonnames[i]);
|
||||||
|
|
||||||
// Set other controls
|
// Set other controls
|
||||||
::SetWindowTextA(_param->hDlg, _param->szTitle);
|
::SetWindowTextA(_param->hDlg, Utf8ToAnsi(_param->szTitle).c_str());
|
||||||
::SetDlgItemTextA(_param->hDlg, definputbox_id_prompt, _param->szPrompt);
|
::SetDlgItemTextA(_param->hDlg, definputbox_id_prompt, Utf8ToAnsi(_param->szPrompt).c_str());
|
||||||
|
|
||||||
HWND hwndEdit1 = ::GetDlgItem(_param->hDlg, definputbox_id_edit1);
|
HWND hwndEdit1 = ::GetDlgItem(_param->hDlg, definputbox_id_edit1);
|
||||||
HWND hwndEdit2 = ::GetDlgItem(_param->hDlg, definputbox_id_edit2);
|
HWND hwndEdit2 = ::GetDlgItem(_param->hDlg, definputbox_id_edit2);
|
||||||
|
@ -225,7 +228,7 @@ void CWin32InputBox::InitDialog()
|
||||||
else
|
else
|
||||||
_hwndEditCtrl = hwndEdit1;
|
_hwndEditCtrl = hwndEdit1;
|
||||||
|
|
||||||
::SetWindowTextA(_hwndEditCtrl, _param->szResult);
|
::SetWindowTextA(_hwndEditCtrl, Utf8ToAnsi(_param->szResult).c_str());
|
||||||
|
|
||||||
RECT rectDlg, rectEdit1, rectEdit2;
|
RECT rectDlg, rectEdit1, rectEdit2;
|
||||||
|
|
||||||
|
@ -308,6 +311,11 @@ LRESULT CALLBACK CWin32InputBox::DlgProc(HWND hDlg, UINT message, WPARAM wParam,
|
||||||
_this->_param->szResult,
|
_this->_param->szResult,
|
||||||
_this->_param->nResultSize);
|
_this->_param->nResultSize);
|
||||||
|
|
||||||
|
std::string strUtf8 = AnsiToUtf8(_this->_param->szResult);
|
||||||
|
|
||||||
|
memset(_this->_param->szResult, 0, _this->_param->nResultSize);
|
||||||
|
strncpy(_this->_param->szResult, strUtf8.c_str(), _this->_param->nResultSize-1);
|
||||||
|
|
||||||
::EndDialog(hDlg, buttonId);
|
::EndDialog(hDlg, buttonId);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -316,4 +324,56 @@ LRESULT CALLBACK CWin32InputBox::DlgProc(HWND hDlg, UINT message, WPARAM wParam,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::string CWin32InputBox::AnsiToUtf8(std::string strAnsi)
|
||||||
|
{
|
||||||
|
std::string ret;
|
||||||
|
if (strAnsi.length() > 0)
|
||||||
|
{
|
||||||
|
int nWideStrLength = MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, NULL, 0);
|
||||||
|
WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength+1)*sizeof(WCHAR));
|
||||||
|
memset(pwszBuf, 0, (nWideStrLength+1)*sizeof(WCHAR));
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, strAnsi.c_str(), -1, pwszBuf, (nWideStrLength+1)*sizeof(WCHAR));
|
||||||
|
|
||||||
|
int nUtf8Length = WideCharToMultiByte( CP_UTF8,0,pwszBuf,-1,NULL,0,NULL,FALSE );
|
||||||
|
char* pszUtf8Buf = (char*)malloc((nUtf8Length+1)*sizeof(char));
|
||||||
|
memset(pszUtf8Buf, 0, (nUtf8Length+1)*sizeof(char));
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_UTF8, 0, pwszBuf, -1, pszUtf8Buf, (nUtf8Length+1)*sizeof(char), NULL, FALSE);
|
||||||
|
ret = pszUtf8Buf;
|
||||||
|
|
||||||
|
free(pszUtf8Buf);
|
||||||
|
free(pwszBuf);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CWin32InputBox::Utf8ToAnsi(std::string strUTF8)
|
||||||
|
{
|
||||||
|
std::string ret;
|
||||||
|
if (strUTF8.length() > 0)
|
||||||
|
{
|
||||||
|
int nWideStrLength = MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, NULL, 0);
|
||||||
|
WCHAR* pwszBuf = (WCHAR*)malloc((nWideStrLength+1)*sizeof(WCHAR));
|
||||||
|
memset(pwszBuf, 0, (nWideStrLength+1)*sizeof(WCHAR));
|
||||||
|
MultiByteToWideChar(CP_UTF8, 0, strUTF8.c_str(), -1, pwszBuf, (nWideStrLength+1)*sizeof(WCHAR));
|
||||||
|
|
||||||
|
int nAnsiStrLength = WideCharToMultiByte( CP_ACP,0,pwszBuf,-1,NULL,0,NULL,FALSE );
|
||||||
|
char* pszAnsiBuf = (char*)malloc((nAnsiStrLength+1)*sizeof(char));
|
||||||
|
memset(pszAnsiBuf, 0, (nAnsiStrLength+1)*sizeof(char));
|
||||||
|
|
||||||
|
WideCharToMultiByte(CP_ACP, 0, pwszBuf, -1, pszAnsiBuf, (nAnsiStrLength+1)*sizeof(char), NULL, FALSE);
|
||||||
|
ret = pszAnsiBuf;
|
||||||
|
|
||||||
|
free(pszAnsiBuf);
|
||||||
|
free(pwszBuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) */
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
#ifndef __03022006__WIN32INPUTBOX__
|
#ifndef __03022006__WIN32INPUTBOX__
|
||||||
#define __03022006__WIN32INPUTBOX__
|
#define __03022006__WIN32INPUTBOX__
|
||||||
|
|
||||||
|
#include "cocos2d.h"
|
||||||
|
|
||||||
|
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)
|
||||||
/*
|
/*
|
||||||
|
|
||||||
This library is (c) Elias Bachaalany aka lallous <lallousx86@yahoo.com>
|
This library is (c) Elias Bachaalany aka lallous <lallousx86@yahoo.com>
|
||||||
|
@ -93,6 +96,11 @@ public:
|
||||||
DWORD nResultSize,
|
DWORD nResultSize,
|
||||||
bool bMultiLine = false,
|
bool bMultiLine = false,
|
||||||
HWND hwndParent = 0);
|
HWND hwndParent = 0);
|
||||||
|
|
||||||
|
static std::string AnsiToUtf8(std::string strAnsi);
|
||||||
|
static std::string Utf8ToAnsi(std::string strUTF8);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif /* (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) */
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -208,6 +208,9 @@
|
||||||
<Filter Include="Classes\FileUtilsTest">
|
<Filter Include="Classes\FileUtilsTest">
|
||||||
<UniqueIdentifier>{a4c2111f-cf9f-492c-884d-3de24715adce}</UniqueIdentifier>
|
<UniqueIdentifier>{a4c2111f-cf9f-492c-884d-3de24715adce}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="Classes\ExtensionsTest\EditBoxTest">
|
||||||
|
<UniqueIdentifier>{18a69e7e-8ca7-475a-bfbb-7296baab16ce}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="main.cpp">
|
<ClCompile Include="main.cpp">
|
||||||
|
@ -474,6 +477,9 @@
|
||||||
<ClCompile Include="..\Classes\FileUtilsTest\FileUtilsTest.cpp">
|
<ClCompile Include="..\Classes\FileUtilsTest\FileUtilsTest.cpp">
|
||||||
<Filter>Classes\FileUtilsTest</Filter>
|
<Filter>Classes\FileUtilsTest</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\Classes\ExtensionsTest\EditBoxTest\EditBoxTest.cpp">
|
||||||
|
<Filter>Classes\ExtensionsTest\EditBoxTest</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="main.h">
|
<ClInclude Include="main.h">
|
||||||
|
@ -917,5 +923,8 @@
|
||||||
<ClInclude Include="..\Classes\FileUtilsTest\FileUtilsTest.h">
|
<ClInclude Include="..\Classes\FileUtilsTest\FileUtilsTest.h">
|
||||||
<Filter>Classes\FileUtilsTest</Filter>
|
<Filter>Classes\FileUtilsTest</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\Classes\ExtensionsTest\EditBoxTest\EditBoxTest.h">
|
||||||
|
<Filter>Classes\ExtensionsTest\EditBoxTest</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Loading…
Reference in New Issue