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

Тут можно читать онлайн А. Легалов - Применение Windows API - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, год 2002. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Применение Windows API
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    2002
  • Город:
    Красноярск
  • ISBN:
    нет данных
  • Рейтинг:
    4.22/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

А. Легалов - Применение Windows API краткое содержание

Применение Windows API - описание и краткое содержание, автор А. Легалов, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Применение Windows API - читать онлайн бесплатно полную версию (весь текст целиком)

Применение Windows API - читать книгу онлайн бесплатно, автор А. Легалов
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

}

Когда пользователь выбирает один из пунктов меню, оконная процедура вызывается с сообщением WM_COMMAND. Соответствующий метод контроллера посылает команду, основанную на id команды. Когда Вы создаете меню, используя редактор ресурса, Вы выбираете эти идентификаторы команд для каждого пункта меню. Они сохранены в соответствующем заголовочном файле ("resource.h" в нашем случае), который должен быть включен в исходный файл контроллера.

Наше меню содержит только три пункта с идентификаторами IDM_EXIT, IDM_HELP, и IDM_ABOUT. Диалоговое окно, которое отображается в ответ на IDM_ABOUT, также создано с использованием редактора ресурсов и имеет id IDD_ABOUT. Его процедура диалога — AboutDlgProc.

И, наконец, чтобы отобразить диалоговое окно, нам нужен дескриптор экземпляра приложения. Стандартный способ восстанавить (отыскать) его состоит в том, чтобы обратиться к внутренней структуре данных 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(_hwnd, GWL_HINSTANCE);

:: DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT), _hwnd, AboutDlgProc);

}

break;

}

}

View, Canvas

Объект "Вид" (Экранный объект) обычно хранит размеры клиентской области. Они обновляются всякий раз, когда контроллер обрабатывает сообщение 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 без использования элементов управления?

Классовая обертка для элементов управления

Элементы управления 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) {

return code == EN_CHANGE;

}

int GetLen() {

return SendMessage(Hwnd(), WM_GETTEXTLENGTH, 0, 0);

}

void GetString(char* buf, int len) {

SendMessage(Hwnd(), WM_GETTEXT, (WPARAM)len, (LPARAM)buf);

}

void Select() {

SendMessage(Hwnd(), EM_SETSEL, 0, –1);

}

};

Здесь показано, как элемент управления редактированим может использоваться:

class Controller{

public:

Controller(HWND hwnd);

private:

Edit _edit;

char _string[maxLen];

};

Controller::Controller(HWND hwnd) : _edit(hwnd, IDC_EDIT) {

_edit.SetFocus();

}

void Controller::Command(HWND hwnd, WPARAM wParam, LPARAM lParam) {

switch (LOWORD(wParam)) {

case IDC_EDIT:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


А. Легалов читать все книги автора по порядку

А. Легалов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Применение Windows API отзывы


Отзывы читателей о книге Применение Windows API, автор: А. Легалов. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x