Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обновить окно, рисование в окне 
:(
    Опции темы
jimbo
Дата 3.6.2010, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



Привет всем!

Пишу на WINAPI. среда MSVS08.

На диалог кидаю Picture control(РС) В сообщении диалога wm_paint рисую на этом РС"е количество палочек в зависимости от количества минут. Для этого, запускаем потом параллельный, в которром смотрим текущее время и если минута изменилась, то надо рисовать. Посылаю сооббщение WM_PAINT своему РС:

Код

DWORD WINAPI Thread(LPVOID lp)
{
HWND hDlg = (HWND)lp;
SYSTEMTIME time;
GetLocalTime(&time);
while(1)
{
Sleep(1000);
SYSTEMTIME tmp;
GetlocalTime(&tmp);
if(tmp.wMinute !=time.wMinute)
{
SendMessage(hDlg,WM_PAINT,0,0);
time = tmp;
}
}
return 0;
}


Собственно все нормально рисуется. но когда приходит следующий wm_paint, старая картинка не стирается, а поверх нее рисуется новая. Скажите, как удалить старую, чтобы у меня не получалась каша? Пробовал
 
Код

InvalidateRect(GetDlgItem(hDlg,IDC_STATIC_PC),0,TRUE);

что-то вообще перестало рисоваться. Как правильно заставить отрисовывать линии ?:(
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
586
Дата 3.6.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Закрась старую картинку функцией FillRect.
PM   Вверх
GremlinProg
Дата 4.6.2010, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



+ не надо из потока посылать WM_PAINT,
в потоке нужно вызвать только InvalidateRect( hDlg, NULL, TRUE );


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
jimbo
Дата 4.6.2010, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



Спасибо за совет.

Исправил тем, что рисовал каждую секунду. 
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
jimbo
Дата 4.6.2010, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 18.6.2009
Где: Южно-Сахалинск

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



Цитата(GremlinProg @  4.6.2010,  08:22 Найти цитируемый пост)
в потоке нужно вызвать только InvalidateRect( hDlg, NULL, TRUE ); 


ничего не рисуется вообще( 

Если SendMessage(hDlg,WM_PAINT,0,0) перенести до Sleep(1000) то все нормально отрисовывается.smile
--------------------
Я не играю в шахматы - в шахматах я борюсь. А.А.Алехин
PM MAIL WWW   Вверх
xvr
Дата 4.6.2010, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(jimbo @  4.6.2010,  09:32 Найти цитируемый пост)
ничего не рисуется вообще( 
Видимо основной поток не крутит цикл выборки сообщений (GetMessage/DispatchMessage)


PM MAIL   Вверх
GremlinProg
Дата 4.6.2010, 12:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



jimbo, показывай код


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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