Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 23:14   #1
CrazyN00b
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 11
По умолчанию основы работы с сообщ. WM_PAINT и WM_COMMAND (uberlame))

Обьясните, что я делаю не так. Есть простенькая функция рисования двух кусочков пирога
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
RECT rt;
GetClientRect(hWnd, &rt);
SelectObject(hdc, hBrush);
DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
Pie(hdc, 10,20,500,300,20,50,30,300);
SelectObject(hdc,hBrush3);
Pie(hdc, 10,20,500,300,200,200,300,400);

DeleteObject(hBrush);
DeleteObject(hBrush3);
EndPaint(hWnd, &ps);
Браши созданы в начале WndProc и делают пироги красным и синим. Теперь я пытаюсь перерисовать пироги с помощью выбора опции в меню:
case IDM_FILE_GREEN:
....
InvalidateRect(hWnd,NULL,TRUE);
break;
Как это сделать? Поменять браш не получается,т.к. в WM_PAINT он снова ставится старым. При попытке получать контекст в начале с помощью hdc=GetDC(hWnd); тоже фейл. Помогите плз.
п.с. Если не трудно, то подскажите, как аналогичным образом изменять размеры пирогов (выбором размера в меню)
CrazyN00b вне форума Ответить с цитированием
Старый 08.04.2010, 23:22   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Окно очень часто получает WM_PAINT
обработка другого цвета должна идти в самом обработчике WM_PAINT. Заводишь какую-нибудь переменную типа bool IsGreen. При выборе в менб выставляешь ее в TRUE, а в обработчике WM_PAINT рисуешь нужным цветом после проверки на IsGreen. Та же петрушка и с размером
Д'якон вне форума Ответить с цитированием
Старый 08.04.2010, 23:28   #3
CrazyN00b
Пользователь
 
Регистрация: 25.02.2008
Сообщений: 11
По умолчанию

OMG спасибо за быстрый ответ!
CrazyN00b вне форума Ответить с цитированием
Старый 08.04.2010, 23:40   #4
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Не понял, а зачем вот это -

Код:
DeleteObject(hBrush);
DeleteObject(hBrush3);
в конце WM_PAINT ??

Цитата:
The DeleteObject function deletes a logical pen, brush, font, bitmap, region, or palette, freeing all system resources associated with the object. After the object is deleted, the specified handle is no longer valid.
А почему нельзя по IDM_FILE_GREEN - создать новые кисти, для этого контекст вроде вообще не нужен.

то что предложил Д'якон конечно самый правильный вариант, но почему нельзя пересоздать кисти по сообщению с меню - не понимаю.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контекст устройства. Основы работы с изображением Claster Win Api 1 03.04.2010 00:26
Основы FastReport Dima_mazhor БД в Delphi 31 13.12.2009 15:34
Основы работы с репозиторием. Что и как. TwiX Общие вопросы Delphi 2 27.11.2009 21:28
ADO основы... Roof БД в Delphi 14 10.12.2007 21:28