Студопедия

КАТЕГОРИИ:

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

Связывание событий с элементами управления




Связывание кода с событием BN_CLICKED кнопки Exit

При нажатии на кнопку Exit программа Draw.Exe завершится.

§ Чтобы связать код с событием BN_CLICKED кнопки EXIT, выполните следующие действия:

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

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

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

· Class Name: CDrawDlg

· Object ID: IDC_EXIT_BUTTON

· Messages: BN_CLICKED

· Щелкните на кнопку Add Fucntion и в раскрывшемся окне нажмите кнопку OK.

· Сейчас ваша панель MFC ClassWizard должна будет выглядеть так:

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

Void CDrawDlg::OnExitButton()

{

// TODO: Add your control notification handler code here

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

OnOK();

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

}

§ Функция OnOK(), которую вы ввели, завершает программу, при нажатии на кнопку Exit.

Связывание кода с событием WM_MOUSEMOVE диалоговой панели

Сейчас мы свяжем код с событием WM_MOUSEMOVE, которое будет автоматически выполняться при передвижении мыши.

§ Чтобы связать код с событием WM_MOUSEMOVE диалоговой панели, выполните следующие действия:

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

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

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

· Class Name: CDrawDlg

· Object ID: CDrawDlg

· Messages: WM_MOUSEMOVE

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

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

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(0,0,0));

}

//конец структуры IF

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

///....

§ Код который вы ввели, содержит единственный оператор IF:

· Оператор IF содержит в себе функции, которые будут выполняться, если условие оператора IF верно. Условие таково, если левая кнопка мыши нажата и произошло перемещение, то функции внутри оператора IF выполняются.

· Функция OnMouseMove выполняется при любом передвижении мыши, ее параметр nFlags показывает, была ли нажата какая-нибудь клавиша клавиатуры (типа ALT или Shift) и кнопка мыши. Операция & проверяет, нажата ли левая кнопка мыши при ее перемещении. Если это так, то выполняется код внутри оператора IF.

· Код в блоке оператора IF CClientDC dc(this); создает объект контекстного устройства, c помощью него вы сможете рисовать, его можно назвать воображаемым экраном в памяти компьютера. Научно говоря, dc(this) - это экземпляр класса CClientDC c параметром конструктора this, с помощью экземпляра класса вы можете обращаться к функциям этого класса.

· Следующий оператор, который вы напечатали, рисует точку в заданном месте (место щелчка мыши), используя параметры point.x и point.y, которые ему передает функция OnMouseMove, и заданного цвета, с помощью функции RGB();.

· Сейчас у нас установлен черный цвет, чтобы установить красный, синий или зеленый, надо заменить параметры функции RGB() соответственно на 255,0,0, 0,255,0, 0,0,255.

Рисование изображения точка за точкой

Чтобы увидеть в действии свой код, выполните следующие действия:

§ Скомпонуйте и скомпилируйте программу.

§ Запустите ее.

§ Удерживая нажатой левую кнопку мыши, перетащите ее в сторону.

· Вы видите, что точки рисуются не слитно друг с другом, это происходит по тому, что WINDOWS должен выполнять и другие задачи и не может полностью следить за Draw. Поэтому мы модифицируем нашу программу, так чтобы эти точки соединялись линиями.

· При выполнении функции OnMouseMove параметр point передает положение курсора во время последней проверки его положения.

Расширение возможностей программы DRAW

Сейчас мы расширим возможности программы Draw. Сделаем так, чтобы при передвижении мыши, рисовалась сплошная линия.

§ Модифицируем программу следующим образом.

· Чтобы соединить точки линией, функция OnMouseMove должна знать предыдущие координаты мыши, для этого нам нужно объявить две переменные m_PrevX и m_PrevY, для хранения координат по X и Y.

· Выведем на экран файл DrawDlg.h, для этого откроем Project Workspace, щеклнем на закладке File View и выполним двойной щелчек на пункте DrawDlg.h.

· Включите объявления переменных m_PrevX и m_PrevY следующим образом:

// DrawDlg.h : header file

//

////////////////////////////////////////////////////

// CDrawDlg dialog

Class CDrawDlg : public CDialog

{

// Construction

public:

CDrawDlg(CWnd* pParent = NULL); // standard constructor

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

int m_PrevX;

int m_PrevY;

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

//....

//....

}

· Вы объявили две переменные целого типа для хранения предыдущих координат мыши. Заметьте, что вы их включили после слова public: - это означает, что эти переменные доступны всем функциям класса.

§ Теперь модифицируем функцию OnMouseMove в файле DrawDlg.cpp










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

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