Применение Windows API - [6]
Класс WinMaker организован аналогично WinClass. Его конструктор устанавливает значения по умолчанию, которые могут быть переустановлены вызовом специфических методов. После завершения всех установок, Вы вызываете метод Create, чтобы создать окно, и метод Show, чтобы отобразить его. Обратите внимание, что в тот момент, когда Вы вызываете Create, ваша оконная процедура вызывается с сообщением WM_CREATE.
Верхнее окно создано с использованием класса TopWinMaker, который обеспечивает соответствующий стиль и заголовок.
>class WinMaker {
>public:
> WinMaker(WinClass& winClass);
> operator HWND() { return _hwnd; }
> void AddCaption(char const * caption) {
> _windowName = caption;
> }
> void AddSysMenu() { _style |= WS_SYSMENU; }
> void AddVScrollBar() { _style |= WS_VSCROLL; }
> void AddHScrollBar() { _style |= WS_HSCROLL; }
> void Create();
> void Show(int nCmdShow = SW_SHOWNORMAL);
>protected:
> WinClass& _class;
> HWND _hwnd;
> DWORD _exStyle; // extended window style
> char const* _windowName; // pointer to window name
> DWORD _style; // window style
> int _x; // horizontal position of window
> int _y; // vertical position of window
> int _width; // window width
> int _height; // window height
> HWND _hWndParent; // handle to parent or owner window
> HMENU _hMenu; // handle to menu, or child-window id
> void * _data; // pointer to window-creation data
>};
>WinMaker::WinMaker(WinClass& winclass) : _hwnd(0), _class(winClass), _exStyle(0), // extended window style
> _windowName (0), // pointer to window name
> _style(WS_OVERLAPPED), // window style
> _x(CW_USEDEFAULT), // horizontal position of window
> _y(0), // vertical position of window
> _width(CW_USEDEFAULT), // window width
> _height(0), // window height
> _hWndParent(0), // handle to parent or owner window
> _hMenu(0), // handle to menu, or child-window id
> _data(0) // pointer to window-creation data
>{ }
>void WinMaker::Create() {
> _hwnd = ::CreateWindowEx(_exStyle, _class.GetName(), _windowName, _style, _x, _y, _width, _height, _hWndParent, _hMenu, _class.GetInstance(), _data);
> if (_hwnd == 0) throw WinException ("Internal error: Window Creation Failed.");
>}
>void WinMaker::Show(int nCmdShow) {
> ::ShowWindow(_hwnd, nCmdShow);
> ::UpdateWindow(_hwnd);
>}
>// Makes top overlapped window with caption
>TopWinMaker::TopWinMaker((WinClass& winclass, char const* caption) : WinMaker(winClass) {
> _style = WS_OVERLAPPEDWINDOW | WS_VISIBLE;
> _windowName = caption;
>}
Прежде, чем идти дальше, рассмотрим некоторые простые классы общего назначения. WinException — нечто, что мы хотим использовать для исключений во время сбоев Windows API. Он заботится о восстановлении кода ошибки Windows. (Между прочим, имеется простой способ преобразовать код ошибки в строку функцией API FormatMessage.)
Класс ResString просто инкапсулирует строку, хранимую в строковых ресурсах вашего приложения.
>// The exception class: stores the message and the error code class
>WinException {
>public:
> WinException(char* msg) : _err(::GetLastError()), _msg(msg) {}
> DWORD GetError() const { return _err; }
> char const* GetMessage() const { return _msg; }
>private:
> DWORD _err;
> char * _msg;
>};
>// The out-of-memory handler: throws exception
>int NewHandler(size_t size) {
> throw WinException( "Out of memory");
> return 0;
>}
>class ResString {
> enum { MAX_RESSTRING = 255 };
>public:
> ResString(HINSTANCE hInst, int resId);
> operator char const*() { return _buf; }
>private:
> char _buf[MAX_RESSTRING + 1];
>};
>ResString::ResString(hinstance hinst, int resid) {
> if (!::LoadString(hinst, resid, _buf, max_resstring + 1)) throw WinException ("Load String failed");
>}
Контроллер — нервная система отдельного экземпляра окна. Он создается с этим окном, хранится с ним и, в заключение, разрушается вместе с ним. Вы можете помещать любую информацию о состоянии, имеющую отношение к специфическому экземпляру окна в его контроллер. Вообще же, контроллер содержит "Вид", который имеет дело с рисованием на поверхности окна, и он имеет доступ к "Модели", которая является мозгом вашего приложения (все это называется MVC, или образцом "Модель-Вид-Контроллер" ("Model-View-Controller"), изобретенным Smalltalk-программистами.
Если, как это часто бывает, ваше приложение имеет только одно окно верхнего уровня, Вы можете непосредственно включать модель в ее контроллер. Это упрощает управление ресурсами, но ценой усиления связи контроллера с моделью. В больших проектах нужно избегать таких связей. Предпочтительнее использовать внутри контроллера "интеллектуальный" указатель на модель.
Большинство методов контроллера требует дескриптора окна, с которым они взаимодействуют. Этот дескриптор передается с каждым сообщением Windows, но проще сохранить его один раз внутри контроллера и использовать всякий раз, когда он необходим. Помните — имеется взаимно однозначное соответствие между контроллерами и экземплярами окон (а следовательно, и их дескрипторами).
>class Controller {
>public:
> Controller(HWND hwnd, CREATESTRUCT * pCreate);
> ~Controller();
> void Size(int x, int y);
> void Paint();
> void Command(int cmd);
>private:
> HWND _hwnd;
В учебно-методическом пособии рассматриваются основы языка программирования PL/SQL, реализованного в системе управления базами данных Oracle Database Server. Приводятся сведения о поддерживаемых типах данных, структуре программ PL/SQL и выполнении SQL-предложений в них. Отдельно рассмотрено создание хранимых в базах данных Oracle программ PL/SQL – процедур, функций, пакетов и триггеров.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В этой книге содержится описание базовых принципов функционирования платформы .NET, системы типов .NET и различных инструментальных средств разработки, используемых при создании приложений .NET. Представлены базовые возможности языка программирования C# 2005, включая новые синтаксические конструкции, появившиеся с выходом .NET 2.0, а также синтаксис и семантика языка CIL. В книге рассматривается формат сборок .NET, библиотеки базовых классов .NET. файловый ввод-вывод, возможности удаленного доступа, конструкция приложений Windows Forms, доступ к базам данных с помощью ADO.NET, создание Web-приложений ASP.NET и Web-служб XML.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
ГОСУДАРСТВЕННЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИИнформационная технологияРУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯInformation technology. Guidelines for the management of software documentationИздание официальноеДата введения 1994-07-01ГОССТАНДАРТ РОССИИ Москва© Издательство стандартов, 1994.
Самоучитель UMLПервое издание.В книге рассматриваются основы UML – унифицированного языка моделирования для описания, визуализации и документирования объектно-ориентированных систем и бизнес-процессов в ходе разработки программных приложений. Подробно описываются базовые понятия UML, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.