Урок XI

  • Теперь нам надо добавить код обработки фонового режима для этого нам необходимо связать код с событием OnIdle, которое происходит, когда окно программы не активно.
  • Для этого откроем Class Wizard выберем класс CFormApp, найдем сообщение OnIdle и добавим функцию, в которую поместим следующий код:

    BOOL CTaskApp::OnIdle(LONG lCount)
    {
    // TODO: Add your specialized code here and/or call the base class

    /*Вызвать функцию базового класса СWinApp::OnIdle(), чтобы завершить его служебные задачи*/
    CWinApp::OnIdle(lCount);

    //Звуковой сигнал
    MessageBeep((WORD)-2);

    /*Вернуть TRUE, чтобы опять запустить себя, если есть фоновый режим*/
    returnTRUE;
    }

  • Первый оператор требуется для нормальной работы программы, мы точно уже уверены, что с системой все в поряке.
  • Запустите программу, когда ваша система простаивает она выдает непрерывный звуковой сигнал, даже когда вы печатаете в окне редактирования, тоже подается звуковой сигнал, т.к. есть паузы между набором символов.
  • Теперь, когда мы убедились, что введенный нами код работает, модифицируем нашу программу так, чтобы она меняла значение в окне редактирования на 1 через каждые 50 и 500 миллисекунд.
  • Измените код в функции OnIdle следующим образом. BOOL CTaskApp::OnIdle(LONG lCount)
    {
    ////-Мой код начинается здесь-////

    /*Вызвать функцию базового класса СWinApp::OnIdle(), чтобы завершить его служебные задачи*/
    CWinApp::OnIdle(lCount);
    //Получить указатель на шаблон документа
    POSITION pos = GetFirstDocTemplatePosition();
    CDocTemplate* pDocTemplate=GetNextDocTemplate(pos);


    //Получить указательна документ
    pos=pDocTemplate->GetFirstDocPosition();
    CDocument* pDoc=pDocTemplate->GetNextDoc(pos);


    //Получить указатель на представление
    pos=pDoc->GetFirstViewPosition();
    CTaskView* pView=(CTaskView*) pDoc->GetNextView(pos);


    //Переменные для хранения времени
    static DWORD PrevTimeTask1=0;
    static DWORD PrevTimeTask2=0;


    //Получить Текущее время
    DWORD CurrentTime=GetTickCount();


    //Получить данные от элементов уравления
    pView->UpdateData(TRUE);

    //Если время превысило 50 мс, то прибавить 1
    if(CurrentTime>PrevTimeTask1+50 &&
    pView->m_EnableTask1Check)
    {
    pView->m_Task1Edit=pView->m_Task1Edit+1;
    pView->UpdateData(FALSE);
    PrevTimeTask1=CurrentTime;
    }

    //Если время превысило 500 мс и cчетчик включен, то прибавить 1
    if(CurrentTime>PrevTimeTask2+500 &&
    pView->m_EnableTask2Check)
    {
    pView->m_Task2Edit=pView->m_Task2Edit+1;
    pView->UpdateData(FALSE);
    PrevTimeTask2=CurrentTime;
    }
    return TRUE;

    ////-Мой код заканчивается здесь-////

    }

    Вначале первой конструкцией операторов вы получаете указатель на представление, т.к. вам необходимо изменять содержимое элементов управления.

    Затем вы вводите две статические переменные, которые будут хранить время последнего прибавления единицы, если времени прошло больше 50 и 500 мс, то прибавляется едница, и окно редактирования обновляется.
    Так же в условии мы проверяем, чтобы отметка флажка Enable была включена, иначе счетчик не должен работать.
    Вот и вся программа, на ее примере вы научились выполнять фоновые задачи.

    [Назад] [Содержание]
    Hosted by uCoz



    Смотрите также:



    Hosted by uCoz