Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2008, 21:21   #1
feranic
Пользователь
 
Регистрация: 19.02.2008
Сообщений: 11
По умолчанию Как в Си обработать нажатие управлавляющих клавиш ?

Нужна помощь, перерыл кучу книг, не нашел, порылся в интернете, нашел на исходниках вот что:
При нажатии клавиш на клавиатуре в окно (а точнее в оконную процедуру), которое имеет фокус поступают сообщения WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN, и WM_SYSKEYUP. Основное сообщение, которое система отправляет окну при нажатии клавиши - WM_KEYDOWN.
При поступлении сообщения WM_KEYDOWN, оконная процедура должна проверить виртуальный код (который содержится в параметре wParam сообщения) и решить что дальше с ним делать
case WM_KEYDOWN:
switch (wParam)
{
case VK_LEFT:
// Нажата стрелка влево.
break;
,что довольно странно, ведь перед первым кейсом нет свитча. Это и компилятору кажется странным. Но я не знаю, что дописать.
feranic вне форума Ответить с цитированием
Старый 13.04.2008, 21:42   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Код:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

	switch (message) {
	case WM_CREATE:
		//...........................	
		break;
	case WM_COMMAND:
		switch (LOWORD(wParam)){
			//...........................	
			//...........................	
			case IDM_EXIT:
				DestroyWindow(hWnd);
				break;
			default:
				return DefWindowProc(hWnd, message, wParam, lParam);
		}
		break;
	case WM_PAINT:
		{
			HDC	hdc = BeginPaint(hWnd, &ps);
			//...........................	
			EndPaint(hWnd, &ps);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_KEYDOWN:
		//...........................	
		break;
	case WM_KEYUP:
		//...........................	
		break;
	case WM_SHOWWINDOW:
		//...........................	
		break;
	default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}
B_N вне форума Ответить с цитированием
Старый 13.04.2008, 21:57   #3
feranic
Пользователь
 
Регистрация: 19.02.2008
Сообщений: 11
По умолчанию

это для C++ код?
feranic вне форума Ответить с цитированием
Старый 13.04.2008, 22:00   #4
feranic
Пользователь
 
Регистрация: 19.02.2008
Сообщений: 11
По умолчанию

И потом, вот для кейсов , выделенных черным, опять же нет свитча
И я не понял первую строчку. Если можно, поподробнее)
feranic вне форума Ответить с цитированием
Старый 13.04.2008, 22:53   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от feranic Посмотреть сообщение
И потом, вот для кейсов , выделенных черным, опять же нет свитча
И я не понял первую строчку. Если можно, поподробнее)
Я Вам дал вполне рабочую заготовку оконной функции, которую Вы и хотели увидеть. И все свитчи там на своих местах.
B_N вне форума Ответить с цитированием
Старый 14.04.2008, 19:20   #6
feranic
Пользователь
 
Регистрация: 19.02.2008
Сообщений: 11
По умолчанию

Просто я в Борланд СИ 3.1 пишу.К тому же, тот код я просто не вполне понял.
Впрочем, я нашел другую функцию, getch(), с ней будет сделать проще
Все равно, спасибо.
feranic вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перехватить нажатие клавиш в Windows? JoanM Win Api 15 31.05.2013 14:42
Операторы ветвлений (нажатие клавиш) barahlysh Общие вопросы C/C++ 6 12.12.2007 12:19
сделать нажатие клавиш, в неактивном приложении Димарик Общие вопросы Delphi 1 22.06.2007 22:48
Нажатие клавиш VanDerKeen Win Api 1 03.06.2007 21:13