• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Доступ к объекту C*view из C*app

  • Автор темы BFS
  • Дата начала
B

BFS

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


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

grigsoft

Получить-то указатель не проблема, но некрасиво это. Каждый должен заниматься своим делом. Если из App тебе понадобилось дергать view, подумай - может то что ты делаешь в Арр нужно во View делать? Или в документе, и дергать View через UpdateAllViews?
По теме, на мой взгляд, приемлимый путь - AfxGetMainWnd()->Send/PostMessage (WM_COMMAND, IDx). Команда дойдет до активного View. Кроме того, если в последствии ты решишь что эту команду лучше обработать в документе или фрейме, тебе не придется исправлять вызовы.
 
E

European

<!--QuoteBegin-grigsoft+25:10:2007, 10:07 -->
<span class="vbquote">(grigsoft @ 25:10:2007, 10:07 )</span><!--QuoteEBegin-->но некрасиво это
[snapback]82976" rel="nofollow" target="_blank[/snapback]​
[/quote]
Я бы даже сказал, что это противоречит концепции документ-представление, положенной в основу MFC

Вот много доступных и понятных примеров
 
B

BFS

grigsoft, Спасибо!

а Europeanу всё бы меня отправить подальше :)
 
B

BFS

ещё вопрос возник... а в какой функции CView следует осуществлять приём и обработку переданного сообщения. Я уж было подумал, что существует такой в Messages WM_COMMAND, а IDx - это расшифровка конуретной коммнды, но такого Message нету для CView... в общем, осталось дело за малым )
 
G

grigsoft

FirstSteps - очень неплохой ресурс для начинающих, European не зря туда отправляет. Про ON_COMMAND ты тоже там прочитаешь :)
 
E

European

<!--QuoteBegin-BFS+25:10:2007, 10:16 -->
<span class="vbquote">(BFS @ 25:10:2007, 10:16 )</span><!--QuoteEBegin-->а Europeanу всё бы меня отправить подальше
[snapback]82983" rel="nofollow" target="_blank[/snapback]​
[/quote]
А что, мне за тебя код писать?
 
B

BFS

А ещё можно вот так:

Код:
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();
}
и обращаться к ней:

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

European

<!--QuoteBegin-BFS+25:10:2007, 14:07 -->
<span class="vbquote">(BFS @ 25:10:2007, 14:07 )</span><!--QuoteEBegin-->А ещё можно вот так:
[snapback]83049" rel="nofollow" target="_blank[/snapback]​
[/quote]
Можно, только вот зачем? Такие изыски требуются только чтобы подпирать падающую архитектуру приложения
 
B

BFS

Можно, только вот зачем? Такие изыски требуются только чтобы подпирать падающую архитектуру приложения
:) Дело в том, что программку я начинал писать с книжки, когда немного разобрался, что к чему - книжка стала уже ненужна, но программка заметно потолстела, появилось много кнопочек, а в той книжке эти кнопочки определялись в C*App; и мне лень всё заново переделывать для C*View :D так что ты прав - я подпираю падающую архитектуру :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!