Применение Windows API - [8]
И, наконец, чтобы отобразить диалоговое окно, нам нужен дескриптор экземпляра приложения. Стандартный способ восстанавить (отыскать) его состоит в том, чтобы обратиться к внутренней структуре данных Windows, используя соответствующий hwnd.
>// Menu command processing
>void Controller::Command (int cmd) {
> switch (cmd) {
> case IDM_EXIT:
> ::SendMessage(_hwnd, wm_close, 0, 0l);
> break;
> case IDM_HELP:
> ::MessageBox(_hwnd, "go figure!", "Generic", MB_ICONINFORMATION | MB_OK);
> break;
> case IDM_ABOUT: {
> // Instance handle is available through HWND
> HINSTANCE hInst = WinGetLong
> ::DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT), _hwnd, AboutDlgProc);
> }
> break;
> }
>}
Объект "Вид" (Экранный объект) обычно хранит размеры клиентской области. Они обновляются всякий раз, когда контроллер обрабатывает сообщение WM_SIZE. Первое сообщение WM_SIZE посылается во время создания окна и до посылки WM_PAINT, поэтому мы можем безопасно принимать, его. Когда вызывается Paint, размерности клиентской области уже известны.
Графический вывод к окну осуществляется, вызывом соответствующих методов объекта Canvas. В нашем случае, мы печатаем текст, полученный из модели и рисуем вертикальную строку в десяти пикселах от левого края клиентской области.
>class View {
>public:
> void SetSize(int cxNew, int cyNew) { _cx = cxNew; _cy = cyNew; }
> void Paint(Canvas& canvas, Model& model);
>protected:
> int _cx; int _cy;
>};
>void View::Paint (Canvas& canvas, Model& model) {
> canvas.Text(12, 1, model.GetText(), model.GetLen());
> canvas.Line(10, 0, 10, _cy);
>}
Объект "Холст" инкапсулирует то, что, на языке Windows, называется Контекстом устройства. Наш Холст очень прост, он знает только, как печатать текст и рисовать линии, но ваш Холст может иметь много больше методов, которые выполняют творческие функции. Мы больше расскажем о Холсте при описании одной из следующих обучающих программ.
>class Canvas {
>public:
> operator HDC() { return _hdc; }
> void Line(int x1, int y1, int x2, int y2) {
> ::MoveToEx(_hdc, x1, y1, 0);
> ::LineTo(_hdc, x2, y2);
> }
> void Text(int x, int y, char const* buf, int cBuf) {
> ::TextOut(_hdc, x, y, buf, cbuf);
> }
> void Char(int x, int y, char c) {
> ::TextOut(_hdc, x, y, &c, 1);
> }
>protected:
> // Protected constructor: You can't construct
> // a Canvas object, but you may be able
> // to construct objects derived from it.
> Canvas(HDC hdc): _hdc (hdc) {}
> HDC _hdc;
>};
Холсты, который Вы создаете, в ответ на сообщение WM_PAINT, имеет специальный вид. Они получают контекст устройства, вызывая BeginPaint и отдают его, вызывая EndPaint. PAINTSTRUCT содержит дополнительную информацию, о некоторой части рабочей области, которая должна быть перерисована, и т.д. Пока мы игнорируем некоторые подробности, но если вы серьезно относитесь к эффективности, Вы должны изучить это более детально.
>// Concrete example of canvas.
>// Create this object after WM_PAINT message
>class PaintCanvas: public Canvas {
>public:
> // Constructor obtains the DC
> PaintCanvas(HWND hwnd) : Canvas (:: BeginPaint(hwnd, &_paint)), _hwnd (hwnd) {}
> // Destructor releases the DC
> ~PaintCanvas () {
> ::EndPaint(_hwnd, &_paint);
> }
>protected:
> PAINTSTRUCT _paint;
> HWND _hwnd;
>};
Далее: Разве можно программировать в Windows без использования элементов управления?
Классовая обертка для элементов управления
Перевод А. И. Легалова
Англоязычный оригинал находится на сервере компании Reliable Software
Элементы управления могут быть добавлены к основному окну или к любому диалоговому окну вашей программы. Их лучше всего выбрать и позиционировать, используя графический редактор ресурсов. Такой редактор позволяет задавать символические имена, которые можно использовать для идентификации элементов управления.
Большинство средств управления можно инкапсулировать в объектах, которые внедрены или в соответствующий "Контроллер" (Вы можете иметь отдельные объекты Controller для каждого диалогового окна программы), или, для статических элементов управления, в "Виде".
Объекты — "Контроллеры" создаются при обработке сообщения WM_CREATE или, в случае диалоговых окон, сообщением WM_INITDIALOG. При этом выполняются конструкторы элементов управления, внедренных в эти "Контроллеры".
Базовым классом для большинства элементов управления является SimpleControl. Он получает и сохраняет дескриптор окна специфического элемента управления. Чтобы получить этот дескриптор, необходимо иметь дескриптор родительского окна и идентификатор элемента управления.
>class SimpleControl {
>public:
> SimpleControl(HWND hwndParent, int id) : _hWnd(GetDlgItem(hwndParent, id)) {}
> void SetFocus() {
> ::SetFocus (_hwnd);
> }
> HWND Hwnd() const { return _hWnd; }
>protected:
> HWND _hWnd;
>};
Ниже представлен пример элемента управления редактированием.
>class Edit: public SimpleControl {
>public:
> Edit(HWND hwndParent, int id) : SimpleControl (hwndParent, id) {}
> void SetString(char* buf) {
> SendMessage(Hwnd(), WM_SETTEXT, 0, (LPARAM)buf);
> }
> // code is the HIWORD (wParam)
> static BOOL IsChanged (int code) {
В учебно-методическом пособии рассматриваются основы языка программирования 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, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.