⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmires_text.cpp

📁 Resource editor base speadrum Chinese mobile
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                                           pTextInfo->szTraditionalChinese[0] + 1 );


    delete pTextInfo;

    m_mapText.RemoveKey(pszID);

    return TRUE;
}

BOOL CMMIRes::DeleteTextEx( LPCTSTR pszID )
{
    _ASSERTE( pszID != NULL );

    PTEXTINFOEX pTextInfoEx = NULL;
    if( !m_mapTextEx.Lookup(pszID, pTextInfoEx) )
        return TRUE;
   
    //语言的指针所占的字节数
    m_Resource.ToolUsedInfo.nUsedSize -= g_theApp.m_nUsedLangNum * sizeof(char *);

    CConverter conv;
	int nStrSize = 0;
	
 	for(int i =1; i < g_theApp.m_nUsedLangNum; i++)
	{		
		if((UCHAR)pTextInfoEx->szLanguage[i][0]<0x80) //ASCII
		{
			m_Resource.ToolUsedInfo.nUsedSize -= (strlen(pTextInfoEx->szLanguage[i]) + 1 );
		}
		else //Unicode
		{			
			LPWORD lpwStrSize=(LPWORD) (pTextInfoEx->szLanguage[i]+1);
			WORD wStrSize = *lpwStrSize;
			nStrSize = wStrSize;
	        m_Resource.ToolUsedInfo.nUsedSize -= (nStrSize + 3);

		}		
/*
		if(g_theApp.m_nArrLangCBN[i]==1)
			m_Resource.ToolUsedInfo.nUsedSize -= (strlen(pTextInfoEx->szLanguage[0]) + 1 );
		else
			m_Resource.ToolUsedInfo.nUsedSize -= ( pTextInfoEx->szLanguage[i][0]+1 );
*/
	}

    delete []pTextInfoEx;

    m_mapTextEx.RemoveKey(pszID);

    return TRUE;
}

BOOL CMMIRes::ReplaceText( LPCTSTR pszID, CStringArray & arrContent, int bCheckLimit /* = FALSE */ )
{
    _ASSERTE( pszID != NULL );

    PTEXTINFO    pTextInfo    = NULL;

    VERIFY( m_mapText.Lookup(pszID, pTextInfo) );

    strcpy(pTextInfo->szEnglish, (LPCSTR)(LPCTSTR)arrContent[0]);

    //SimpleChinese
    LPCSTR pMulti = (LPCSTR)arrContent[1].GetBuffer(0);

    int nUcs2Size = MultiByteToWideChar(CP_ACP, 0, pMulti, -1, NULL, 0);
    
    int nDeltaSize = strlen(pMulti) + 1 + (nUcs2Size - 1) * 2 + 1;
    nDeltaSize -= (strlen(pTextInfo->szEnglish) + 1 + (UCHAR)pTextInfo->szSimpleChinese[0] + 1);
    if( bCheckLimit && m_Resource.ToolUsedInfo.nMaxLimitSize > 0 )
    {
        UINT nMaxSize = m_Resource.ToolUsedInfo.nUsedSize + nDeltaSize;
        if( nMaxSize > m_Resource.ToolUsedInfo.nMaxLimitSize )
        {
            _stprintf(m_szErrMsg, _T("Exceed the limit size %d!"), m_Resource.ToolUsedInfo.nMaxLimitSize );
            
            return FALSE;
        }
    }
    m_Resource.ToolUsedInfo.nUsedSize += nDeltaSize;

    LPWSTR pUcs2 = (LPWSTR)(&(pTextInfo->szSimpleChinese[1]));
    MultiByteToWideChar( CP_ACP, 0, pMulti, -1, pUcs2, nUcs2Size);

    arrContent[1].ReleaseBuffer();

    nUcs2Size--;
    if( nUcs2Size < 0 || nUcs2Size * 2 > MAX_TEXT_LEN - 1 )
    {
        _stprintf(m_szErrMsg, _T("Exceed the text buffer size %d!"), MAX_TEXT_LEN );

        return FALSE;
    }

    CConverter conv;
    conv.LitEdnToBigEdn( pUcs2, nUcs2Size );

    if( nUcs2Size == 0 )
        pTextInfo->szSimpleChinese[0] = 1;
    else
        pTextInfo->szSimpleChinese[0] = nUcs2Size * 2;

    //TraditionalChinese
    pMulti = (LPCSTR)arrContent[2].GetBuffer(0);

    nUcs2Size = MultiByteToWideChar(CP_ACP, 0, pMulti, -1, NULL, 0);
    
    nDeltaSize = strlen(pMulti) + 1 + (nUcs2Size - 1) * 2 + 1;
    nDeltaSize -= (strlen(pTextInfo->szEnglish) + 1 + (UCHAR)pTextInfo->szSimpleChinese[0] + 1 + (UCHAR)pTextInfo->szTraditionalChinese[0] + 1);
    if( bCheckLimit && m_Resource.ToolUsedInfo.nMaxLimitSize > 0 )
    {
        UINT nMaxSize = m_Resource.ToolUsedInfo.nUsedSize + nDeltaSize;
        if( nMaxSize > m_Resource.ToolUsedInfo.nMaxLimitSize )
        {
            _stprintf(m_szErrMsg, _T("Exceed the limit size %d!"), m_Resource.ToolUsedInfo.nMaxLimitSize );
            
            return FALSE;
        }
    }
    m_Resource.ToolUsedInfo.nUsedSize += nDeltaSize;

    pUcs2 = (LPWSTR)(&(pTextInfo->szTraditionalChinese[1]));
    MultiByteToWideChar( CP_ACP, 0, pMulti, -1, pUcs2, nUcs2Size);

    arrContent[2].ReleaseBuffer();

    nUcs2Size--;
    if( nUcs2Size < 0 || nUcs2Size * 2 > MAX_TEXT_LEN - 1 )
    {
        _stprintf(m_szErrMsg, _T("Exceed the text buffer size %d!"), MAX_TEXT_LEN );

        return FALSE;
    }

    CConverter convt;
    convt.LitEdnToBigEdn( pUcs2, nUcs2Size );

    if( nUcs2Size == 0 )
        pTextInfo->szTraditionalChinese[0] = 1;
    else
        pTextInfo->szTraditionalChinese[0] = nUcs2Size * 2;

    return TRUE;
}

