ArtikSlayer
@ArtikSlayer
Ещё тот лентяй.

Обработка событий при нажатии левой кнопки мыши?

Здравствуйте. Есть файлы формата png, которые выгружаются в окно на определённые координаты. Также есть линии.

bd9303b6683541e8a4d50b00c0bdf625.jpg

Вопрос: Как сделать обработчик событий, чтобы при клике на определённую картинку-руку линии меняли цвет на нужный.

View моего проекта.

void CRPSView::OnDraw(CDC* pDC)
    {
    	CRPSDoc* pDoc = GetDocument();
    	ASSERT_VALID(pDoc);
    	if (!pDoc)
    		return;
    
    	/*CBrush br;
    	CBrush* br_st;*/
    
    	CPen pen;
    	CPen* pen_st;
    
    	/*CFont font;
    	CFont* font_st;*/
    
    	CRect rect;
    	this->GetClientRect(&rect);
    	CImage C;
    	CDC mem;
    	CBitmap bm;
    	BITMAP bb;
    	mem.CreateCompatibleDC(pDC);
    
    
    	if (draw == 1)
    	{
    
    		C.Load(L"1.png");
    		bm.Attach(C);
    		mem.SelectObject(&bm);
    		bm.GetBitmap(&bb);
    		int q, e;
    		q = (rect.Width() - bb.bmWidth) / 4;//спок
    		e = (rect.Height() - bb.bmHeight)/2;
    		pDC->BitBlt(q, e, bb.bmWidth, bb.bmHeight, &mem, 0, 0, SRCCOPY);
    
    		C.Load(L"2.png");
    		bm.Attach(C);
    		mem.SelectObject(&bm);
    		bm.GetBitmap(&bb);
    		int x, y;
    		x = (rect.Width() - bb.bmWidth) / 2;//камень
    		y = (rect.Height() - bb.bmHeight) * 0;
    		pDC->BitBlt(x, y, bb.bmWidth, bb.bmHeight, &mem, 0, 0, SRCCOPY);
    
    		C.Load(L"3.png");
    		bm.Attach(C);
    		mem.SelectObject(&bm);
    		bm.GetBitmap(&bb);
    		int w, r;
    		w = (rect.Width() - bb.bmWidth) / 2.5;//ящерица
    		r = (rect.Height() - bb.bmHeight);
    		pDC->BitBlt(w, r, bb.bmWidth, bb.bmHeight, &mem, 0, 0, SRCCOPY);
    		
    		C.Load(L"4.png");
    		bm.Attach(C);
    		mem.SelectObject(&bm);
    		bm.GetBitmap(&bb);
    		int t, u;
    		t = (rect.Width() - bb.bmWidth)/1.3;//ножницы
    		u = (rect.Height() - bb.bmHeight)/2;
    		pDC->BitBlt(t, u, bb.bmWidth, bb.bmHeight, &mem, 0, 0, SRCCOPY);
    		
    		C.Load(L"5.png");
    		bm.Attach(C);
    		mem.SelectObject(&bm);
    		bm.GetBitmap(&bb);
    		int o, p;
    		o = (rect.Width() - bb.bmWidth) / 1.6;//бумага
    		p = (rect.Height() - bb.bmHeight);
    		pDC->BitBlt(o, p, bb.bmWidth, bb.bmHeight, &mem, 0, 0, SRCCOPY);
    
    		pen.CreatePen(PS_SOLID, 7, RGB(0, 0, 255));
    		pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 2.2, rect.bottom / 4);
    		pDC->LineTo(rect.right / 3.1, rect.bottom / 2.6);
    		pen.DeleteObject();
    
    		pen.CreatePen(PS_SOLID, 7, RGB(0, 0, 255));
    		pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 3.1, rect.bottom / 1.34);
    		pDC->LineTo(rect.right / 1.4, rect.bottom / 1.34);
    		pen.DeleteObject();
    
    		pen.CreatePen(PS_SOLID, 7, RGB(0, 0, 255));
    		pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 1.4, rect.bottom / 1.34);
    		pDC->LineTo(rect.right / 2, rect.bottom / 12);
    		pen.DeleteObject();
    
    		/*pen.CreatePen(PS_SOLID, 7, RGB(117, 187, 253));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 2.6, rect.Height() / 10);
    		pDC->LineTo(rect.right / 1.4, rect.bottom / 2.1);
    		pen.DeleteObject();*/
    
    		/*pen.CreatePen(PS_SOLID, 7, RGB(117, 187, 253));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 1.4, rect.bottom / 2.1);
    		pDC->LineTo(rect.right / 2.6, rect.bottom / 1.1);
    		pen.DeleteObject();
    
    		pen.CreatePen(PS_SOLID, 7, RGB(117, 187, 253));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 2.6, rect.bottom / 1.1);
    		pDC->LineTo(rect.right / 2.6, rect.Height() / 10);
    		pen.DeleteObject();*/
    
    		/*pen.CreatePen(PS_SOLID, 7, RGB(216, 133, 25));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 1.6, rect.Height() / 10);
    		pDC->LineTo(rect.right / 3.4, rect.bottom / 2.1);
    		pen.DeleteObject();*/
    
    		/*pen.CreatePen(PS_SOLID, 7, RGB(216, 133, 25));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 3.4, rect.bottom / 2.1);
    		pDC->LineTo(rect.right / 1.6, rect.bottom / 1.1);
    		pen.DeleteObject();
    
    		pen.CreatePen(PS_SOLID, 7, RGB(216, 133, 25));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 1.6, rect.bottom / 1.1);
    		pDC->LineTo(rect.right / 1.6, rect.Height() / 10);
    		pen.DeleteObject();
    
    		pen.CreatePen(PS_SOLID, 7, RGB(0, 100, 0));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 3.2, rect.Height() / 4);
    		pDC->LineTo(rect.right / 1.4, rect.Height() / 4);
    		pen.DeleteObject();*/
    
    		pen.CreatePen(PS_SOLID, 7, RGB(0, 100, 0));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 1.4, rect.Height() / 4);
    		pDC->LineTo(rect.right / 2, rect.bottom / 1.09);
    		pen.DeleteObject();
    
    		pen.CreatePen(PS_SOLID, 7, RGB(0, 100, 0));
    		pen_st = pDC->SelectObject(&pen);
    		pDC->MoveTo(rect.right / 2, rect.bottom / 1.09);
    		pDC->LineTo(rect.right / 3.2, rect.Height() / 4);
    		pen.DeleteObject();
    		
    	}
    	// TODO: добавьте здесь код отрисовки для собственных данных
    }

    ...
    
    void CRPSView::OnRps()
    {
    	draw = 1;
    	Invalidate();
    	// TODO: добавьте свой код обработчика команд
    }
  • Вопрос задан
  • 286 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Caitiff_One
Обычный человек, начинающий разработчик:)
я бы сделал класс для линий, с методом отрисовками и параметрами - цветом и координатами начала и конца:) а дальше получаешь соответственно координаты, определяешь какую линию нужно изменить и меняешь ей цвет:D отрисовку сделать в цикле и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы