Как добиться эффекта типа Pushbutton с использованием растровых изображений

StackOverflow https://stackoverflow.com/questions/3581619

  •  01-10-2019
  •  | 
  •  

Вопрос

Привет! нажаты, а также все кнопки работают нормально - другие изображения DEFAULT,SELECTED,DISABLED ..умить загружаться и работать, так как я использую здесь функцию m_BtnBtn1Ctrl.LoadBitmaps , Но тогда любой ключ нажата на клавиатуре, и соответствующий символ на экране не способен делать то же самое, так как я смог сделать это с нажатием мыши (и с помощью Loadbitmaps() Функция).

Я использую эти 3 функции для достижения того же действия и эффекта, что и используя мышь
LoadBitmap ()
Setbitmap ()
Invalidate ()

Я также попробовал этот кусок кода

HBITMAP hbm = (HBITMAP)LoadImage(NULL, "\\res\\Selected\\bitmap21.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

а также

bitmap.Attach((HBITMAP)LoadImage(NULL, "\\res\\Selected\\bitmap21.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION));

но они, кажется, не дают прессованной кнопке, хотя внутри они работают. Кто-то, пожалуйста, помогите мне с этим

Спасибо и по отношению к сайони

Крах

BOOL KeyBoard_press::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class
    CString strTemp;
    if (pMsg->message == WM_KEYDOWN)
    {
        if ( pMsg->wParam == 0x41 || pMsg->wParam == 0x61) //check for both 'a' and 'A'
            OnBtnBtn1();
        if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_DELETE ||
            pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_TAB ||
            pMsg->wParam == VK_UP || pMsg->wParam == VK_DOWN || GetKeyState (VK_CONTROL))
            {
                ::TranslateMessage (pMsg);
                ::DispatchMessage (pMsg);
                return TRUE;                // DO NOT process further
            }
    }
    return CDialog::PreTranslateMessage(pMsg);
}
Это было полезно?

Решение

Насколько я понимаю, у вас есть серия кнопок, которые моделируют макет клавиатуры компьютера. Всякий раз, когда пользователь нажимает ключ на клавиатуре, вам необходимо симулировать кнопку, нажмите в своем диалоговом окне. Вы предоставили растровые изображения для каждого состояния каждой кнопки.

Сделать это, я бы обработал WM_KEYDOWN а также WM_KEYUP Сообщения. В обработчиках используйте некоторое отображение ключа к фактическому экземпляру кнопки. Тогда отправьте BM_SETSTATE на кнопку управления.

Затем обработать WM_COMMAND сообщение из каждой из кнопок и проверьте на BN_CLICKED код.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top