예제 #1
0
bool CAniTextInput::HandleChar (char chChar, DWORD dwKeyData)

//	HandleChar
//
//	Handle the character

	{
	if (!m_Properties[INDEX_ENABLED].GetBool())
		return false;

	//	If this is a backspace, delete a character

	else if (chChar == VK_BACK)
		{
		CString sText = m_Properties[INDEX_TEXT].GetString();
		sText = strSubString(sText, 0, sText.GetLength() - 1);
		m_Properties.SetString(PROP_TEXT, sText);

		return true;
		}

	//	If this is a text character, then add it to the input

	else if (strIsAlphaNumeric(&chChar) || chChar == ' ' || strIsASCIISymbol(&chChar))
		{
		CString sText = m_Properties[INDEX_TEXT].GetString();
		sText.Append(CString(&chChar, 1));
		m_Properties.SetString(PROP_TEXT, sText);

		return true;
		}
	else
		return false;
	}
예제 #2
0
void AddText (TraverseCtx &Ctx, const CString &sText)
{
    enum States
    {
        stateInText,
        stateInDelimeter,
        stateDone,
    };

    //	Parse the text into words

    char *pPos = sText.GetASCIIZPointer();
    char *pStart = pPos;
    int iState = stateInText;
    CString sWord;

    while (iState != stateDone)
    {
        bool bText = strIsAlphaNumeric(pPos);

        switch (iState)
        {
        case stateInText:
        {
            if (!bText)
            {
                AddWord(Ctx, CString(pStart, pPos - pStart));
                iState = stateInDelimeter;
            }
            break;
        }

        case stateInDelimeter:
        {
            if (bText)
            {
                pStart = pPos;
                iState = stateInText;
            }
            break;
        }
        }

        //	Next

        if (*pPos == '\0')
            iState = stateDone;
        else
            pPos++;
    }
}