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

Тема в разделе "MS Visual C++", создана пользователем BFS, 25 окт 2007.

Наш партнер Genesis Hackspace
  1. BFS

    BFS Гость

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


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

    grigsoft Well-Known Member

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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

    Вот ТУТ много доступных и понятных примеров
     
  4. BFS

    BFS Гость

    grigsoft, Спасибо!

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

    BFS Гость

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

    grigsoft Well-Known Member

    Регистрация:
    15 ноя 2005
    Сообщения:
    735
    Симпатии:
    0
    FirstSteps - очень неплохой ресурс для начинающих, European не зря туда отправляет. Про ON_COMMAND ты тоже там прочитаешь :)
     
  7. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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]
    А что, мне за тебя код писать?
     
  8. BFS

    BFS Гость

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

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

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.566
    Симпатии:
    0
    <!--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]
    Можно, только вот зачем? Такие изыски требуются только чтобы подпирать падающую архитектуру приложения
     
  10. BFS

    BFS Гость

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

Поделиться этой страницей