Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Пример программы

Читайте также:
  1. Begin {начало основной программы} . . .
  2. Begin {начало основной программы} . . .
  3. I Пример слияния в MS WORD 2003. Изучите материал и выполните пример на компьютере.
  4. I. Примерный перечень вопросов рубежного контроля.
  5. II. Организация и программы Олимпийских игр.
  6. II. Примерный перечень вопросов к зачету (экзамену) по всему курсу.
  7. II. ТРЕБОВАНИЯ К РЕЗУЛЬТАТАМ ОСВОЕНИЯ ОСНОВНОЙ ОБРАЗОВАТЕЛЬНОЙ ПРОГРАММЫ НАЧАЛЬНОГО ОБЩЕГО ОБРАЗОВАНИЯ
message handling.hpp #include <afxwin.h> // Класс основного окна class CMainWin: public CFrameWnd { public: CMainWin(); // Функции обработки сообщений afx_msg void OnChar(UINT ch, UINT, UINT); afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT flags, CPoint Loc); afx_msg void OnRButtonDown(UINT flags, CPoint Loc); // Вспомогательные член-данные char str[50]; int nMouseX, nMouseY, nOldMouseX, nOldMouseY; char pszMouseStr[50]; // Декларирование карты откликов на сообщения DECLARE_MESSAGE_MAP() }; // Класс приложения class CApp: public CWinApp { public: BOOL InitInstance(); }; message handling.cpp #include <afxwin.h> #include <string.h> #include "MESSAGE HANDLING.HPP" // Реализация BOOL CApp::InitInstance() { m_pMainWnd = new CMainWin; m_pMainWnd->ShowWindow(SW_RESTORE); m_pMainWnd->UpdateWindow(); return TRUE; } CMainWin::CMainWin() { // Создать основное окно this->Create(0, "Обработка сообщений"); // Инициализировать переменные объекта strcpy(str, ""); strcpy(pszMouseStr, ""); nMouseX = nMouseY = nOldMouseX = nOldMouseY = 0; } // Реализация карты сообщений главного окна BEGIN_MESSAGE_MAP(CMainWin /* класс */, CFrameWnd /* базовый класс */) ON_WM_CHAR() ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() END_MESSAGE_MAP() // Реализация функций отклика на сообщения afx_msg void CMainWin::OnChar(UINT ch, UINT, UINT) { sprintf(str, "%c", ch); // Посылаем сообщение WM_PAINT // с необходимостью стереть и обновить все окно this->InvalidateRect(0); } afx_msg void CMainWin::OnPaint() { // Создадим контекст устройства для обработки WM_PAINT CPaintDC dc(this); // Затираем текст и снова выводим (возможно уже другой текст) dc.TextOut(nOldMouseX, nOldMouseY, " ", 30); dc.TextOut(nMouseX, nMouseY, pszMouseStr); dc.TextOut(1, 1, " "); dc.TextOut(1, 1, str); } afx_msg void CMainWin::OnLButtonDown(UINT, CPoint loc) { // Запоминаем в переменных класса координаты // мыши и текст. // Затем посылаем сообщение WM_PAINT - его // обработчик выведет все на экран. nOldMouseX = nMouseX; nOldMouseY = nMouseY; strcpy(pszMouseStr, "Нажата левая кнопка"); nMouseX = loc.x; nMouseY = loc.y; this->InvalidateRect(0); } afx_msg void CMainWin::OnRButtonDown(UINT, CPoint loc) { // Запоминаем в переменных класса координаты // мыши и текст. // Затем посылаем сообщение WM_PAINT - его // обработчик выведет все на экран. nOldMouseX = nMouseX; nOldMouseY = nMouseY; strcpy(pszMouseStr, "Нажата правая кнопка"); nMouseX = loc.x; nMouseY = loc.y; this->InvalidateRect(0); } CApp App; // Единственный экземпляр приложения


Рис. 3. Пример работы программы с обработкой сообщений.

Запустив программу, обратите внимание, что она всегда восстанавливает содержимое своего окна. Так должны вести себя все корректные приложения Windows. Также посмотрите в исходном тексте, как программа затирает в окне уже выведенную раньше строку перед выводом новой строки. Это делается с помощью вывода достаточено длинной строки из пробелов; строка выводится с белым фоном, поэтому предыдущая строка стирается. По умолчанию вывод в окно осуществляется системным шрифтом, ширина символов у которого различна. Поэтому, например, вывод символа "i" сразу поверх "W" не сотрет предыдущий символ.


Дата добавления: 2015-07-20; просмотров: 83 | Нарушение авторских прав


Читайте в этой же книге: История | Исходные тексты примера | Включение обработчиков сообщений в описание класса | ТЕМАТИКА РЕФЕРАТІВ | Методичні рекомендації щодо написання рефератів |
<== предыдущая страница | следующая страница ==>
Сообщение WM_PAINT| Пример программы

mybiblioteka.su - 2015-2024 год. (0.008 сек.)