Библиотека knigago >> Компьютеры: Разработка ПО >> Программирование: прочее >> Применение Windows API

А И Легалов - Применение Windows API

Применение Windows API
Книга - Применение Windows API.  А И Легалов  - прочитать полностью в библиотеке КнигаГо
Название:
Применение Windows API
А И Легалов

Жанр:

Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Windows, Программирование: прочее, Windows API

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Применение Windows API"

Аннотация к этой книге отсутствует.

Читаем онлайн "Применение Windows API". [Страница - 3]

ошибку: нерешенный внешний _main. (я обеспечил проектным файлом тех, кто используют MS VC++ 6.0)

Сначала Вы должны определить классы окон, которые будут отображаться вашим приложением. В данном случае мы отобразим только одно окно (WinClass), но тем не менее, мы должны дать Windows некоторую минимальную информацию относительно его класса. Наиболее важная часть WinClass — адрес процедуры обратного вызова, или оконной процедуры (WindowProcedure). Windows, в соответствии с внутренней организацией, вызывает нас — он посылает сообщения нашей программе, вызывая оконную процедуру.

Обратите внимание на объявление оконной процедуры. Windows будет вызывать ее, передавая дескриптор текущего окна и два элемента данных, связанных с сообщением (параметры сообщения): WPARAM и LPARAM.

В WinClass мы также должны определить дескриптор экземпляра программы HINSTANCE, курсор мыши (мы лишь загружаем стандартный курсор – стрелку), кисть, чтобы закрасить фон окна (мы выбрали заданный по умолчанию цвет окна) и имя нашего класса.

После заполнения всех полей структуры WNDCLASS мы регистрируем класс окна в Windows.

#include <windows.h>

LRESULT CALLBACK WindowProcedure(HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam);


class WinClass {

public:

 WinClass (WNDPROC winProc, char const * className, HINSTANCE hInst);

 void Register() {

  ::RegisterClass (&_class);

 }

private:

 WNDCLASS _class;

};


WinClass::WinClass(WNDPROC winProc, char const * className, HINSTANCE hInst) {

 _class.style = 0;

 _class.lpfnWndProc = winProc; // оконная процедура: обязательна

 _class.cbClsExtra = 0;

 _class.cbWndExtra = 0;

 _class.hInstance = hInst; // владелец класса: обязательный

 _class.hIcon = 0;

 _class.hCursor = ::LoadCursor (0, idc_arrow); // optional

 _class.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // optional

 _class.lpszMenuName = 0;

 _class.lpszClassName = className; // обязательно

}

Как только Класс Окна зарегистрирован, мы можем продолжить создание окна. Для этого вызываем функцию API CreateWindow. У нее много параметров: имя только что зарегистрированного класса окна, заголовок, появляющийся в названии окна, стиль, положение на экране и размер, а также дескриптор экземпляра приложения. Остальные параметры в данный момент оставлены обнуленными.

Окно не будет появляться на экране до тех пор, пока Вы не скажете, чтобы Windows показал его.

class WinMaker {

public:

 WinMaker(): _hwnd (0) {}

 WinMaker (char const* caption, char const* className, HINSTANCE hInstance);

 void Show (int cmdShow) {

  ::ShowWindow(_hwnd, cmdshow);

  ::UpdateWindow(_hwnd);

 }

protected:

 HWND _hwnd;

};


WinMaker::WinMaker(char const * caption, char const * className, HINSTANCE hInstance) {

 _hwnd = :: CreateWindow(

  className, // имя регистрируемого оконного класса

  caption, // заголовок окна

  WS_OVERLAPPEDWINDOW, // стиль окна

  CW_USEDEFAULT, // позиция x

  CW_USEDEFAULT, // позиция y

  CW_USEDEFAULT, // ширина

  CW_USEDEFAULT, // высота

  0, // handle to parent window

  0, // handle to menu

  hInstance, // дескриптор экземпляра

  0); // дата создания (window creation data)

}

Windows программа управляется событиями. Это означает, что Вам, как программисту, полагается находиться в обороне. Пользователь будет бомбардировать Windows различными внешними действиями, а Windows будет бомбардировать вашу программу сообщениями, соответствующими этим действиям. Все, что Вы должны делать — это отвечать на сообщения. Рисунок ниже схематично показывает как все это работает.

Книгаго: Применение Windows API. Иллюстрация № 1 Каждое сообщение адресовано определенному окну. Когда Вы запрашиваете сообщение у Windows, система выяснит класс вашего окна, найдет связанную с ним оконную процедуру, и вызовет ее. Любое сообщение, посланное нашему окну может обрабатываться в нашей оконной процедуре. Нам остается только отреагировать на его. И что? Мы должны отвечать соответстветствующим образом на всевозможные сообщения Windows? Там их сотни! К счастью, нет! Мы должны перехватывать только те сообщения, в которых заинтересованы. Все остальные мы возвращаем обратно в Windows для обработки по умолчанию, используя DefWindowProc.

Windows получает различные события от клавиатуры, мыши, портов, и т.д. Каждое событие быстро преобразуется в сообщение. Windows посылает сообщения, соответствующим окнам. Например, все сообщения от клавиатуры идут к окну, которое в настоящее время имеет фокус ввода (активное окно). Сообщения мыши посылаются согласно позиции курсора мыши. Они обычно идут к окну, которое расположено непосредственно под курсором (если какая-нибудь программа не захватила мышь).

Все эти сообщения заканчиваются в очередях сообщений. Windows

Оставить комментарий:


Ваш e-mail является приватным и не будет опубликован в комментарии.