Здравствуйте, Carc, Вы писали:

C>Как получить текст горячей клавиши?

C>Т.е. я юзую какую нить к примеру Ctrl+A у себя в приложении, причем есессно клавиша может меняться пользователем, как мне получить текст который отображать в меню (типа какой нить "Ctrl+A"), пробовал тот же GetKeyName но что я не смог разобраться.... хелп

посмотреть исходники MFC-шного CHotKeyCtrl::GetHotKeyName():

CString GetKeyName( UINT vk, BOOL fExtended )
{
    LONG lScan = MapVirtualKey( vk, 0 ) << 16;

    // if it's an extended key, add the extended flag
    if ( fExtended )
        lScan |= 0x01000000L;

    TCHAR sz[ 100 ];

    ::GetKeyNameText( lScan, sz, 100 );

    sz[ 99 ] = 0;

    return CString( sz );
}

CString GetHotKeyName( DWORD hk )
{
    static const TCHAR szPlus[] = _T( " + " );
    CString strKeyName;
    WORD wCode;
    WORD wModifiers;

    wCode = LOBYTE( LOWORD( hk ) );
    wModifiers = HIBYTE( LOWORD( hk ) );

    if ( wCode != 0 || wModifiers != 0 )
    {
        if ( wModifiers & HOTKEYF_CONTROL )
        {
            strKeyName += GetKeyName( VK_CONTROL, FALSE );
            strKeyName += szPlus;
        }

        if ( wModifiers & HOTKEYF_SHIFT )
        {
            strKeyName += GetKeyName( VK_SHIFT, FALSE );
            strKeyName += szPlus;
        }

        if ( wModifiers & HOTKEYF_ALT )
        {
            strKeyName += GetKeyName( VK_MENU, FALSE );
            strKeyName += szPlus;
        }

        strKeyName += GetKeyName( wCode, wModifiers & HOTKEYF_EXT );
    }

    return strKeyName;
}
Автор: Odi$$ey    Оценить