Поиск:

Ответ в темуСоздание новой темы Создание опроса
> "Дышащее" окно 
:(
    Опции темы
SeregaLBN
Дата 17.3.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 178
Регистрация: 3.10.2003
Где: Киев

Репутация: нет
Всего: нет



Есть диалог. Мне надо сделать чтобы окно 'дышало', т.е. чтобы плавненько, почти незаметно для пользователя, увеличивалось/умньшалось в размерах.
Я то сделал, но этот вариант никуда не годится - всё дёргано и ... некрасиво в общем.
Может кто-то предложит алгоритмик лучше этого:
Код

#define ID_TIMER_CHANGE_RESPIRE 335

void CDialogWait::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   // ...
   SetTimer(ID_TIMER_CHANGE_RESPIRE, 300, NULL);
}

void CDialogWait::OnTimer(UINT nIDEvent) 
{
   switch (nIDEvent) {
   case ID_TIMER_CHANGE_RESPIRE:
      {
         CRect rc; GetWindowRect(&rc);
         static CSize sizeOrig = rc.Size();
         static CSize sizeMax(sizeOrig.cx*130/100, sizeOrig.cy*130/100);
         static BOOL bIncrement = TRUE;
         if (bIncrement) {
            rc.InflateRect(1,1);
            if ((rc.Width() >= sizeMax.cx) || (rc.Height() >= sizeMax.cy)) bIncrement = FALSE;
         } else {
            rc.InflateRect(-1,-1);
            if ((rc.Width() <= sizeOrig.cx) || (rc.Height() <= sizeOrig.cy)) bIncrement = TRUE;
         }
         ::MoveWindow(m_hWnd, rc, TRUE);
      }
      break;
   }
   
   CDialog::OnTimer(nIDEvent);
}

PM MAIL   Вверх
podval
Дата 18.3.2005, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: нет
Всего: 62



Тема перенесена из раздела "Алгоритмы".
PM WWW ICQ   Вверх
Олег М
Дата 19.3.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: нет
Всего: 7



SeregaLBN, ну да, некрасиво. Я так понял, что надо бы чтоб контролы в диалоге на месте оставались, а рамка окна увеличивалась/уменшалась. Тогда нужно, кроме ::MoveWindow ещё и менять позиции всех конролов, т.к. они относительно верхнего-левого угла диалога. И лучше всё делать, наверное, не по таймеру, а в параллельном потоке
PM MAIL ICQ   Вверх
Vaulter
Дата 14.7.2005, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: нет
Всего: 22



обрабатывай WC_NCPAINT


--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.