4.1. Отклик на нажатие левой и правой клавиш мыши
Нижеследующее Windows-приложение создает прикладное окно и ожидает нажатия правой или левой кнопки мыши. При нажатии любой из этих клавиш внутри окна появляется панель сообщения, указывающая, какая клавиша была нажата. После нажатия на кнопку OK панель исчезает, а приложение будет ждать нового нажатия на клавиши мыши.
4.1.1 Исходнный текст приложения.
#include <owl\applicat.h>
#include <owl\framewin.h>
class TMyWindow : public TFrameWindow
{
public:
TMyWindow(char *title):TFrameWindow(0,title)
{}
protected:
void EvLButtonDown(UINT,TPoint&);
void EvRButtonDown(UINT,TPoint&);
DECLARE_RESPONSE_TABLE(TMyWindow);
};
DEFINE_RESPONSE_TABLE1(TMyWindow,TFrameWindow)
EV_WM_LBUTTONDOWN,
EV_WM_RBUTTONDOWN,
END_RESPONSE_TABLE;
void TMyWindow::EvLButtonDown(UINT,TPoint&)
{
MessageBox("You have pressed the LEFT mouse button","Message dispatched",MB_OK | MB_ICONINFORMATION);
}
void TMyWindow::EvRButtonDown(UINT,TPoint&)
{
MessageBox("You have pressed the RIGHT mouse button","Message dispatched",MB_OK|MB_ICONINFORMATION);
}
class TMyApp : public TApplication
{
public:
TMyApp():TApplication()
{}
void InitMainWindow()
{
EnableCtl3d();
MainWindow=new TMyWindow("Click Me!!!!!");
}
};
int OwlMain(int, char *[])
{
TMyApp app;
return app.Run();
}
4.1.2. Пояснения к программе
Класс TMyWin описывает прикладное окно, как главное окно приложения и поэтому порождается от класса TFrameWindow.
Кроме описания конструктора класс содержит объявления стандартных функций отклика EvLButtonDown и EvRButtonDown, а так же объявление таблицы отклика для класса.
Вслед за описанием класса располагается описание таблицы отклика на сообщения от левой и правой клавиш мыши.
Функции отклика описаны вне класса. Тело каждой из этих функций содержит единственный вызов функции MessageBox, которую TMyWin наследует от TFrameWindow. Аргументы функции MessageBox задают текст сообщения, заголовок панели и стиль окна сообщения. Стили MB_OK и MB_ICONINFORMATION дают нам диалоговую панель с кнопкой OK и пиктограммой “Information”:
Тело функции TMyApp::InitMainWindow содержит вызов функции EnableCtl3d(), которая разрешает приложению использовать трехмерные диалоги. Вы можете закомментировать вызов этой функции и сравнить полученные результаты.
4.1.3. Задание
1) Создать и выполнить приложение. Поэкспериментировать с приложением, нажимая кнопки мыши в его окне.
2) Измените аргументы в вызовах функции MessageBox. Убедитесь в изменении внешнего вида панели сообщения.
3) Закомментируйте строку EV_VM_RBUTTONDOWN в таблице элементов отклика. Объясните изменившееся поведение приложения.
4.1.4. Немного английского
a button - кнопка
down - вниз
left - влево, левый
right - правый
an event - событие
a message - сообщение
a response - ответ
a table - таблица
to declare - объявить
to define - описать
a box - блок, панель
5. Вывод графики в Windows
Вывод текстовой или графической информации в Windows связан с контекстом устройства DC. Рабочая зона окна связывается с контекстом устройства TClientDC. Перед выводом информации мы должны создать контекст устройства, передав ему идентификатор окна и выбрать в нем набор необходимых графических объектов, таких как перо (TPen), кисть(TBrush) и т. д. Необходимо также позаботиться о цвете выводимых объектов. Созданный контекст позволяет нам рисовать только внутри рабочей области окна, не затрагивая при этом ни другие окна, ни границы самого окна. Наличие в системе такого класса, как TDC, делает доступными более 150 функций, связанных с выводом оконной графики. Эти функции позволяют использовать различные объекты-инструменты (перо, кисть, шрифт и т. д.), выводить текст и рисовать различные фигуры.
5.1. Вывод координат точки нажатия левой клавиши мыши
Нижеследующее приложение откликается на щелчки левой кнопки мыши, выводя в рабочей зоне окна координаты указателя мыши в голубом цвете.
5.1.1. Исходный текст программы
#include <owl\applicat.h>
#include <owl\framewin.h>
#include <owl\dc.h>
class TMyWindow : public TFrameWindow
{
public:
TMyWindow(char *title):TFrameWindow(0,title)
{}
protected:
void EvLButtonDown(UINT,TPoint&);
DECLARE_RESPONSE_TABLE(TMyWindow);
};
DEFINE_RESPONSE_TABLE1(TMyWindow,TFrameWindow)
EV_WM_LBUTTONDOWN,
END_RESPONSE_TABLE;
void TMyWindow::EvLButtonDown(UINT,TPoint &point)
{
TClientDC dc(HWindow);
TColor forecolor(TColor::LtCyan);
dc.SetTextColor(forecolor);
char buf[20];
wsprintf(buf,"[%d,%d]",point.x,point.y);
dc.TextOut(point.x,point.y,buf);
}
class TMyApp : public TApplication
{
public:
TMyApp():TApplication()
{}
void InitMainWindow()
{
MainWindow=new TMyWindow("Use the left mouse button");
}
};
int OwlMain(int, char *[])
{
TMyApp app;
return app.Run();
}
... автоматизации, которые не описаны в интерфейсе IDispatch. Var Object: Variant; Object := CreateOleObject('Word.Application'); Использование экземпляра сервера автоматизации, то есть вызов его методов, осуществляется с помощью конструкций, обычных для вызова методов в Delphi: <Ссылка на сервер>.<Название метода>(<Список параметров>); Однако механизм, используемый для ...
... требования: Процессор – Pentium 400 MHz. Оперативная память – 512 Mb. Жесткий диск – 10 Gb. Операционная система – Windows XP Professional Программное обеспечение – Borland Database Engine. 2. Разработка рабочего проекта 2.1 Разработка программы Программа, моделирующая игру «Нечет» и «Чет» разработана на языке Object Pascal в визуальной среде Delphi 6. Проект содержит одно окно- ...
... мире. Внутренняя схема - это сама база данных. Отсюда вытекают основные этапы, на которые разбивается процесс проектирования базы данных информационной системы: Концептуальное проектирование - сбор, анализ и редактирование требований к данным. Для этого осуществляются следующие мероприятия: обследование предметной области, изучение ее информационной структуры выявление всех фрагментов, каждый ...
... из контекстного меню или из меню Run, закрыть приложение и лишь затем вносить изменения в проект. В этом случае уменьшится вероятность потери ресурсов Windows. Компоненты Borland C++ Builder Выбор компонентов для групповых операций Для эффективной разработки пользовательских интерфейсов приложений C++ Builder нередко возникает необходимость в манипулировании компонентами на формах. ...
0 комментариев