Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ к объекту C*View из C*App, получить указатель 
V
    Опции темы
BFS
Дата 25.10.2007, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Спасибо, кто откликнулся на предыдущий вопрос про контекстное меню, сейчас буду пробовать...


Собственно интересует ещё один вопрос: как получить указатель на объект класса представления (текущее активное окно), когда управляет программой в данный момент другой класс, например класс приложения. У меня в классе приложения обрабатываются нажатия кнопок на панели инструментов... И нужно чтобы, например, перерисовалось окно класса представления в момент нажатия определённой кнопки, ну и кроме этого ещё выполнить действия над объектом класса предствдения. Заранее благодарен!

P.S. перед тем, как задать вопрос, я ищу разные комбинации формулировки гуглом на этом форуме, а раз задаю его, и что-то похожее есть, то значит что-то у меня не получается ( не судите строго!
PM MAIL   Вверх
zkv
Дата 25.10.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Код

CView *MyGetActiveView()
{
    CFrameWnd *pFrame = static_cast<CFrameWnd *>( AfxGetMainWnd() );
    ASSERT(pFrame);
    if( pFrame == NULL )
        return NULL;
    pFrame = pFrame->GetActiveFrame();
    ASSERT(pFrame);
    if( pFrame == NULL )
        return NULL;
    return pFrame->GetActiveView();
}

PM MAIL   Вверх
BFS
Дата 25.10.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



zkv, да, окно обновляется при pFrame->Invalidate(), вызванному из C*App, но в моём классе C*View описаны некоторые переменные, которые  хотелось бы поменять из C*App, как это сделать..?
PM MAIL   Вверх
zkv
Дата 25.10.2007, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 16
Всего: 92



Цитата(BFS @  25.10.2007,  13:14 Найти цитируемый пост)
как это сделать..? 

вариантов множество.
1. обработчик непосредственно во вью можно разместить
2. можно передавать сигнал через сообщения
3. можно преобразовать полученный указатель на вью к твоему классу представления (предварительно подключив хедер с его объявлением), и дальше делай с ним что хочешь.
Цитата(BFS @  25.10.2007,  13:14 Найти цитируемый пост)
при pFrame->Invalidate()

при чем тут pFrame.
Вид возвращает функция, что я дал, использовать так:
Код

CMyView *pView = static_cast<CMyView *>( MyGetActiveView() );
ASSERT(pView);
if( pView == NULL )
{
  //обработать ошибку
}
pView->MySpecialMethod();

метод кстати работает в MDI приложениях, не помню, почему написал его именно так. В SDI могут быть проблемы.

следует заметить, что таких задач не должно вставать при нормальном проектировании, что-то не так спланировал скорее всего.
наверное следует воспользоваться вариантом 1. 
дотягиваться из класса приложения непосредственно в вид, ситуация исключительная.
PM MAIL   Вверх
BFS
Дата 25.10.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 6.5.2007

Репутация: нет
Всего: нет



Вот оно!!! Спасибо огромное! Понять бы только КАК это чудо работает...smile ну это мы потом.
PM MAIL   Вверх
Earnest
Дата 25.10.2007, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(zkv @  25.10.2007,  14:35 Найти цитируемый пост)
метод кстати работает в MDI приложениях, не помню, почему написал его именно так. В SDI могут быть проблемы.

В SDI тоже должно работать: в этом случае GetActiveFrame возвратить сама себя. 

Цитата(zkv @  25.10.2007,  14:35 Найти цитируемый пост)
дотягиваться из класса приложения непосредственно в вид, ситуация исключительная. 

Полностью поддерживаю. Вообще, обработка нажатий на кнопки в классе приложения - из ряда вон.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.1166 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.