![]() |
|
|
![]()
|
|
| 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 |
мне все-таки до последнего кажется. что препод хотел закрашивать цвет не по таймеру и показанию прогресс бара, а по перетаскиванию ползунка или скроллбара, как-то так ;) Либо второй вариант - преподаватель немножко не того курнул ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Конечно, оффтопик...
Нынешние преподы сильно от практики оторваны. Книжек начитались, в лучшем случае, а так, чтобы реальное что-то делать, да еще для реального (коммерческого), а не академического применения... нет таких, наверное. -------------------- ... |
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
да он вообще сумасшедший...он сам не знает, как это делается. специально для вас полное задание: "использовать классы панели инструментов (CToolBar), строки состояния (CStatusBar), всплывающих подсказок (CToolTrip), индикатора прогресса (CProgressCtrl). на основе этого создать диалоговое окно с панелью инструментов, состоящих из четырех кнопок ис подсказками и индикатором прогресса. ![]() в строке состояния отображаются координаты левой кнопки мыши. с помощью трех первых кнопок выбирается цвет в макросе rgb; сделать так, чтобы при нажатии ОК индикатор начал двигаться от 0 до конца. Движение индикатора соотнести с изменением выбранного цвета от светлых до темных тонов. При движении индикатора цвет клиенской области окна окрашивается в соответствующие цвета." и еще вопрос, как изменить цвет прогресса?я так и не поняла... |
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
сделала как сказали
всеравно мерцает.... |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Так, тут подробнее - каким образом мерцает - мерцает все окно, или только его части вокруг контролов, как на вашем рисунке? Если мерцает все окно, то осталось дело за малым - двойную буферизацию влепить ;) Про задание ясно, оно нежизненное, но придется выполнить, чтобы вам зачет поставили ;) -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
Dreamer_0x01, клиентская область мерзает...
|
|||
|
||||
| AnnyLondon |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 19.12.2010 Репутация: нет Всего: нет |
только там где расскрашиваю
|
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
AnnyLondon,
зажмите проект в архив, положите на файлообменник и ссылку мне в личку киньте. Попробую своими глазами посмотреть, что у вас за проблема. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Впрочем, ладно, потрачу на вас еще 10 минут.
Итак, создал проект в студии, добавил 10 строчек кода, реализвал тебуемый вам пример с перерисовкой окна, посмотрите, как сделано и доработайте свой проект в соответствиии с примером. Прикладываю файл к сообщению. Присоединённый файл ( Кол-во скачиваний: 7 )
ProgColor.rar 129,71 Kb-------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |