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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2010, 11:17   #1
Tesmont
Пользователь
 
Регистрация: 12.05.2009
Сообщений: 28
По умолчанию Рисование отдельным поток в классе. MFC. GDI+

Если я в цикле вызываю метод класса Car.ShowCar, передавая ему всё время новые координаты для рисования, то все работает. Но если я сделаю цикл на рисование в самом методе, то он уже ничего рисовать не хочет. Во время отладки увидел,
arg->g 0x003af0b0 {nativeGraphics=0x02b82f10 lastResult=ObjectBusy } Gdiplus::Graphics *
arg->g 0x003af0b0 {nativeGraphics=0x00000000 lastResult=InvalidParameter } Gdiplus::Graphics *
CCar
Код:
class CCar
{
public:
	CCar(void);
	~CCar(void);
	struct qwerty
	{
		int x, y;
		Graphics *g;
	}*arg;
	void ShowCar(Graphics *g, int x, int y);
	bool TypeOfMove, EndOfMove;
private:
	static unsigned __stdcall NewCar(void *arg);
};

CCar::CCar(void)
{
	arg = new qwerty();
}


CCar::~CCar(void)
{
}


void CCar::ShowCar(Graphics *g, int x, int y)
{
	unsigned int threadID;
	arg->g = g;
	arg->x = x;
	arg->y = y;
	_beginthreadex(NULL, 0, &NewCar, arg, 0, &threadID);
}


unsigned __stdcall CCar::NewCar(void *Parg)
{
	qwerty *arg = (qwerty *)Parg;
	Pen p(Color(255, 255, 0, 0));
	Pen p2(Color(255, 255, 255, 255));
	Point MyPoint[3];
	Point MyPoint2[3];
	while (arg->x <= 150)
	{
		MyPoint[0].X = arg->x;
		MyPoint[0].Y = arg->y;
		MyPoint[1].X = arg->x-5;
		MyPoint[1].Y = arg->y+5;
		MyPoint[2].X = arg->x-5;
		MyPoint[2].Y = arg->y-5;
		MyPoint2[0].X = arg->x-2;
		MyPoint2[0].Y = arg->y;
		MyPoint2[1].X = arg->x-7;
		MyPoint2[1].Y = arg->y+5;
		MyPoint2[2].X = arg->x-7;
		MyPoint2[2].Y = arg->y-5;
		arg->g->DrawPolygon(&p2, MyPoint2, 3);
		arg->g->DrawPolygon(&p, MyPoint, 3);
		arg->x++;
		arg->x++;
		SleepEx(30, FALSE);
	}
	return 0;
}
CThreadsCarDlg
Код:
void CThreadsCarDlg::OnBnClickedOk()
{
	CClientDC dc(this);
	dc.SetBkMode(TRANSPARENT);
	Graphics g(dc);
	CRect rect;
	GetWindowRect(&rect);
	int x, y;
	x = 50;
	y = 500/2 + 20;
	//while(x <= 500)
	//{
		cars->ShowCar(&g, x, y);
		x=x+2;
		SleepEx(30, FALSE);
	//}
}
Tesmont вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GDI+ рисование картинки с прозрачным бэкграундом sashonk Общие вопросы C/C++ 1 15.11.2010 22:40
Поток. Не получается создать поток. Выдает ошибки при запуске bigory Общие вопросы по Java, Java SE, Kotlin 3 23.09.2010 00:40
массив отдельным файлом Izlom Помощь студентам 2 31.05.2010 17:25
LPVOID и поток в MFC Sasha811 Visual C++ 2 13.07.2009 10:39
Вопрос по GDI+ (почитать в поток/буфер) CrazyProgramer Мультимедиа в Delphi 8 06.01.2009 23:41