Отправляет email-рассылки с помощью сервиса Sendsay

Школа программирования

  Все выпуски  

Школа программирования


Программа waterEyeKeeper (часть 2)

Продолжаем разговор:)
В последний раз мы закончили на том, что создали главное окно - оно же окно настроек. Следующий шаг - сделать большое всплывающее окно, которое будет мешать людям работать:) Это тоже будет диалоговое окно, только в отличие от главного окна, на это окно мы положим Эксплорер. В чем фишка этого хода, спросите вы? А фишка в еще одном правиле:)
Отделяй данные от их представления. Или разделяй и властвуй:) Положив окно эксплорера на свое окно, мы можем не заботиться о том, что там будет в конечном итоге. Мы можем писать программу дальше, сделав только заготовку html страницы. А потом, когда программа будет готова, можно будет менять html страницу, не изменяя кода нашего приложения. Причем заметьте, можно для увеличения производительности разделить разработку приложения, на два параллельных процесса. Один процесс - написание кода, а второй, по сути оформление. В этом есть еще и тот смысл, что человек, который хорошо пишет программы, обычно не очень хорошо оформляет. В этом нет ничего удивительного - это совершенно разные вещи, и оформлением, а точнее дизайном должен заниматься дизайнер. Когда таким образом объединяется труд людей, то получается больше, чем просто сумма их вложений. Но это я отвлекся:)))
Эксплорер в виндах - это activex. И это очень хорошо. Мы можем легко его задействовать. Для этого мы воспользуемся MFC.
Вообще для того, чтобы вставить ActiveX, можно пойти двумя путями (если речь идет о диалоге):)  Можно на диалоге щелкнуть правой кнопкой мыши и выбрать Insert ActiveX Control. А можно воспользоваться функциональностью, которую предоставляет класс CWnd. Если честно, я почти всегда пользовался вторым способом, просто потому что можно проверять наличие ActiveX - если он не создавался, можно было показать сообщение на месте ActiveX. Если же воспользоваться первым способом, то отсутствие ActiveX приводило к тому, что приложение просто не запускалось. К плюсам второго метода можно отнести и то, что он работает не только для диалога, но и для приложения, основанного на другом классе. К минусам же можно отнести достаточно нудную процедуру подключения и работы с событиями и использование MFC:))). Все это я опишу:)

Итак в StdAfx.h добавим такую строчку (Здесь и далее красным выделено, что нужно добавить)

#import <shdocvw.dll>

Создадим новый диалог, создадим класс для него, который назовем DLG_SPLASH. В нем добавим следующее

class DLG_SPLASH : public CDialog
{
private:
    CWnd m_wnd_browser;         
    CComPtr<IWebBrowser2> m_browser;  
   
public:
    DLG_SPLASH(CWnd* pParent = NULL);   // standard constructor
...
}

Для создания сделаем следущее

BOOL DLG_SPLASH::OnInitDialog()
{
    CDialog::OnInitDialog();
   
    CRect m_rect;
    GetClientRect(&m_rect);

    if (m_wnd_browser.CreateControl(__uuidof(WebBrowser),"Browser", WS_VISIBLE,
        m_rect,this,65000) == TRUE    )
    m_wnd_browser.GetControlUnknown()->QueryInterface(&m_browser);

   
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
}

Ничего особенно сложного:) В результате работы #import <shdocvw.dll> в папке Debug у нас создались два файла shdocvw.tlh и shdocvw.tli. Посмотрите их. В них можно найти название методов, событий - в общем все, что касается нашего ActiveX.

Итак мы имеем - два окна. Теперь нужно написать алгоритм работы программы (в идеале это конечно нужно делать в самом начале:).

1. При старте загружаем время между перерывами и время перерыва.
2. Прячем оба окна.
3. Запускаем таймер и счетчик.
4. Как только счетчик становится равен времени между перерывами, сбрасываем счетчик и показываем всплывающее окно.
5. Как только счетчик становится равен времени перерыва, сбрасываем счетчик и закрываем всплывающее окно.

Итак сухой остаток:) На данный момент у нас два окна и все....:))) Пока все:) В следующий раз мы будем реализовывать написанный алгоритм:)

С автором Вы можете связаться по этому адресу - programschool@inbox.ru

Архив на сайте http://www.programschool.tu2.ru/


В избранное