Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Visual C++. MFC
Урок 5. Обработка сообщений

Давайте теперь сделаем так, что бы наша программа обращала внимание на наши действия. Например, что бы при щелчке мышкой выскакивал MessageBox.

Для этого в наш класс вставьте следующий строчки:

class CMyMainWnd : public CFrameWnd{
 
 public:
 
     CMyMainWnd(){
 
         Create(NULL,"My title");
 
     }
 
     afx_msg void OnLButtonDown(UINT, CPoint);
 
     DECLARE_MESSAGE_MAP()
 
 };

Далее после класса напишите

BEGIN_MESSAGE_MAP(CMyMainWnd, CFrameWnd)
 
 ON_WM_LBUTTONDOWN()
 
 END_MESSAGE_MAP()

И, наконец, в конце файла добавьте строки

CMyApp theApp;
 
 void CMyMainWnd::OnLButtonDown(UINT, CPoint){
 
     AfxMessageBox("Левая кнопка мыши");
 
 }

Откомпилируйте приложение. При нажатии левой кнопки мыши в окне должен выскочить MessageBox с надписью "Левая кнопка мыши".

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

Первое. Мы должны вставить в конец нашего класса макрос DECLARE_MESSAGE_MAP(). Это достаточно сделать один раз. Этат макрос в классе и означает, что этот класс будет реагировать на некоторые сообщения.

Второе. Мы должны где-то после класса добавить два макроса BEGIN_MESSAGE_MAP(...,...) и END_MESSAGE_MAP(). Это тоже достаточно сделать только один раз. Это так называемая карта сообщений. В первый макрос первым параметром вы должны вставить имя вашего класса, вторым - имя родительского класса. Первый параметр показывает, для какого класса мы пишем нашу карту сообщений, а второй - кто должен обрабатывать то или иное сообщение, если наш класс не может.

Теперь мы должны написать код для конкретного сообщения. Для этого делаем следующий шаги.

Третий шаг. В классе пишем метод для обработки конкретного сообщения. Для стандартных сообщений имена методов стандартны. Образуются они так: пишем новый префикс On, после которого пишем нужное сообщение Windows без префикса WM_, причем в нем прописными буквами пишем только первые буквы в каждом слове. Например, сообщение WM_ONLBUTTONDOWN превратится в OnLButtonDown. Параметры и возвращаемое значение берём из подсказок. Перед названием метода не забудем написать afx_msg. В нашем примере это

afx_msg void OnLButtonDown(UINT, CPoint);

Четвёртый шаг. В карту сообщений пишем макрос для нашего сообщения. В нашем примере это строка ON_WM_LBUTTONDOWN()

BEGIN_MESSAGE_MAP(CMyMainWnd, CFrameWnd)
 
 ON_WM_LBUTTONDOWN()
 
 END_MESSAGE_MAP()

Его имя - это ON_ плюс имя сообщения.

Пятый шаг. Пишем, что же конкретно делает наш метод. Здесь мы для примера написали

void CMyMainWnd::OnLButtonDown(UINT, CPoint){
 
     AfxMessageBox("Левая кнопка мыши");
 
 }
 
 

Функции с префиксом Afx определены в MFC глобально. Они не принадлежат конкретному классу.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS