Как добиться эффекта типа кнопки с помощью растровых изображений - PullRequest
0 голосов
/ 27 августа 2010

Здравствуйте, у меня есть проблема, связанная с использованием диалогового окна с поддержкой растрового изображения. Я создал раскладку типа клавиатуры и хочу также получить ввод с клавиатуры. Когда я использую мышь, я могу получить кнопку(s), а также все кнопки работают нормально - другие изображения 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));

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

Спасибо и с уважением Sayonee

Свернуть

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);
}

1 Ответ

1 голос
/ 27 августа 2010

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

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

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

...