Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)⇐ ПредыдущаяСтр 43 из 43
{ // 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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |