Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 10.12.2007
Сообщений: 98
1

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

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


Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и определение - понятно. Но как о откуда вызвать эту функцию в моем коде?
Спасибо всем, кто ответит!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2008, 13:36
Ответы с готовыми решениями:

Как передать параметры в функцию
Пытался разобраться как передавать параметры в функцию. Если в C всё понятно func(1,2,3) То в...

Как передать параметры через функцию?
Кто-нибудь знает как передать параметры через функцию...

как передать параметры в функцию, которая приклеена к событию?
element.click = func(parameter1,parameter2)

Импорт функции из dll: как корректно передать параметры в функцию?
Есть dll. Там функция, в c++ builder импортирую её: extern "C" __declspec(dllimport) int __stdcall...

__________________
Помогаю в написании студенческих работ здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
9
Snork
06.01.2008, 14:43 2
Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и определение - понятно. Но как о откуда вызвать эту функцию в моем коде?
Спасибо всем, кто ответит!

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

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

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

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

Снорк.
0 / 0 / 1
Регистрация: 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'ом - т.е. вручную :-(.
0
0 / 0 / 1
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 14:31  [ТС] 8
P.S. Забыл удалить лишнее... Извиняюсь.
0
Snork
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...() и код улучшился :-).

Снорк.
0 / 0 / 1
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 16:01  [ТС] 10
У-гу. Спасибо, Снорк!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2008, 16:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Передать функцию в функцию и другие параметры. Расшифровать конструкцию
Здравствуйте. Примером может служить jq, в которой мы прописываем функции (чаще всего анонимные),...

Передать параметры в функцию.
Всем привет! Не получается передать параметры из Delphi в библиотеку написанную на C++. Код...

Передать параметры в функцию system
помогите плз разобраться мне нужно запустить команду write в Си, проблема заключается в том что я...

Передать в функцию с замыканием параметры
Есть пример функции makeCounter(a, b) Каким образом можно передавать разные параметры при этом...

Не получается правильно передать параметры в функцию
Совсем замучался. Решил делать не совсем так, как в методе и закопался. Вопрос вроде элементарный,...

Ошибка при попытке передать параметры в функцию
Хочу сложить две матрицы, выдаёт ошибку при попытке передать матрицы в функцию https :// imgur ....


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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