2010年1月1日 星期五

CuKeyNameTextEx - retrieves a string that represents the name of a composite key

// retrieves a string that represents the name of a composite key

CuKeyStatus KeyStatus;
....

CuKeyNameTextEx KeyNameTextEx(KeyStatus);
wstring strKeyText = KeyNameTextEx;
// Assert( strKeyText == TEXT("Alt+Ctrl+Shift+D"));
// Assert( strKeyText == TEXT("Alt+Ctrl+D"));
// Assert( strKeyText == TEXT("Ctrl+Shift+D"));


// CuKeyNameTextEx.h

class CuKeyNameTextEx
{
    wstring m_strKeyText;

public:
    CuKeyNameTextEx(void);
    CuKeyNameTextEx(CuKeyStatus &KeyStatus);
    ~CuKeyNameTextEx(void);

    void SetKeyStatus(CuKeyStatus &KeyStatus);
    
    operator wstring() const
    {
        return m_strKeyText;
    };
    BOOL IsMustAdd(bool l, bool r);
private:
    wstring ProcessFunctionKey(CuKeyStatus &KeyStatus);
};




// CuKeyNameTextEx.cpp

CuKeyNameTextEx::CuKeyNameTextEx(void)
{
}

CuKeyNameTextEx::~CuKeyNameTextEx(void)
{
}

CuKeyNameTextEx::CuKeyNameTextEx(CuKeyStatus &KeyStatus)
{
    SetKeyStatus(KeyStatus);
}


void CuKeyNameTextEx::SetKeyStatus(CuKeyStatus &KeyStatus)
{

    if( !KeyStatus.m_dwScanCode )
        return;

    wstring strResult;

    strResult = ProcessFunctionKey(KeyStatus);
    
    CuKeyNameText KeyName(KeyStatus.m_dwScanCode);
    wstring strKeyText = KeyName;

    wstring strAdd = TEXT("+");
    if( !strKeyText.empty() && !strResult.empty() )
        strResult += strAdd;
    
    strResult += strKeyText;

    m_strKeyText = strResult;

}


wstring CuKeyNameTextEx::ProcessFunctionKey(CuKeyStatus &KeyStatus)
{

    wstring strResult;

    wstring strAlt = TEXT("Alt");
    wstring strCtrl = TEXT("Ctrl");
    wstring strShift = TEXT("Shift");
    wstring strAdd = TEXT("+");


    if( KeyStatus.m_bAlt )
        strResult += strAlt;

    if( KeyStatus.m_bAlt && KeyStatus.m_bCtrl )
        strResult += strAdd;

    if( KeyStatus.m_bCtrl )
        strResult += strCtrl;

    if( KeyStatus.m_bShift && (KeyStatus.m_bAlt || KeyStatus.m_bCtrl) )
        strResult += strAdd;

    if( KeyStatus.m_bShift )
        strResult += strShift;

    return strResult;
}

1 則留言:

  1. 將 CuKeyStatus 拉到外面的原因只有一個, 那個是要拿來儲存的!

    回覆刪除