BOOL CMMIRes::ReplaceTextEx( LPCTSTR pszID, CStringArray & arrContent, int bCheckLimit /* = FALSE */ )
{
    _ASSERTE( pszID != NULL );

    PTEXTINFOEX    pTextInfoEx    = NULL;

    PTEXTINFOEX    pTextInfoExNew = (PTEXTINFOEX)new TEXT_INFO_T_EX;
	if(pTextInfoExNew==NULL)
	{
		delete []pTextInfoExNew;
		return FALSE;
	}

    VERIFY( m_mapTextEx.Lookup(pszID, pTextInfoEx) );
	
	int nOldSize = 0;
	int nNewSize = 0;

    CConverter conv;
	int nStrSize = 0;
	for(int i=0; i < g_theApp.m_nUsedLangNum; i++)
	{
		//判断是否为ASCII的0扩展的Unicode码
		CString str = arrContent.GetAt(i);
		nStrSize = str.GetLength()*2;
		char *p = (LPSTR)(LPCTSTR)str;
		int nIndex=0;
		for(nIndex= 0;nIndex<nStrSize;nIndex += 2)
		{
			if(!((UCHAR)*(p+nIndex) < 0x80 && (UCHAR)*(p+nIndex+1) == 0))
				break;
		}
		if(nIndex>=nStrSize)//ASCII
		{
			if( nStrSize/2 < 0 || nStrSize/2 > MAX_TEXT_LEN)
			{
				_stprintf(m_szErrMsg, _T("Exceed the text buffer size %d!"), MAX_TEXT_LEN );
				return FALSE;
			}
			char szLang[MAX_TEXT_LEN +1] = {0};
			WideCharToMultiByte(CP_ACP,0,arrContent[i],-1,szLang,MAX_TEXT_LEN +1,NULL,NULL);
			strcpy(pTextInfoExNew->szLanguage[i], szLang);
			nNewSize += (strlen(pTextInfoExNew->szLanguage[i]) + 1);
		}
		else //Unicode
		{
			if( nStrSize < 0 || nStrSize > MAX_TEXT_LEN - 3 )
			{
				_stprintf(m_szErrMsg, _T("Exceed the text buffer size %d!"), MAX_TEXT_LEN );
				
				return FALSE;
			}			
			pTextInfoExNew->szLanguage[i][0] = (UCHAR)0x80;
			LPWORD lpwStrSize=(LPWORD) (pTextInfoExNew->szLanguage[i]+1);
			*lpwStrSize = (WORD)nStrSize;
			
            LPTSTR pUcs2 = (LPTSTR)(pTextInfoExNew->szLanguage[i]+3);
			
			memcpy(pUcs2,arrContent[i],nStrSize);				
			
			//conv.LitEdnToBigEdn(  (LPWORD)(pTextInfoEx->szLanguage[i]+1), nStrSize/2+1 ); //Unicode的字节数也需要转化Big			
			
			nNewSize += (nStrSize + 3);
		}
		
		if((UCHAR)pTextInfoEx->szLanguage[i][0]<0x80) //ASCII
		{
			nOldSize += (strlen(pTextInfoEx->szLanguage[i]) + 1 );
		}
		else //Unicode
		{			
			LPWORD lpwStrSize=(LPWORD) (pTextInfoEx->szLanguage[i]+1);
			WORD wStrSize = *lpwStrSize;
			nStrSize = wStrSize;
			nOldSize += (nStrSize + 3);			
		}
/*		if(g_theApp.m_nArrLangCBN[i]==1)
		{
			char szLang[MAX_TEXT_LEN +1] = {0};
			WideCharToMultiByte(CP_ACP,0,arrContent[i],-1,szLang,MAX_TEXT_LEN +1,NULL,NULL);
			strcpy(pTextInfoExNew->szLanguage[i], szLang);
			nNewSize += (strlen(pTextInfoExNew->szLanguage[i]) + 1);
			nOldSize += (strlen(pTextInfoEx->szLanguage[i]) + 1);
		}
		else
		{
			LPTSTR pUcs2 = (LPTSTR)(&(pTextInfoExNew->szLanguage[i][1]));			
            int nUcs2Size = arrContent.GetAt(i).GetLength();			
			memcpy(pUcs2,arrContent[i],nUcs2Size*2);
			
			if( nUcs2Size < 0 || nUcs2Size*2 > MAX_TEXT_LEN - 1 )
			{
				_stprintf(m_szErrMsg, _T("Exceed the text buffer size %d!"), MAX_TEXT_LEN );
				delete []pTextInfoExNew;
				return FALSE;
			}
			
			CConverter conv;
			conv.LitEdnToBigEdn( pUcs2, nUcs2Size );
			
			if( nUcs2Size == 0 )
				pTextInfoExNew->szLanguage[i][0] = 1;
			else
				pTextInfoExNew->szLanguage[i][0] = nUcs2Size * 2;			

			nNewSize += ((UCHAR)pTextInfoExNew->szLanguage[i][0] + 1);
			nOldSize += ((UCHAR)pTextInfoEx->szLanguage[i][0] + 1);	
		}
*/
	}
    for(int j=g_theApp.m_nUsedLangNum;j<MAX_LANG_NUM;j++)
		strcpy(pTextInfoExNew->szLanguage[j], "");
	int nDelSize = nNewSize - nOldSize;
	if( bCheckLimit && m_Resource.ToolUsedInfo.nMaxLimitSize > 0 )
	{
		UINT nMaxSize = m_Resource.ToolUsedInfo.nUsedSize + nDelSize;
		if( nMaxSize > m_Resource.ToolUsedInfo.nMaxLimitSize )
		{
			_stprintf(m_szErrMsg, _T("Exceed the limit size %d!"), m_Resource.ToolUsedInfo.nMaxLimitSize );
            delete []pTextInfoExNew;
			return FALSE;
		}
	}
	m_Resource.ToolUsedInfo.nUsedSize += nDelSize;
	memcpy(pTextInfoEx,pTextInfoExNew,sizeof(TEXT_INFO_T_EX));

	delete []pTextInfoExNew;
	pTextInfoExNew =NULL;

    return TRUE;
}

BOOL CMMIRes::TextIDIsExist( LPCTSTR pszID )
{
    _ASSERTE( pszID != NULL );

    PTEXTINFOEX pTextInfoEx = NULL;

    return m_mapTextEx.Lookup(pszID, pTextInfoEx);
}

/*
int CMMIRes::CalcTextResSize(void)
{
    int nCount = m_mapText.GetCount();
   
    int nSize = sizeof(KSP_TEXT_T) * TT_MAX_NUM;
    nSize    += sizeof(char *)  * nCount;
    nSize    += sizeof(uint8 *) * nCount;

    CString  strKey;
    PTEXTINFO pTextInfo = NULL;
    POSITION pos = m_mapText.GetStartPosition();
    while( pos != NULL )
    {
        m_mapText.GetNextAssoc( pos, strKey, pTextInfo );
        _ASSERTE( pTextInfo != NULL );

        nSize += strlen(pTextInfo->szEnglish) + 1 + (UCHAR)pTextInfo->szSimpleChinese[0] + (UCHAR)pTextInfo->szTraditionalChinese[0];
    }

    return nSize;
}
*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -