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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2012, 16:47   #1
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию считка нажатия на Enter

Здравстуйте!

Код:
switch (message)
	{
		
		case WM_COMMAND:
		{...
                 ... }
               case WM_KEYDOWN:
			{
				int v=1;
				if (wParam == VK_RETURN)
				{
					int y=1;
				}
				break;
			}
		break;
}
ставляю брекпоинты - в первый кейс заходит во второй не хочет... меняю местами таже ситуация.. А суть: запустить функцию при нажатии на ентер в едите. Что делаю не так?
да вот параметры, которые передаю сюда (HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)... Ну должно все работать
enjo вне форума Ответить с цитированием
Старый 29.11.2012, 17:03   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Код:
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{	
	case WM_INITDIALOG:
		{
			return (INT_PTR)TRUE;
		}
	case WM_COMMAND:
		{
			if		(LOWORD(wParam) == IDCANCEL)
			{
				EndDialog(hDlg, lParam);
				return (INT_PTR)TRUE;
			}
		}
		
	}
	return (INT_PTR)FALSE;
}
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 29.11.2012, 17:08   #3
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

я Вас понял, но у меня вынесено в две процедуры

Код:
INT_PTR CALLBACK OpProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)  
{
	switch (message)
	{
		case WM_INITDIALOG:
			{
				SendDlgItemMessage(hDlg,IDC_SLIDER1,TBM_SETRANGE,1,MAKELONG(1,10));
				Demo::FluidScene* pkFluidScene = (Demo::FluidScene*) lParam;
				//_ASSERT(pkFluidScene);
				SetWindowLong(hDlg, GWL_USERDATA, lParam);
			}			
			return (INT_PTR)TRUE;

		default:
			{
				Demo::FluidScene* pkFluidScene = (Demo::FluidScene*) GetWindowLong(hDlg, GWL_USERDATA);
				//_ASSERT(pkFluidScene);
				INT_PTR iResult = pkFluidScene->DlgProcedure(hDlg, message, wParam, lParam);
				return iResult;
			}
			break;
	}
	return (INT_PTR)FALSE;
}

INT_PTR  Demo::FluidScene::DlgProcedure(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	Demo::FluidScene* pkFluidScene = (Demo::FluidScene*) lParam;
	switch (message)
	{
		
		case WM_COMMAND:
		{
			switch (LOWORD(wParam))
			{
			case  IDC_CHECK1:
				{
					//LRESULT bChek = (BOOL)SendDlgItemMessage(hDlg, IDC_CHECK1, BM_GETCHECK, 0, 0);
					GravityCheckBox (hDlg,message, wParam,lParam);
					break;
				}
			case  IDC_BUTTON2:
				{
					SendDlgItemMessage(hDlg,IDC_SLIDER1,TBM_SETRANGE,1,MAKELONG(70,100));
					HWND slhwnd = GetDlgItem(hDlg, IDC_SLIDER1);
					int pos = SendMessage(slhwnd,TBM_GETPOS,0,0);
					SetDlgItemInt(hDlg, IDC_EDIT3, pos, FALSE);

					/*pos=(int)SendDlgItemMessage(hDlg,IDC_SLIDER1,TBM_GETTICPOS,0,0);*/
					//int pos = GetDlgItemInt(hDlg, IDC_SLIDER1, NULL, FALSE);
					break;
				}
			}
			if(LOWORD(wParam)==IDOK || LOWORD(wParam)==IDCANCEL)
			{
				EndDialog(hDlg, LOWORD(wParam));
				return (INT_PTR)TRUE;
			}

			break;
		}
		
		case WM_KEYDOWN:
			{
				int v=1;
				if (wParam == VK_RETURN)
				{
					int y=1;
				}
				break;
			}
		break;
	}
	
	return (INT_PTR)FALSE;
}
enjo вне форума Ответить с цитированием
Старый 30.11.2012, 01:29   #4
LancX
Пользователь
 
Аватар для LancX
 
Регистрация: 30.04.2012
Сообщений: 52
По умолчанию

Цитата:
Сообщение от enjo Посмотреть сообщение
Здравствуйте!
вставляю брекпоинты - в первый кейс заходит во второй не хочет... меняю местами такая же ситуация.. А суть: запустить функцию при нажатии на ентер в едите. Что делаю не так?
дополнить процедуру Edit на нажатие Enter. А для чего Command ты используешь?
При любом расчете, число, правильность которого для всех очевидна, становится источником ошибок.
LancX вне форума Ответить с цитированием
Старый 30.11.2012, 09:58   #5
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

Код:
case WM_COMMAND:
			switch (LOWORD(wParam))
			{
				case IDC_EDIT3:
					if (wParam == VK_RETURN)
					{
						...
					}
					break;
				case  IDC_CHECK1:
					...
					break;
				case IDC_CHECK2:
					...
					break;
				case  IDC_BUTTON2:
					...
					break;
			}
break;
не работает и так тоже(

мне советовали в свойствах едита поставить WANT RETURN = TRUE. поставил и без изменений. А может что-то в свитч передать другое? .... Кстати в едит заходит, но в иф не хочет, чего-то виртуал адрес ентера не хавает. ????

Последний раз редактировалось enjo; 30.11.2012 в 10:05.
enjo вне форума Ответить с цитированием
Старый 30.11.2012, 11:08   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

У вас LOWORD(wParam) == IDC_EDIT а потом с какого бодуна вы ожидаете увидеть в том же LOWORD(wParam) == VK_RETURN?

В диалогах нажатие на Enter вызывает срабатывание default push button. Не забывайте, что диалогововая процедура != процедура окна.

У вас гдето в обработке сообщений есть IsDialogMessage - не удивлюсь, если обрабнотка нажатия Return происходит там. Либо там, либо в процедуре окна диалога. Сделайте subclass диалоговому окну и смотрите там. Про subclassing прочитайте тут: http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
waleri вне форума Ответить с цитированием
Старый 30.11.2012, 11:16   #7
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

понял, почитаю... все происходит в двух процедурах, которые выложил
enjo вне форума Ответить с цитированием
Старый 30.11.2012, 15:45   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Да, но ето диалоговые процедуры (DLGPROC) а вам надо подменить WNDPROC
waleri вне форума Ответить с цитированием
Старый 30.11.2012, 16:27   #9
enjo
Пользователь
 
Регистрация: 14.12.2009
Сообщений: 47
По умолчанию

Я объявил все как в примере

Код:
WNDPROC wpOrigEditProc;
только вот теперь как тело описать... без скобок???
со скобками - redefinition
без скобок - but there is no paraneter list

где туплю?
Код:
WNDPROC wpOrigEditProc()
{
	return (WNDPROC)TRUE;
}

Последний раз редактировалось enjo; 30.11.2012 в 16:32.
enjo вне форума Ответить с цитированием
Старый 30.11.2012, 17:45   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

WNDPROC это указатель на функцию.
Вам надо написать свою функцию и вызывать предыдущую
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
считка массива из файла aank10 C++ Builder 0 10.10.2011 18:43
Получить адрес ячейки до нажатия Enter Sergey112233 Microsoft Office Excel 6 23.08.2011 20:02
Проверка нажатия Enter и переход на метку не работает gefest58 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 01.04.2011 22:03
обработка нажатия ENTER(#13): что-то странное... D][mon Помощь студентам 0 13.10.2010 19:12
отловить нажатие клавиши в ячейке (до нажатия enter) loginrl103 Microsoft Office Excel 3 07.08.2009 15:10