| Предыдущая тема :: Следующая тема | 
	
	
		| Автор | Сообщение | 
	
		| Eugeny 
 
 
 Зарегистрирован: 01.02.2005
 Сообщения: 40
 
 
 | 
			
				|  Добавлено: Чт Фев 02 2006 11:21    Заголовок сообщения: Проблемка с CDialog (MFC) |   |  
				| 
 |  
				| Как предотвратить закрытие окна диалога, производного от CDialog (MFC) при нажатии Enter'a. Создаю приложение главным окном которого является диалоговое окно, естественно мне не нужно чтобы по Enter'у оно закрывалось. 
 Пробовал в методе InitInstance сменить способ создания и вывода диалога с DoModal() на Create() и ShowWindow().
 Не помогло...
 |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
		| September 
 
 
 Зарегистрирован: 14.11.2004
 Сообщения: 109
 Откуда: Saint-Petersburg
 
 | 
			
				|  Добавлено: Чт Фев 02 2006 12:27    Заголовок сообщения: |   |  
				| 
 |  
				| На сколько я помню, по умолчанию вы получаете фокус на кнопку "ОК", следовательно нажатие Ентера влечет за собой обработку кнопки "ОК". Варианты - либо меняем фокус, либо глушим обработку MB_OK своим кодом. Могу ошибаться, Вижал запускал последний раз больше года назад 8((
 _________________
 Соре за громотишескее ашипки
 |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
		| kolobok0 
 
 
 Зарегистрирован: 22.04.2005
 Сообщения: 253
 Откуда: Мсква
 
 | 
			
				|  Добавлено: Чт Фев 02 2006 17:44    Заголовок сообщения: Re: Проблемка с CDialog (MFC) |   |  
				| 
 |  
				|  	  | Eugeny писал(а): |  	  | Как предотвратить закрытие окна диалога, производного от CDialog (MFC) при нажатии Enter'a. Создаю приложение главным окном которого является диалоговое окно, естественно мне не нужно чтобы по Enter'у оно закрывалось. 
 Пробовал в методе InitInstance сменить способ создания и вывода диалога с DoModal() на Create() и ShowWindow().
 Не помогло...
 | 
 
 По дороге путешествия сигнальчика типа OnClose ставите в визарде обработчик и НЕ вызываете у базового соответствующий метод...
 
 Например на клавише окей нажатый ентер - вызовет обработчик OnOK. Дык в нём не нужно вызывать базовый.
 
 Как тут уже прозвучало - не всегда фокус ввода будет на той или иной кнопке. Посему приведённый выше пример - лишь пример прохождения события. А не руководство к действию.
 
 с уважением
 (круглый)
 |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
		| Eugeny 
 
 
 Зарегистрирован: 01.02.2005
 Сообщения: 40
 
 
 | 
			
				|  Добавлено: Вт Фев 07 2006 14:31    Заголовок сообщения: |   |  
				| 
 |  
				| Даже если в диалоге нет ни одиной кнопки и в методе OnClose не вызывать базовый CDialog::OnClose() все равно закрывается по Ентеру |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
		| DmitryShm 
 
 
 Зарегистрирован: 17.11.2003
 Сообщения: 211
 Откуда: Казань
 
 | 
			
				|  Добавлено: Вт Фев 07 2006 18:40    Заголовок сообщения: OkButton |   |  
				| 
 |  
				|    Есть такая вещь, как DialogResult. Кнопка Ok по дефолту на форме -- это OkButton. Т.е. по ее нажатию у DialogResult будет Ok. Есть также по дефолту кнопка Cancel. При ее нажатии у формы задается CancelResult. При установке Result формы она закрывается. Кнопка OkButton всегда будет в фокусе на форме. Это логика такая.  Если хотите изменить логику, то просто уберите все OkButton-ы с формы. Создайте новую унопку вместо уничтоженной OkButton, либо снимите соответствующее свойство с кнопки Ok, делающее ее OkButton. _________________
 love IT
 |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
		| Eugeny 
 
 
 Зарегистрирован: 01.02.2005
 Сообщения: 40
 
 
 | 
			
				|  Добавлено: Ср Фев 08 2006 08:16    Заголовок сообщения: |   |  
				| 
 |  
				| А ларчик просто открывался   Даже если в диалоге нет ни одной кнопки, ID_OK и ID_CANCEL все равно есть (так по всей видимости устроен класс).
 Действительно если в обработчике OnOK не вызывать базовый то диалог не закрывается!!!
 
 Большое спасибо kolobok0, он мне сразу дело подсказал, я просто не въехал вначале
 |  | 
	
		| Вернуться к началу |  | 
	
		|  | 
	
		|  |