![]() |
|
|
![]()
|
|
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
привет всем.ПОМОГИТЕ!!!
все перепробовала. как изменять цвет диалогового окна с помощью CProgressCtrl?? как соотнести движение индикатора прогресса с изменением цвета клиентской области ,к примеру, от светлокрасного до темно-красного? и еще вопрос, можно ли сделать тоже самое с самим индикатором прогресса?чтобы цвет менялся от светлого к темному? за ранее спасибо! |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
А что именно пробовали? Тут способов в общем-то не так уж много - например, ловить WM_CTLCOLOR, либо WM_PAINT, смотря с какой цлью вы это окно создаете. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
вот пример.
по нажатию "ок" нужно, чтобы цвет клиентской области менялся void MyDlg::OnBnClickedOk() { cProgress.SetRange(0,255); // диапазон cProgress.SetPos(0); // позиция for (int x=0;x<=255;x++) // цикл { cProgress.SetPos(x); // меняем позицию Sleep(200); // задержка my_color.DeleteObject();// удаляем старую кисть my_color.CreateSolidBrush(RGB(x, 255, 0)); Invalidate(); } // TODO: добавьте свой код обработчика уведомлений } что не так?...когда запускаю, программа зависает.. что делать? Добавлено через 42 секунды так мне не просто цвет нужно поставить...нужно чтобы он менялся |
|||
|
||||
| triclosan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
надо добавить обработчик (возбуждается, на событие ОнКлик или ОнЧендж), который читает позицию ползунка и меняет цвет (чего захотите) на какой захотите хотите
|
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
triclosan не поняла вас..
|
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
AnnyLondon,
1. как вы используете кисть my_color? 2. что конкретно требуется в задании - зачем в цикле все время менять значения прогресса, это так требуется? 3. Не нужно делать Sleep() в цикле - вы этим "затыкаете" оконный поток примерно на 51 секунду, в течение этого времени ваше приложение не будет реагировать вообще ни на какие действия.. Короче, приведите все-таки более четко сформулированный текст задания - здается мне, что вы не совсем правильно его поняли. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Кроме прочего, пока работает ваш цикл, все мертво висит... Invalidate всего лишь помечает окно как нуждающееся в перерисовке, но перерисовано оно будет только на OnPaint, который, разумеется, пока работает цикл, не придет. Можно, конечно, вызывать UpdateWindow, но тоже нехорошо - все эти слипы действительно все намертво блокируют.
Если ты хочешь, чтобы по кнопке OK диалог плавно поменял цвета, сделай следующее. 1. По команде OK ставь таймер. 2. По команде таймера ставь новое положение движка, заказывай перерисовку (Invalidate) 3. В EraseBackgnd меняй кисть фона в соответствии с текущим положением движка... Конечно, раз все происходит в рамках диалога, проще не движок считывать, а завести управляющую переменную, которая будет и движение прогресса означать, и цвет кисти. Как-то так А красить прогресс-бар - через OwnerDraw только. Или проверить, поддерживает ли этот контрол CustomDraw -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
проще свой progress написать, не настолько сложный элемент ;) Перерисовать можно и в том цикле, который приведен в коде, вставив в него прокачку сообщений с помощью например вот такой функции:
Но еще раз говорю, скорее всего задание совсем не в этом состояло, но кому придет в голову в цикле гонять прогресс туда-сюда и еще цвет окна при этом менять? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| AnnyLondon |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
Earnest
с таймером все получилось, но теперь проблема с EraseBackgnd ...не все окно закрашивается.
![]() цвет меняется.то что нужно, только не вся область закрашивается. Добавлено через 14 минут и 32 секунды сделала так:
мерцает экран.... |
||||
|
|||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
||||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
AnnyLondon,
ClipChildren отключить пробовала? Если не получится, то тогда делай так. В OnEraseBkgnd оставь только return FALSE. А в обработчике OnPaint сделай вот что:
В этом случае тебе и кисть не нужна. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
когда прописываю в OnPaint б пишет, что pDC не определен, а сделать его как получаемое значение функцией нельзя....ошибку выдает(
|
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Не надо изобретать велосипед - пусть Студия сгенерирует обработчик WM_PAINT за вас. Контекст в вашем случае в этом обработчике будет получен так: CPaintDC dc(this); -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
AnnyLondon, это контролы под собой сами рисуют. Можно обрабатывать WM_CTLCOLOR и ставить кисть, соответствующую текущему фону. Или сделать контролы прозрачными, хотя последнее я не пробовала.
Буйная фантазия у вашего препода. Главное, очень жизненная задача. -------------------- ... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
мне все-таки до последнего кажется. что препод хотел закрашивать цвет не по таймеру и показанию прогресс бара, а по перетаскиванию ползунка или скроллбара, как-то так ;) Либо второй вариант - преподаватель немножко не того курнул ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |