Как добиться эффекта типа Pushbutton с использованием растровых изображений
-
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
код.