Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Таймер


Автор: ej0804 27.4.2007, 22:12
Товарищи программисты,помогите пожалуйста.Такая проблема:

как сделать чтобы сообщение от таймера,созданного в классе диалогового окна,
передовалось сразу во все объекты другого класса этого проекта.

Автор: Greeen 28.4.2007, 09:03
ej0804, ручками слать какое то свое сообщение (например WM_APP + 123)

Автор: SenkraD 28.4.2007, 09:07
Вот что на скорую руку в голову влезло
В обработчике WM_TIMER диалога посылаеш другим оконным классам заранее зарегистрированое сообщение и в них, других классах его обрабатываеш.
А если классы не оконные, то используй бесконечные циклы и логические флаги, это тоже первое что в голову всбрело.

Автор: ej0804 29.4.2007, 19:47
        Так как я начинающий профан в  этом деле, может намекнете по поводу пересылания вручную своего сообщения, приблизительно как это делается (класс должен быть наследован от специального класса работающего с сообщениями или любой собственный?)

Автор: zkv 29.4.2007, 20:14
Цитата(ej0804 @  29.4.2007,  19:47 Найти цитируемый пост)
приблизительно как это делается 

посылаем окну SendMessage() или PostMessage()
ловим в WindowProc окна и все smile

Немного непонятно, что подразумеваешь под: 
Цитата(ej0804 @  27.4.2007,  22:12 Найти цитируемый пост)
передовалось сразу во все объекты другого класса этого проекта. 


Автор: ej0804 29.4.2007, 20:32
Вся эта муть как бы для создания и управления анимированной картинки. Т.е.хотел сделать класс ,каждый объект которого являлся бы такой картинкой. По принятию данных с последовательного порта, по сообщению от таймера управлять ими  сразу всеми в зависимости от принятых данных.

Автор: zkv 30.4.2007, 23:18
ej0804, абстрактное задание, но попробую предложить следующее:

Есть класс в котором мы создаем объекты класса-картинки, и собственно в этом классе хранятся указатели на эти объекты (в контейнере или просто так валяются если немного и фиксированное количество),
 когда возникает необходимость сообщить картинкам, что надо перерисоваться, или что то еще, то просто перебираем все объекты и вызываем в них методы перерисовки.
Идея не новая, посмотрите например как реализован метод UpdateAllViews класса CDocument:
Код

void CDocument::UpdateAllViews(CView* pSender, LPARAM lHint, CObject* pHint)
    // walk through all views
{
    ASSERT(pSender == NULL || !m_viewList.IsEmpty());
        // must have views if sent by one of them

    POSITION pos = GetFirstViewPosition();
    while (pos != NULL)
    {
        CView* pView = GetNextView(pos);
        ASSERT_VALID(pView);
        if (pView != pSender)
            pView->OnUpdate(pSender, lHint, pHint);
    }
} 

Автор: ej0804 1.5.2007, 15:53
Спасибо ZKV , приму во внимание.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)