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

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

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

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

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

Как в функцию обработки сообщений типа void CMathematicsView::OnResultButton() передать параметры? Как и где написать прототип и определение - понятно. Но как о откуда вызвать эту функцию в моем коде?
Спасибо всем, кто ответит!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2008, 13:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как в функцию обработки сообщений передать параметры? (C++):

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

Какие параметры нужно передать в функцию opengl при ее вызове, что бы код заработал? - C++
Добрый день. Имеется код: #include <GL/glut.h> #include <iostream> int opengl(int, char **argv); void draw(void); void...

Не могу разобраться как передать корректно передать массив из функции в функцию - C++
//--------------------------------------------------------------------------- #pragma hdrstop ...

передать ссылки как параметры - C++
народ объясните для чего они нужны,ссылки как параметры,или же указатели,в книге прочел не дошло если у кого есть книга С++ за 21 день то...

Как передать параметры в main ? - C++
нужно передать параметры с командной строки в основную функцию. например я хочу найти cos(x). как задать и передать значение параметра X...

Как передать параметры через ShellExecute - C++ - C++
Приветствую Как передать строку и число через ShellExecute? SHELLEXECUTEINFO ShExecInfo = { 0 }; ShExecInfo.cbSize =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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...() и код улучшился :-).

Снорк.
Doomych
0 / 0 / 0
Регистрация: 10.12.2007
Сообщений: 98
07.01.2008, 16:01  [ТС] #10
У-гу. Спасибо, Снорк!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2008, 16:01
Привет! Вот еще темы с ответами:

Как в Dev C++ передать параметры командной строки - C++
Мне необходимо данные брать из файла. Путь к файлу нужно передавать как параметр командной строки argv. Подскажите пожалуйста как это...

Как передать параметры конструктора одного класса другому? - C++
Скажите пожалуйста, как это должно работать? Как передать параметры конструктора одного класса другому? #include <iostream> using...

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

Как передать функцию в функцию? - C++
void MainWindow::_createTextEdit(QWidget *tab, QString text, void (*saveSlot)()) { ... connect(save, SIGNAL(clicked()), this,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.01.2008, 16:01
Ответ Создать тему
Опции темы

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