Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Void CDrawDlg::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);

// dc.SetPixel(point.x, point.y, RGB(123,211,98));

CPen NewPen(PS_SOLID, 10, RGB(255,0,0) ;

dc.SelectObject(&NewPen);

dc.MoveTo(m_PrevX, m_PrevY);

dc.LineTo(point.x, point.y);

m_PrevX=point.x;

m_PrevY=point.y;

}

//////// Вводимый код заканчивается здесь///////////

CDialog::OnMouseMove(nFlags, point);

}

Рассмотрим приведенный выше код:

· Код вызова функции SetPixel(), помещен в комментарий, так как он нам больше не понадобиться.

· Следующий код CPen NewPen(PS_SOLID, 10, RGB(255,0,0) ) создает новое перо с именем NewPen класса CPen c заданным размером шрифта 10 пикселов и красным цветом. Параметр PC_SOLID говорит, что будет рисоваться сплошная линия.

· После этого выполняется функция SelectObject, выбирающая новое перо:

dc.SelectObject(&NewPen);

Этой функцией вы включаете перо в работу.

· Следующие два оператора:

dc.MoveTo(m_PrevX, m_PrevY);

dc.LineTo(point.x, point.y);

рисуют линию, используя координаты начала (это определяет функция MoveTo()) и координат конца (LineTo).

· И последние два оператора:

m_PrevX=point.x;

m_PrevY=point.y;

сохраняют в переменных m_PrevX и m_PrevY, текущие координаты, которые в следующий раз будут использоваться, как предыдущие (начальная позиция).

§ Теперь запустите программу и проверьте правильность ее работы.

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

§ Это выглядит примерно так:

§ Для решения этой проблемы, вы должны связать код с событием WM_LBUTTONDOWN, которое происходит при нажатии на левую кнопку мыши.

· Выберете ClassWizard в меню View

· Выберете закладку Message Maps в панели ClassWizard

· Используйте диалоговую панель ClassWizard для выбора следующего события:

· Class Name: CDrawDlg

· Object ID: CDrawDlg

· Messages: WM_LBUTTONDOWN

· Щелкните на кнопку Add Fucntion.

· Нажмите кнопку Edit Code и напишите следующий код в функции OnLButtonDown():

Void CDrawDlg::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

//////// Вводимый код начинается здесь///////////

m_PrevX=point.x;

m_PrevY=point.y;

//////// Вводимый код заканчивается здесь///////////

....

}

· Код, который вы ввели, обновляет значения переменных m_PrevX и m_PrevY, тем местоположением мыши, где был совершен щелчок по ее левой кнопке, соответственно при первом и последующих нажатиях кнопки, линия будет начинаться из данной точки нажатия.

· Поэкспериментируйте с программой Draw и щелкните на кнопку Exit для ее прекращения.

Мы закончили связывание событий с элементами управления.

 

Литература:

1. Т. Павловская C/C++. Программирование на языке высокого уровня: Учебник для вузов,1-е издание, Спб, "Питер", 2005.

2. С. Холзнер Visual C++ 6. Учебный курс, 2-е издание, Спб, "Питер", 2005.

3. А. Крупник Самоучитель C++ , 1-е издание, Спб, "Питер", 2004.

4. Гилберт А., Маккарти Р. Программирование на Visual C++ 6. Этюды профессионалов, М.: "Диафсофт", 2004.

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 311.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...