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

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

  Все выпуски  

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


Продолжаем писать программу:).

     Какие недочеты видны невооруженным взглядом? Во-первых, вертикальная полоса прокрутки - надо убрать. А во-вторых непонятно, сколько времени осталось до перерыва, а когда перерыв настал непонятно сколько это окно еще будет висеть:))) Еще нужно убрать меню эксплорера и при вызове окна настроек переносить фокус сразу на него. И еще нет автозапуска при старте операционки. Да и инсталяшку надо бы написать:) Да, дел много:)
     Что касается показа времени: сколько осталось до завершения перерыва и интервала между перерывами. Время нужно показывать, не обязательно с точностью до секунды, но показывать:) Сравните обычные светофоры и светофоры, которые показывают сколько времени будет гореть красный/зеленый цвет. Пользоваться вторыми намного удобнее. Поэтому, сделаем таким образом: изменим нашу иконку программы, так чтобы можно было хотя бы приблизительно определить где мы находимся (во временном интервале). Я сделал такие иконки:

иконки


Также при наведении курсора мыши на иконку показывается точное время до начала перерыва или его конца. Код для изменения иконки и текста при наведении мыши.

void CWaterEyeKeeperDlg::ModifyIcon(CString _new_text, int _qu)
{
    NOTIFYICONDATA nf;
    memset(&nf, 0, sizeof(nf));
    nf.cbSize = sizeof(nf);

    nf.hWnd = m_hWnd;
    nf.uID = NULL;
   
    nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nf.uCallbackMessage = WM_MYICONNOTIFY;
    strcpy(nf.szTip,_new_text);
   
    HICON hIcon;
   
    switch(_qu)
    {
    case 0:
        hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);   
        break;
    case 1:
        hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);   
        break;
    case 2:
        hIcon=AfxGetApp()->LoadIcon(IDI_ICON2);   
        break;
    case 3:
        hIcon=AfxGetApp()->LoadIcon(IDI_ICON3);   
        break;
    case 4:
        hIcon=AfxGetApp()->LoadIcon(IDI_ICON4);   
        break;


    }
   
    nf.hIcon = hIcon;
    Shell_NotifyIcon(NIM_MODIFY,&nf);

    DestroyIcon(hIcon);

}

Изменим
OnTimer для  подсчета количества часов, минут и секунд до начала/окончания перерыва и подсчитаем какую иконку показывать.

void CWaterEyeKeeperDlg::OnTimer(UINT nIDEvent)
{
    m_sec_count++;

   
    if (m_dlg_splash.IsWindowVisible() == false)
    {
        int _rest = m_minutes_delay_between_rest * 60 - m_sec_count;
       
        int _sec = _rest % 60;
        int _minuts = (_rest/60)%60;
        int _hour = _rest/3600;

        CString str;
        str.Format("До перерыва осталось %d час(ов) %d минут(ы) %d секунд(а,ы)", _hour, _minuts, _sec);

        ModifyIcon(str, 4*(m_sec_count)/(m_minutes_delay_between_rest * 60) );
       
        if (m_sec_count > m_minutes_delay_between_rest * 60)
        {
            m_dlg_splash.SplashShow();
            m_sec_count = 0;
        }
    }
    else
    {
        int _rest = m_minutes_rest_time * 60 - m_sec_count;

        int _sec = _rest % 60;
        int _minuts = (_rest/60)%60;
        int _hour = _rest/3600;
       
        CString str;
        str.Format("До окончания перерыва осталось %d час(ов) %d минут(ы) %d секунд(а,ы)", _hour, _minuts, _sec);

       
        ModifyIcon(str, 4*(m_sec_count)/(m_minutes_rest_time * 60) );

        if (m_sec_count > m_minutes_rest_time * 60)
        {
            m_dlg_splash.SplashHide();
            m_sec_count = 0;
        }

    }
   
   
    CDialog::OnTimer(nIDEvent);
}


Для того, чтобы не было полос прокрутки можно пойти двумя путями: копаться в настройках WebBrowser или написать на html. Второй путь проще. Пойдем пока по нему.

<html>
<head>

<style type="text/css">
html,body {
overflow: auto;
}
</style>

</head>
<body>
<table width=100% height=100% border=0>
<tr><td>
<center>
<img src="cup.png" align="middle">
</center>
</td></tr>
</table>
</body>
</html>

На сегодня все:) Загружайте исходники, смотрите, пишите:)
Скачать исходники.

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


В избранное