Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
#1

Как в функцию обработки сообщений передать параметры? - C++

06.01.2008, 13:36. Просмотров 1073. Ответов 9
Метки нет (Все метки)

Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и определение - понятно. Но как о откуда вызвать эту функцию в моем коде?
Спасибо всем, кто ответит!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2008, 13:36     Как в функцию обработки сообщений передать параметры?
Посмотрите здесь:
C++ Передать параметры в функцию.
Какие параметры нужно передать в функцию opengl при ее вызове, что бы код заработал? C++
Не могу разобраться как передать корректно передать массив из функции в функцию C++
C++ Как передать параметры в main ?
передать ссылки как параметры C++
C++ Как передать параметры через ShellExecute - C++
Как в Dev C++ передать параметры командной строки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Snork
Сообщений: n/a
06.01.2008, 14:43     Как в функцию обработки сообщений передать параметры? #2
Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и определение - понятно. Но как о откуда вызвать эту функцию в моем коде?
Спасибо всем, кто ответит!

Этот-метод обработчик вызывается главной петлей окна, когда оно получает сообщение о том, что нажата кнопка. Соответственно, прототип поменять ты не сможешь (его-то поменять 0 проблем, но нам ведь надо, чтоб все корректно работало!), разве что макросы будешь переписывать... Но это не наш путь! А какие тебе аргументы понадобилось вводить? и, главное, зачем? Нажали кнопку - вызвалась OnResultButton(). Чего еще? Объясни подробнее.
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
06.01.2008, 15:18  [ТС]     Как в функцию обработки сообщений передать параметры? #3
У меня есть массив из 12 кнопок, которые выводятся в клиентскую область и которые я хочу обработать в одной функции OnResultButton(), в которую в качестве параметра будет передаться номер нажатой кнопки и указатель на документ (понимаю, что это не обязательно, но мне кажется, что так работать будет побыстрее (может, и ошибаюсь)). Хочется обойтись без создания 12 функций OnResultButton01(), OnResultButton02(), ..., OnResultButton12() и не хочется плодить переменные для запоминания параметров.
Snork
Сообщений: n/a
06.01.2008, 17:10     Как в функцию обработки сообщений передать параметры? #4
Не помню точно, но по моему это делается так:

Макрос:
ON_CONTROL_RANGE( BN_CLICKED, id1, id2, OnAnyButton)
(id1 - Идентификатор первой кнопки, id2 - двенадцатой, они должны идти по порядку чисел).

Хендлер:
OnAnyButton(UINT ID)
{
А здесь ты смотришь, какой ID и понимаешь, какая кнопка из 12 нажата.
}

Насчет указателя на документ я не вкурил, чего ты хочешь. Еще подробнее, пожалуйста.
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 12:33  [ТС]     Как в функцию обработки сообщений передать параметры? #5
Спасибо, Снорк!
Речь идет об указателе pDoc, которому присваивается адрес документа (функция OnDraw() класса представления). Думаю, что в моем случае передача pDoc в функцию-обработчик сообщения нецелесообразна, т.к. если просто дописать в обработчик 'CMathematicsDoc* pDoc = GetDocument()', то получится проще и нагляднее.
Snork
Сообщений: n/a
07.01.2008, 13:31     Как в функцию обработки сообщений передать параметры? #6
Маленькие уточнения. Я решил, что ты работаешь с MDI и долго догонял, что нужно. Конечно передавать параметр pDoc нецелесообразно! А RANGE-макросы, увы, вставляется TypeWizard'ом - т.е. вручную :-(.

Снорк.
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 14:30  [ТС]     Как в функцию обработки сообщений передать параметры? #7
Да, я действительно работаю с SDI. А если бы у меня был MDI, то как тогда передать pDoc: тем же макаром или здесь еще какие-то хитрости?
С уважением, Дмитрий

Спасибо, Снорк!
Речь идет об указателе pDoc, которому присваивается адрес документа (функция OnDraw() класса представления). Думаю, что в моем случае передача pDoc в функцию-обработчик сообщения нецелесообразна, т.к. если просто дописать в обработчик 'CMathematicsDoc* pDoc = GetDocument()', то получится проще и нагляднее.

Автор: Snork Дата: 30.10.2001 13:54

Маленькие уточнения. Я решил, что ты работаешь с MDI и долго догонял, что нужно. Конечно передавать параметр pDoc нецелесообразно! А RANGE-макросы, увы, вставляется TypeWizard'ом - т.е. вручную :-(.
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 14:31  [ТС]     Как в функцию обработки сообщений передать параметры? #8
P.S. Забыл удалить лишнее... Извиняюсь.
Snork
Сообщений: n/a
07.01.2008, 15:43     Как в функцию обработки сообщений передать параметры? #9
MSDN:
CView::GetDocument
This method retrieves a pointer to the view’s document. This allows you to call the document’s methods.

Это значит, что в МДИ у тебя на каждый документ - свое представление (умножается не только число экземпляров CDocument-дериватива, но и CView). Работает все аналогично. Будет в каждом представлении по 12 кнопок.
А из ((CMyMainFrame*)::AfxGetMainWnd()) получаешь АКТИВНОЕ CView через GetActiveView() (? - точно ейное :-) имя не помню).

Кстати, о птичках. По идее архитектура Док-Представление предполагает, что тебе не надо, например, из View получать указатель на Мэйнфрейм, а из документа - указатель на аппликуху. Но это по идее. Бывает лень все правильно проектировать, или срочно надо, или уже ворон навалял, +- лишний косяк рояли не играет. Как тогда эти указатели получить? Я раньше делал так: глобальные указатели на View, Doc, Win32App, а каждый экземпляр (благо он один) их инициализировал в конструкторе this'ом. Для МДИ надо было бы тогда глобальный массив указателей на View/Doc. А потом узнал о существовании ::AfxGet...() и код улучшился :-).

Снорк.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2008, 16:01     Как в функцию обработки сообщений передать параметры?
Еще ссылки по теме:
C++ Как передать параметры конструктора одного класса другому?
Как передать указатель на функцию в функцию C++
Как передать функцию в функцию? C++
Процедура обработки сообщений для отдельного контрола C++
Как передать функцию в Thread()? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 16:01  [ТС]     Как в функцию обработки сообщений передать параметры? #10
У-гу. Спасибо, Снорк!
Yandex
Объявления
07.01.2008, 16:01     Как в функцию обработки сообщений передать параметры?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru