Урок 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 была включена, иначе счетчик не должен работать.
  • Вот и вся программа, на ее примере вы научились выполнять фоновые задачи.

    Связывание элементов управления с событиями

    Назад


    НАЗАД К УРОКАМ




  • На главную






    Радио для всех
    ©
    Научно-популярный образовательный ресурс


    Создать сайт бесплатно