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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2011, 12:25   #1
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость Visual C++

Помогите пожалуйста разобраться с проблемкой!

Эта функция должна рисовать при нажатой левой кнопке мыши непрерывную красную кривую, а при нажатой правой- зеленую!

Все вроде бы ничего, но после того, как нарисовал зеленую кривую, отжал кнопку, передвинул курсор, опять нажал на ту же кнопку, прорисовалась прямая от предыдущей конечной позиции рисования до новой!

Прикол в том, что с левой кнопкой все ОК!

Код:
void CMouseDlg::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: Add your message handler code here and/or call default
	// Выяснить, нажата ли левая кнопка мыши
	
	if((nFlags & MK_LBUTTON) == MK_LBUTTON){
		// Создать объект контекста устройства
		CClientDC dc(this);
		// Создать новое перо (solid, 10 pixels, red)
		CPen newPen(PS_SOLID,
					10,
					RGB(255, 0, 0));
		// Установить новое перо текущим
		dc.SelectObject(&newPen);
		

		// Нарисовать точку в текущей позиции курсора
	//	dc.SetPixel(point.x, 
	//				point.y, 
	//				RGB(0, 0, 0));
		// Провести линию от предыдущей точки до текущей
		dc.MoveTo(m_iPrevX, m_iPrevY); // поместить графический курсор
		dc.LineTo(point.x, point.y); // рисовать до текущей
	
		// Обновить предыдущую точку для нового кванта времени
		m_iPrevX = point.x;
		m_iPrevY = point.y;
	}
	else{
		// Выяснить, нажата ли левая кнопка мыши
	if((nFlags & MK_RBUTTON) == MK_RBUTTON){
		// Создать объект контекста устройства
		CClientDC dc(this);
	
		// Создать новое перо (solid, 10 pixels, red)
		CPen newPen(PS_SOLID,
					10,
					RGB(0, 255, 0));
		// Установить новое перо текущим
		dc.SelectObject(&newPen);
		
		// Нарисовать точку в текущей позиции курсора
		//	dc.SetPixel(point.x, 
		//				point.y, 
		//				RGB(0, 0, 0));
	
		// Провести линию от предыдущей точки до текущей
		dc.MoveTo(m_iPrevX, m_iPrevY); // поместить графический курсор
		dc.LineTo(point.x, point.y); // рисовать до текущей
	
		// Обновить предыдущую точку для нового кванта времени
		m_iPrevX = point.x;
		m_iPrevY = point.y;
	}
	}

	CDialog::OnMouseMove(nFlags, point);
}
Если не понятно разьяснил, то вот исходник!
Вложения
Тип файла: rar Mouse.rar (3.50 Мб, 10 просмотров)

Последний раз редактировалось sir.andrey; 17.08.2011 в 12:33.
sir.andrey вне форума Ответить с цитированием
Старый 17.08.2011, 12:30   #2
sir.andrey
Форумчанин
 
Регистрация: 06.12.2009
Сообщений: 380
Радость

Вот пример выполнения программы:
sir.andrey вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual C++, Visual C#, Visual basic .Net, или Microsoft.Net Что лучше? _PROGRAMM_ Общие вопросы .NET 14 10.10.2012 19:24
Среда разработки Visual C (альтернатива Visual Studio) plyeh Visual C++ 5 25.06.2010 16:27
Проблема с windows visual styles в Visual studio 2008 express. [awa Visual C++ 2 09.01.2010 06:05
Как перевести проект из Visual C++ 2003 в Visual C++ 2008? iukash Visual C++ 8 17.04.2009 22:36
Visual c++ 2005 и Visual c++ 6 это разные версии или нет? Руслантус Свободное общение 3 30.11.2007 19:42