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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.05.2012, 18:46   #1
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию FillRgn не рисует

С помощью FillRgn должны рисоваться фигуры
По брейкпойнтам видно что функциии работают, а вот результата нет .. фигуры не появляются
Код:
class data{
 public:
	 int color;
	 int fig;
	 int rotation;
	 double t;
	 POINT triangle_coordinates[3];
	 POINT rectangle_coordinates[4], ellipse_coordinates;

	 data(){
		 color=10006;
		 fig=10001;
		 rotation=0;
		 t=0;

		 triangle_coordinates[0].x=XCENTER+200*sin(t);
	     triangle_coordinates[0].y=YCENTER+200*cos(t);
		 triangle_coordinates[1].x=XCENTER+100*sin(t);
	     triangle_coordinates[1].y=YCENTER+100*cos(t);
		 triangle_coordinates[2].x=XCENTER+200*sin(t);
	     triangle_coordinates[2].y=YCENTER+200*cos(t);

		 rectangle_coordinates[0].x=XCENTER+200*sin(t);
	     rectangle_coordinates[0].y=YCENTER+200*cos(t);
		 rectangle_coordinates[1].x=XCENTER+200*sin(t);
	     rectangle_coordinates[1].y=YCENTER+200*cos(t);
		 rectangle_coordinates[2].x=XCENTER+200*sin(t);
	     rectangle_coordinates[2].y=YCENTER+200*cos(t);
		 rectangle_coordinates[3].x=XCENTER+200*sin(t);
	     rectangle_coordinates[3].y=YCENTER+200*cos(t);

		
	 }
	 ...
	 void step(){
		 if(rotation){
		 t+=PI/5;

		 triangle_coordinates[0].x=XCENTER+200*sin(t);
	     triangle_coordinates[0].y=YCENTER+200*cos(t);
		 triangle_coordinates[1].x=XCENTER+100*sin(t);
	     triangle_coordinates[1].y=YCENTER+100*cos(t);
		 triangle_coordinates[2].x=XCENTER+200*sin(t);
	     triangle_coordinates[2].y=YCENTER+200*cos(t);

		 rectangle_coordinates[0].x=XCENTER+200*sin(t);
	     rectangle_coordinates[0].y=YCENTER+200*cos(t);
		 rectangle_coordinates[1].x=XCENTER+200*sin(t);
	     rectangle_coordinates[1].y=YCENTER+200*cos(t);
		 rectangle_coordinates[2].x=XCENTER+200*sin(t);
	     rectangle_coordinates[2].y=YCENTER+200*cos(t);
		 rectangle_coordinates[3].x=XCENTER+200*sin(t);
	     rectangle_coordinates[3].y=YCENTER+200*cos(t);
		 }

		 
	 }
 }; 
 data a;
...

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
...
red=CreateSolidBrush(RGB(255,0,0));
   green=CreateSolidBrush(RGB(0,255,0));
   blue=CreateSolidBrush(RGB(0,0,255));

   triangle=CreatePolygonRgn(a.triangle_coordinates,3,ALTERNATE);
   rectangle=CreatePolygonRgn(a.rectangle_coordinates,4,ALTERNATE);
   ellipse=CreateEllipticRgn(50,50,600,450);
...
case WM_PAINT:
...
switch(a.color){
		case RED:
			tmp=red;
			break;
		case GREEN:
			tmp=green;
			break;
		case BLUE:
			tmp=blue;
			break;
		}
		switch(a.fig){
		case ELLIPSE:
			FillRgn(hdc,ellipse,tmp); 
			break;
		case TRIANGLE:
			FillRgn(hdc,CreatePolygonRgn(a.triangle_coordinates,3,ALTERNATE),CreateSolidBrush(RGB(255,0,0))); 
			break;
		case RECTANGLE:
			FillRgn(hdc,rectangle,tmp); 
			break;
		}
...
case WM_TIMER:
		a.step();
                InvalidateRect(hWnd,rect_for_painting,1);
...
Как видно пробовал создавать кисть и регион в самом вызове функции FillRgn, не работает ни в каком варианте
Еще фон поставлен зелененький
Код:
ATOM MyRegisterClass(HINSTANCE hInstance)
{
	WNDCLASSEX wcex;
	HBRUSH backgr;
	backgr=CreateSolidBrush(RGB(150,255,0));
	wcex.cbSize = sizeof(WNDCLASSEX);

	wcex.style			= CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc	= WndProc;
	wcex.cbClsExtra		= 0;
	wcex.cbWndExtra		= 0;
	wcex.hInstance		= hInstance;
	wcex.hIcon			= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MY7));
	wcex.hCursor		= LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground	= //backgr;
	wcex.lpszMenuName	= MAKEINTRESOURCE(IDC_MY7);
	wcex.lpszClassName	= szWindowClass;
	wcex.hIconSm		= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

	return RegisterClassEx(&wcex);
}
Но его пробовал убирать все равно ничего не рисуется
Перерисовка области работает, видно по моргающей рамке в которой должны быть фигуры
Где проблема закопана ?

Последний раз редактировалось Jugger; 21.05.2012 в 18:55.
Jugger вне форума Ответить с цитированием
Старый 21.05.2012, 19:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

проверять на результат, а потом GetLastError.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.05.2012, 20:44   #3
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Проверил
Сам FillRgn возвращает 1
GetLastError возвращает 0
Jugger вне форума Ответить с цитированием
Старый 23.05.2012, 14:27   #4
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Насколько я понимаю это говорит о том что функция отработала нормально и без ошибок
Подскажите чего в этих случаях делать ? Как дальше отлаживать ? А то я все мне известные способы перепробовал
Jugger вне форума Ответить с цитированием
Старый 23.05.2012, 17:14   #5
Jugger
Пользователь
 
Регистрация: 30.01.2008
Сообщений: 99
По умолчанию

Всё, разобрался
Закрашиваемые регионы были линиями
То есть в случае с треугольником три точки на одной линии
А с четырехугольником неправильный порядок точек в массиве координат наверное, потому что потыкавшись я заметил моргающие две линии крест накрест
Дело было в координатах
Jugger вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не рисует на форме (Delphi) SL1M_DOGG Помощь студентам 2 22.12.2011 16:16
directdraw не рисует... ros.pro Мультимедиа в Delphi 5 01.06.2011 19:58
ImageEn. Рисует в стороне. i.pas Мультимедиа в Delphi 2 21.07.2010 15:37
Не рисует наследуемый класс. TwiX Общие вопросы Delphi 7 03.10.2009 11:59
Паскаль не рисует! fire_on Паскаль, Turbo Pascal, PascalABC.NET 26 11.08.2009 18:20