Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2011, 21:17   #1
LMnet
 
Регистрация: 14.01.2010
Сообщений: 9
Вопрос Вопрос по области видимости

Здравствуйте. Я сейчас изучаю MFC и при решении одной из тренировочных задач из книги у меня возник следующий вопрос: как сделать так, чтобы объект, созданный в одном обработчике, был виден из другого? Например, имеется обработчик WM_PAINT, в котором создается некий объект класса cDraw:

Код:
void CMainWindow::OnPaint()
{
	cDraw figure(0,0);
}
Пусть этот объект - это некая фигура на экране с центром в точке (0,0). И я бы хотел, чтобы эта фигура меняла свои координаты при нажатии мышью в клиентской области окна:

Код:
void CMainWindow::OnLButtonUp( UINT nFlags, CPoint point )
{
	figure.shift( point.x, point.y )
}
Метод cDraw::shift(x,y) меняет координаты объекта figure (сдвигает его). Однако, объект figure создан в другом методе и не будет виден за пределами OnPaint(). Меня интересует, каким способом можно создать объект figure в одном методе, чтобы его можно было вызывать из других? Конкретно к этому примеру не привязывайтесь, интересует сам подход. И очень не хочется использовать глобальные объекты.
Решил разместить тему в общих вопросах а не в MFC, потому что вопрос актуален не только для MFC.

Последний раз редактировалось LMnet; 04.04.2011 в 08:50.
LMnet вне форума Ответить с цитированием
Старый 03.04.2011, 21:58   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

обьявите указатель на него в заголовке вашего класса.
и потом создавайте figure=new cDraw(0,0);
ну и используйте figure->shift(point.x,point.y)

вообще при вашей логике инициализировать его лучше в конструкторе один раз.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.04.2011, 08:02   #3
LMnet
 
Регистрация: 14.01.2010
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
обьявите указатель на него в заголовке вашего класса.
и потом создавайте figure=new cDraw(0,0);
ну и используйте figure->shift(point.x,point.y)
С указателем идея хорошая, но если я заранее не знаю, что у меня будет создаваться в методах? Или например, по каждому клику создается новый объект, не буду же я на каждый создавать заранее указатель или делать массив указателей.

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вообще при вашей логике инициализировать его лучше в конструкторе один раз.
Вот этого не понял. Понятное дело, что он будет инициализироваться в конструкторе один раз.
LMnet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос из области фантастики! Nykolyn Помощь студентам 3 04.12.2010 15:57
ограничение видимости tureg1 HTML и CSS 0 05.09.2010 14:01
область видимости Dimarik Общие вопросы .NET 5 21.02.2010 21:32
Как сделать чтобы новые строки всегда были в области видимости? neugadal Microsoft Office Excel 9 06.09.2008 12:23
область видимости ? artem779 Общие вопросы Delphi 3 14.09.2007 09:34