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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2015, 20:02   #1
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию Сдвиг фигуры Вправо(Влево)(GDI+,WinApi)

Здравствуйте подскажите что не так я делаю
есть фигура квадрат,при нажатие на кнопку вправо пересчитываю координаты и рисую заново картинку
Код:

Код:
class Draw
{
public:
	Draw(HWND hWnd);
	~Draw();
        void create_square();
	void draw_square();
	void count_coordinates_square(); 
    private:
	HWND draw_hWnd;
	HDC draw_hDC;
	RECT draw_size;
	PAINTSTRUCT draw_ps;
	Bitmap *draw_buffer;
	Graphics *draw_anything;
	Graphics *draw_temp;
        PointF Square_Point[5];
};
       void Draw::create_square() {
	Pen pen(Color(0, 255, 0));
	Pen *Square_pen = pen.Clone();
	PointF point_0(10,10);
	PointF point_1(10, 40);
	PointF point_2(40, 40);
	PointF point_3(40, 10);
	PointF point_4(10, 10);
	Square_Point[0] = point_0;
	Square_Point[1] = point_1;
	Square_Point[2] = point_2;
	Square_Point[3] = point_3;
	Square_Point[4] = point_4;
	draw_temp->DrawLines(Square_pen, Square_Point, 5);
}
Draw::Draw(HWND hWnd):draw_hWnd(hWnd)
{
	GetClientRect(hWnd, &draw_size);
	draw_hDC = GetDC(draw_hWnd);
	draw_anything = new Graphics(draw_hDC);
	draw_buffer = new Bitmap(draw_size.right, draw_size.bottom);
	draw_temp = new Graphics(draw_buffer);
}

Draw::~Draw()
{
	delete(draw_anything);
	delete(draw_buffer);
	delete(draw_temp);
	ReleaseDC(draw_hWnd, draw_hDC);
}
void Draw::draw_square() {
	count_coordinates_square();
	Pen pen(Color(0, 255, 0));
	Pen *Square_pen = pen.Clone();
	draw_temp->DrawLines(Square_pen, Square_Point, 5);
}
void Draw::count_coordinates_square() {
	PointF point_add(20, 0);
	for (int i = 0; i < 5; i++)
		Square_Point[i] = Square_Point[i] + point_add;
}
Само окно,и процесс обработки
Код:
bool Right = false, Left = false, Animation = false, Drawing = true;
Draw *anything;

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
	anything = new Draw(hWnd);
	switch (uMsg) {
	case WM_COMMAND: {
		if (LOWORD(wParam) == Button_Exit) {
			DestroyWindow(hWnd);
			PostQuitMessage(0);
		}
		if (LOWORD(wParam) == Button_Right) {
			Right = true;
			InvalidateRect(hWnd, NULL, TRUE);
			UpdateWindow(hWnd);
		}
		if (LOWORD(wParam) == Button_Left) {
			Left = true;
			InvalidateRect(hWnd, NULL, TRUE);
			UpdateWindow(hWnd);
		}
		break;
	}
	case WM_CLOSE: {
		DestroyWindow(hWnd);
		PostQuitMessage(0);
	}
	break;
	case WM_PAINT: {
			anything->BeginScene();
			anything->Clear(Color::Black);
			anything->count_coordinates_square();
			anything->create_square();
			anything->EndScene();
			if (Right) {
				anything->BeginScene();
				anything->Clear(Color::Black);
				anything->draw_square();
				anything->EndScene();
			}
			if (Left) {
				anything->BeginScene();
				anything->EndScene();
				Left = false;
			}
	}
	break;
	}
	return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
оно один раз переносит,а потом уже не работает
что то с координатами?или я не так передаю в пеинт команду?
Sterben вне форума Ответить с цитированием
Старый 18.12.2015, 22:08   #2
Sterben
Форумчанин
 
Аватар для Sterben
 
Регистрация: 01.03.2015
Сообщений: 118
По умолчанию

Разобрался,проблема была в координатах
Sterben вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать циклический сдвиг в массиве на к елементов вправо и влево на язеке с++???? zvir Общие вопросы C/C++ 7 13.11.2012 03:37
Перемещение компонента влево-вправо JDel Общие вопросы Delphi 3 20.12.2011 00:05
Скрипт - двигающаяся влево-вправо лента годов keen_ JavaScript, Ajax 2 08.12.2011 12:33
Движение влево вправо X@OC Общие вопросы по Java, Java SE, Kotlin 2 11.01.2011 20:24
КАК повернуть матрицу на 90 градусов вправо (или влево). RomT24 Помощь студентам 15 09.12.2009 10:52