Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
1 / 1 / 1
Регистрация: 06.04.2011
Сообщений: 25

Не работает WM_KEYDOWN

06.04.2011, 15:23. Показов 2659. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите плиз. Вот кусок кода в оконной процедуре:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
...
case WM_KEYDOWN:
switch (wParam)
{
case VK_LEFT:
     if(MatrLine[etag][x][y][3] == 2) y -= 20;
     InvalidateRect(hWnd, 0, TRUE);
     break;
case VK_RIGHT:
     if(MatrLine[etag][x][y][1] == 2) y += 20;
     InvalidateRect(hWnd, 0, TRUE);
     break;
case VK_UP:
     if(MatrLine[etag][x][y][0] == 2) x -= 20;
     InvalidateRect(hWnd, 0, TRUE);
     break;
case VK_DOWN:
     if(MatrLine[etag][x][y][2] == 2) x += 20;
     InvalidateRect(hWnd, 0, TRUE);
     break;
}
...
В общем тут при нажатии клавиш-стрелок должно происходить движение в соответствующую сторону на расстояние 20 единиц и после этого перерисовывается окно (InvalidateRect(hWnd, 0, TRUE)). Но при нажатии любой из клавиш происходит тупо выход из программы. Подскажите, что делать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.04.2011, 15:23
Ответы с готовыми решениями:

Не работает WM_KEYDOWN
Здравствуите , понимаю что таких тем много , читал и пробывал но все грустно . И вроде есть HANDLE_MSG(WM_KEYDOWN) как его объявить и...

Не работает WM_KEYDOWN
Доброго времени суток! Возникла проблема: после нажатия на кнопку "New Game" программа почему-то перестает принимать сообщения с...

WM_KEYDOWN у дочернего окна не работает
Подскажите почему не работает событие WM_KEYDOWN у дочернего окна, а срабатывает у родителя?

4
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 15:56
Выложите весь обработчик сообщений
0
1 / 1 / 1
Регистрация: 06.04.2011
Сообщений: 25
06.04.2011, 16:12  [ТС]
Вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
switch(message)
{
case WM_PAINT:
    hDC = BeginPaint(hWnd, &PaintSt);
    GetClientRect(hWnd, &aRect);
    SetBkMode(hDC, TRANSPARENT);
    Ellipse(hDC, y, x, y + 10, x + 10);
    EndPaint(hWnd, &PaintSt);
    break;
case WM_KEYDOWN:
    switch (wParam)
    {
    case VK_LEFT:
        if(MatrLine[etag][x][y][3] == 2) y -= 20;
       InvalidateRect(hWnd, 0, TRUE);
       break;
    case VK_RIGHT:
       if(MatrLine[etag][x][y][1] == 2) y += 20;
       InvalidateRect(hWnd, 0, TRUE);
       break;
    case VK_UP:
       if(MatrLine[etag][x][y][0] == 2) x -= 20;
       InvalidateRect(hWnd, 0, TRUE);
       break;
    case VK_DOWN:
       if(MatrLine[etag][x][y][2] == 2) x += 20;
       InvalidateRect(hWnd, 0, TRUE);
       break;
   }
case WM_DESTROY:
    PostQuitMessage(0);
    break;
default:
    return DefWindowProc(hWnd, message, wParam, lParam);
}
Тут в общем эллипс должен перемещаться.
0
65 / 71 / 9
Регистрация: 25.06.2009
Сообщений: 244
06.04.2011, 16:49
попробуйте поставить брейк в этом фрагменте

C++
1
2
3
4
5
6
7
8
9
case VK_DOWN:
       if(MatrLine[etag][x][y][2] == 2) x += 20;
       InvalidateRect(hWnd, 0, TRUE);
       break;
   }
break; // <-- вот тут
case WM_DESTROY:
    PostQuitMessage(0);
    break;
0
1 / 1 / 1
Регистрация: 06.04.2011
Сообщений: 25
06.04.2011, 16:54  [ТС]
О, спасибо, заработало Такая тупая ошибка...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.04.2011, 16:54
Помогаю со студенческими работами здесь

WM_KEYDOWN
когда программе поступает сообщение WM_KEYDOWN обрабатываю его так HANDLE_MSG(hwnd,WM_KEYDOWN,OnKeydown); дальше есть функция void...

WM_KEYDOWN
на мсдн написано что функцию вызывать так, case WM_KEYDOWN: switch (wParam) { case VK_UP: // up was pressed...

WM_KEYUP и WM_KEYDOWN
Пожалуйста помогите разобратся с WM_KEYUP и WM_KEYDOWN вчем разница и для чего они нужны, просто мне надо передать сообщение программе с...

WM_KEYUP, WM_KEYDOWN
Прошу о помощи! Задача: пользователь вводит парольную фразу (одну из предложенных) в текстбокс.Необходимо зафиксировать время удержания...

Не отвечает на wm_keydown
procedure TBoard.WndProc(var msg: TMessage); //Оконная процедура. begin inherited WndProc(msg); case msg.Msg of ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru