| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | «  : 03-02-2004 11:21 »  |  | 
 
 Все приложение диалоговое.Трабла следующая - при нажатии на любом из диалогов клавиши Enter - диалог регирует как на нажатие OnOk.
 IDOK вообще не зарегистрировано на данных диалогах.
 Перегружать метод OnOK не хочу - так как вроде должно решаться и так.
 
 Где я глючу не подскажите?
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	| 
			| 
					
						| Alf 
								Гость
 | 
								|  | « Ответ #1 : 03-02-2004 11:37 »  |  | 
 
 ChaoticCube, а на панели диалога есть кнопка, у которой свойство Default Button установлено в True? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | « Ответ #2 : 03-02-2004 13:27 »  |  | 
 
 Нет. Нет такой кнопки.Там такие диалоги что и не должно быть.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	| 
			| 
					
						| little | 
								|  | « Ответ #3 : 03-02-2004 17:36 »  |  | 
 
 Тоже есть такая беда, все время забывл спросить. Помогите, пожалуйста. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kuzmich 
								Гость
 | 
								|  | « Ответ #4 : 04-02-2004 04:58 »  |  | 
 
 решения 2 (или больше:)): 1. всетаки перегрузить OnOK, сделав в ней заглушку 2.  BOOL CMyDlg::PreTranslateMessage(MSG* pMsg) {
 if( pMsg->message == WM_KEYDOWN )
 {
 if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE )
 {
 ::TranslateMessage(pMsg);
 ::DispatchMessage(pMsg);
 return TRUE;                    // DO NOT process further
 }
 }
 
 return CDialog::PreTranslateMessage(pMsg);
 }
 |  
						| 
								|  |  
								| « Последнее редактирование: 23-11-2007 21:26 от Алексей1153++ » |  Записан | 
 |  |  | 
	| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | « Ответ #5 : 04-02-2004 20:06 »  |  | 
 
 Первый плох - клавиша Enter ваще не работает тогда.
 Второй метод попробую. Спасибо.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	| 
			| 
					
						| PSD 
								Главный специалист    Offline 
								Пол:    | 
								|  | « Ответ #6 : 05-02-2004 05:28 »  |  | 
 
 У техтовых окон есть свойство которое управлет их рекакцией на Ентр...ставишь его и пока фокус на окне ввода ентр отрабатывает как в ворде...
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Да да нет нет все остальное от лукавого. |  |  | 
	| 
			| 
					
						| Kuzmich 
								Гость
 | 
								|  | « Ответ #7 : 05-02-2004 05:49 »  |  | 
 
 У техтовых окон есть свойство которое управлет их рекакцией на Ентр...ставишь его и пока фокус на окне ввода ентр отрабатывает как в ворде...
 Да действительно такое свойство есть у контрола Edit, нужно поставить галочку want return, в этой теме вроде говорят про диалоговые окна   |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | « Ответ #8 : 05-02-2004 10:52 »  |  | 
 
 Kuzmich, второй метод грешит тем же самым для модального диалога.
 На самом деле есть метод без кода делающий тоже самое - клавиша Enter не пашет на диалоге - просто добавить клавишу IDOK и сделать ее не видимой и Disabled.
 
 Как я понял из MSDN - для диалога функции
 ::TranslateMessage(pMsg);
 ::DispatchMessage(pMsg);
 мона вызвать только если IsDialogMessage(pMsg) - возвращает FALSE, а нажатие Enter - возвращает TRUE.
 
 Вот как сделать так что б дефаултной функции вообще не было - вопрос.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	| 
			| 
					
						| grozny 
								Гость
 | 
								|  | « Ответ #9 : 05-02-2004 23:05 »  |  | 
 
 Kuzmich Вот как сделать так что б дефаултной функции вообще не было - вопрос.
 дык перегрузить своей ф-цией.  Ну или отрезать акселератор. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Kuzmich 
								Гость
 | 
								|  | « Ответ #10 : 06-02-2004 04:33 »  |  | 
 
 ChaoticCube, я непонял, что значит "грешит тем же самым" ?функцию я взял из рабочего проекта, у меня все работает или тебе нужно что-то особенное ? (правда у меня студия шестая)
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | « Ответ #11 : 06-02-2004 13:51 »  |  | 
 
 Грешит тем же самым - клавиша Enter не пашет на других кнопках.
 У мя не пашет - и эмэфся в эмэсдээн говорит - что незя мол юзать для  IsDialogMessage(pMsg)
 ::TranslateMessage(pMsg);
 ::DispatchMessage(pMsg);
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	| 
			| 
					
						| Anchorite 
								Гость
 | 
								|  | « Ответ #12 : 06-02-2004 20:37 »  |  | 
 
 BOOL CMyDlg::PreTranslateMessage(MSG* pMsg){
 if (pMsg->message == WM_KEYFIRST && pMsg->wParam == VK_RETURN) {
 AfxMessageBox("Enter pressed");
 return TRUE;
 }
 
 return CDialog::PreTranslateMessage(pMsg);
 }
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Achorite 
								Гость
 | 
								|  | « Ответ #13 : 06-02-2004 20:59 »  |  | 
 
 Предыдущий код не корректен. Он позволяет лишь определить нажатие на клавишу  "Enter". Нижеприведенный решает изложенную ChaoticCube проблему
 BOOL CDlgDlg::OnCommand(WPARAM wParam, LPARAM lParam)
 {
 if (wParam == IDOK) {
 TRACE("IDOK\n");
 return TRUE;
 }
 
 return CDialog::OnCommand(wParam, lParam);
 }
 |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | « Ответ #14 :  06-02-2004 23:26 »   |  | 
 
 Achorite, попробовал - решение такое же.На других клавишах Enter не работает.
 
 Попробую еще раз изложить проблему:
 
 есть диалог с отсутсвующими клавишами IDOK и IDCANCEL.
 Но существуют другие клавиши - пусть ID_1, ID_2,ID_3 ... ID_N
 
 Надо сделать так что бы по нажатии Escape ничего не происходило, ибо не фиг.
 А по нажатии клавиши Enter - реакция была бы такая как будто Enter нажали на том элементе, где в данный момент фокус. Если фокус нигде - то никакой реакции.
 
 Причем проблему надо решить с наименьшим возможным кол-вом кода.
 
 Я абсолютно точно знаю, что проблема решабельна. Знаю это от того, что обладаю проектом, где реакция именно такая. Причем в этом проекте нет кода который пытался бы решить эту проблему, проблемы просто нет как будто и не было. Однако, если я выставляю в своем уже проекте даже все опции диалога, как в проекте без проблемы, трабла в моем проекте все равно есть.
 Не могу найти ошибку, так как ошибка не в коде.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	| 
			| 
					
						| Anchorite 
								Гость
 | 
								|  | « Ответ #15 : 07-02-2004 07:23 »  |  | 
 
 Ты уверен, что приложение диалоговое, а не обычное, но лишь выглядещае как диалоговое? |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| Anchorite 
								Гость
 | 
								|  | « Ответ #16 : 07-02-2004 07:37 »  |  | 
 
 И еще вопрос? Что значит "фокус нигде". В диалогах такое невозможно. Там всегда есть сфокусированный элемент. |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	| 
			| 
					
						| ChaoticCube 
								ChaoticCube 
								Помогающий
								
								    Offline 
								Пол:    
								ChaoticCube
								
								
								
								
								
							 | 
								|  | « Ответ #17 : 07-02-2004 21:48 »  |  | 
 
 Anchorite, Dialog Based  - точно.
 Фокус нигде - мой глюк, извиняюсь.
 |  
						| 
								|  |  
								|  |  Записан | 
 
 Сила ночи, сила дня - одинакого фигня.... |  |  | 
	|  |