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


СЛУЧАЙНЫЙ КОММЕНТАРИЙ

# 830, книга: Не покидай меня, любовь
автор: Дениз Робинс

Современные любовные романы Эмма Харт, успешная и независимая бизнес-леди, переживает тяжелый разрыв отношений. Ее мир рушится, когда она узнает, что ее бывший возлюбленный, Джейк Росс, женился на другой женщине. С разбитым сердцем Эмма отправляется в отпуск в живописную деревушку, чтобы залечить душевные раны. Там она встречает очаровательного и загадочного Томаса Блэкбёрна. С самого начала между ними вспыхивает непреодолимое влечение, но Эмма боится поверить вновь, опасаясь повторения...

СЛУЧАЙНАЯ КНИГА

"Урал-43202".  журнал «Автолегенды СССР»
- "Урал-43202"

Жанр: Авто-, мото- и велотранспорт, ПДД

Год издания: 2018

Серия: Автолегенды СССР. Грузовики

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

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

Жанр:

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

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

неизвестно

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

неизвестно

Год издания:

ISBN:

неизвестно

Отзывы:

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

Рейтинг:

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

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

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

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

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

src="/icl/i/63/98463/any2fbimgloader17" alt="Книгаго: Применение Windows API. Иллюстрация № 4" title="Книгаго, чтение книги «Применение Windows API» [Картинка № 4]"> Во временя выполнения, Вы начинаете с SObject, представляющего программу, которую вы связываете. Затем обеспечиваете доступ из объекта к интерфейсу и от интерфейса к DispObject. Вы используете объекты как источники интерфейсов и интерфейсы для вызова специфических методов и получения других объектов.

В заключение. Вы можете загрузить исходный текст примера, который иллюстрирует применение этих методов.

Далее: Создание разделителя окон (сплиттера).

(обратно)

Как разделить окно на части

Разделительная полоска (сплиттер)
Перевод А. И. Легалова

Англоязычный оригинал находится на сервере компании Reliable Software

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

Книгаго: Применение Windows API. Иллюстрация № 5 Сплиттер — это окно. Точнее — это дочернее окно. Оно позиционировано между двумя другими дочерними окнами — мы назовем их левым и правым подокном, соответственно (или верхним и нижним для горизонтального расщепителя). Должно также быть основное окно, явялющееся родителем для трех дочерних.

Без дальнейшей суеты приведем код WinMain, который осуществляет начальные установки.

// Create top window class

TopWinClassMaker topWinClass(WndProcMain, ID_MAIN, hInst, ID_MAIN);

topWinClass.Register();


// Create child pane classes

WinClassMaker paneClass(WndProcPane, IDC_PANE, hInst);

paneClass.SetSysCursor(IDC_IBEAM);

paneClass.SetDblClicks();

paneClass.Register();


Splitter::RegisterClass(hInst);


// Create top window

ResString caption(hInst, ID_CAPTION);

TopWinMaker topWin(caption, ID_MAIN, hInst);

topWin.Create();

topWin.Show(cmdShow);

В начале мы регистрируем классы. Верхний оконный класс связан с его оконной процедурой WndProcMain, которую мы рассмотрим через мгновение. Два дочерних подокна совместно используют тот же самый класс окна, связанный с WndProcPane. Затем регистрируется наш собственный класс сплиттера (мы скоро увидем его код). В заключение, создается и отображается верхнее окно. Дочерние окна создаются динамически во время инициализации родительского окна.

Приведем оконную процедуру верхнего окна.

LRESULT CALLBACK WndProcMain(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {

 Controller* pCtrl = GetWinLong<Controller *>(hwnd);

 switch (message) {

 case WM_CREATE:

  try {

   pCtrl = new Controller(hwnd, reinterpret_cast<CREATESTRUCT *>(lParam));

   SetWinLong<Controller*>(hwnd, pCtrl);

  } catch (char const* msg) {

   MessageBox(hwnd, msg, "Initialization", MB_ICONEXCLAMATION | MB_OK);

   return -1;

  } catch (...) {

   MessageBox(hwnd, "Unknown Error", "Initialization", MB_ICONEXCLAMATION | MB_OK);

   return -1;

  }

  return 0;

 case WM_SIZE:

  pCtrl->Size(LOWORD(lParam), HIWORD(lParam));

  return 0;

 case MSG_MOVESPLITTER:

  pCtrl->MoveSplitter(wParam);

  return 0;

 case WM_DESTROY:

  SetWinLong<Controller*>(hwnd, 0);

  delete pCtrl;

  return 0;

 }

 return ::DefWindowProc(hwnd, message, wParam, lParam);

}

Имеем обычную оконную процедуру за исключением одного сообщения: MSG_MOVESPLITTER. Это — наше собственное, определяемое пользователем сообщение, которое послано сплиттером его родительскому окну. Но сначала давайте взглянем на контроллер главного окна.

class Controller {

public:

 Controller(HWND hwnd, CREATESTRUCT* pCreat);

 ~Controller();

 void Size(int cx, int cy);

 void MoveSplitter(int x);

private:

 enum { splitWidth = 8 }; // width of splitter

 // User Interface

 HWnd _hwnd;

 //Main controller window

 HWnd _leftWin;

 HWnd _rightWin;

 HWnd _splitter;

 int _splitRatio; // in per cent

 int _cx;

 int _cy;

};

Контроллер содержит дескриптор своего окна, двух дочерних подокон, и окна сплиттера. Он также сохраняет текущий коэффициент разбиения, в процентах.

Конструктор контроллера отвечает за создание дочерних окон.

Controller::Controller(HWND hwnd, CREATESTRUCT * pCreat) : _hwnd (hwnd), _leftWin (0), _rightWin (0), _splitter (0), _splitRatio (50) {

 // Create child windows

 {

  ChildWinMaker leftWinMaker(IDC_PANE, _hwnd, ID_LEFT_WINDOW);

  leftWinMaker.Create();

  _leftWin.Init(leftWinMaker);

  leftWinMaker.Show();

 }

 {

  ChildWinMaker rightWinMaker(IDC_PANE, _hwnd, ID_RIGHT_WINDOW);

  rightWinMaker.Create();

  _rightWin.Init(rightWinMaker);

  rightWinMaker.Show();

 }

 Splitter::MakeWindow(_splitter, _hwnd, ID_SPLITTER);

}

--">

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


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