powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какая кнопка была нажата? VC++ 6.0
4 сообщений из 4, страница 1 из 1
Какая кнопка была нажата? VC++ 6.0
    #33525494
Button
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На сайте www.firststeps.ru имеется пример, приведенный ниже.
Как его применить? Тестирование показывает БЕССМЫСЛЕННОСТЬ
Или я чего-то не допонимаю?
В среде VC ++ 6.0 при создании приложения с помощью мастера кнопка ОК создаётся мастером. Код никакой не нужен для закрытия окна.
Если создать свою кнопку и поставить код
void ProfitDeposit::OnButton2Next()
{ EndDialog(IDC_BUTTON2); }
то сработает, окно будет закрыто
Не понятно где анализировать какакя кнопка была нажата,
Если на диалоговом окне несколько кнопок иммется.
Ниже идущий код НЕ РАБОТАЕТ согласно описанному в Шаг 85.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
void ProfitDeposit::OnButton3() 
{
	// TODO: Add your control notification handler code here
	ProfitDeposit cm;
	int i=cm.DoModal();
	if (i==IDC_BUTTON3)
	{
		AfxMessageBox("Next");
	}
	else
MessageBox("no Next - всегда сюда идёт\nдаже после удаления кнопок ОК и Cancel") }

Код: plaintext
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.
Шаг  85  – Значение возвращаемое диалогом
Мы с Вами все время концентрировались на обработке внутри диалога. Но можно узнать какая кнопка была нажата, если проанализировать возврат функции DoModal(), вот так например. 
void CTTT1Dlg::OnButton1() 
{
	CMyDIALOG cm;
	int i=cm.DoModal(); 
	if (i==IDOK)
	{
		AfxMessageBox("OK");
	}
}
Соответственно стает задача, можно ли сделать свою кнопку, которая будет закрывать диалог и возвращать какое-то другое значение. Давайте попробуем. Делаем кнопку Next. Самый простой способ вызвать функцию EndDialog() и передать в нее идентификатор кнопки. 
void CMyDIALOG::OnButtonNext() 
{
	EndDialog(IDC_BUTTON_NEXT);
}
И в вызывающем коде можно анализировать это значение. 
CMyDIALOG cm;
int i=cm.DoModal(); 
if (i==IDC_BUTTON_NEXT)
{
	AfxMessageBox("Next"); никогда не идёт сюда – я проверял!
}
Функция EndDialog является аналогом перегруженной функции Win32 API с тем же именем. 
::EndDialog(m_hWnd, nResult);
В ней предусмотрен код возврата.
...
Рейтинг: 0 / 0
Какая кнопка была нажата? VC++ 6.0
    #33525738
_Балтика
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажи, как перегружал.
...
Рейтинг: 0 / 0
Какая кнопка была нажата? VC++ 6.0
    #33525757
Barte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим у тебя есть два диалога Dialog1 и Dialog2
1)В Классе Dialoga2 создай переменную типа int IndexButton.
2)Теперь добавь на Dialoge2 допустим 4 кнопки и в каждой кнопке напиши:
В событии 1 кнопки: IndexButton=1
В событии 2 кнопки: IndexButton=2
В событии 3 кнопки: IndexButton=3
В событии 4 кнопки: IndexButton=4
Ну и не забудь в каждой кнопке сделать выход из Dialoga2

3)В Dialoge1 ты вызываешь Dialog2 и проверяешь какая кнопка была нажата когда вернешься в Dialog1 ну после закрытия Dialoga2:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//Запустили Dialog2
Dialog2 Dlg2;
Dlg2.DoModa();
//Поверяем какая кнопка нажата
if(Dlg2.IndexButton== 1 ) AfxMessageBox("Нажата 1 кнопка"); 
if(Dlg2.IndexButton== 2 ) AfxMessageBox("Нажата 2 кнопка"); 
if(Dlg2.IndexButton== 3 ) AfxMessageBox("Нажата 3 кнопка"); 
if(Dlg2.IndexButton== 4 ) AfxMessageBox("Нажата 4 кнопка"); 
...
Рейтинг: 0 / 0
Какая кнопка была нажата? VC++ 6.0
    #33544020
Button
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barte

СПАСИБО, НЕ БУЛО МОЖЛИВОСТІ -
ОТБЛАГОДАРИТЬ

Теж УКРАЇНА
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Какая кнопка была нажата? VC++ 6.0
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]