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

Здесь есть возможность читать онлайн «А. Легалов - Применение Windows API» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Красноярск, Год выпуска: 2002, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Применение Windows API: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Применение Windows API»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

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

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Применение Windows API», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

void Controller::Edit(HWND hwnd) {

EditorData data(_model.GetText ());

ControllerFactory factory(&data);

ModalDialog dialog(_hInst, hwnd, IDD_EDITDIALOG, &factory);

if (dialog.IsOk()) {

_model.SetText(data.GetName());

// Force repaint

InvalidateRect(hwnd, 0, TRUE);

}

}

Сначала создается и инициализируется строкой объект EditorData. Затем, формируется шаблон ControllerFactory. Мы параметризуем его двумя клиентскими классами EditorCtrlи EditorData. Объект фабрики инициализирован указателем на наши данные. Затем создается объект ModalDialog. Он получет указатель на нашу фабрику в качестве параметра. Это используется для того, чтобы создать объект контроллера и восстанавливать данные из списка параметров. После того, как проведено взаимодействие с пользователем, мы проверяем, подтверждал ли пользователь результаты, нажимая кнопку OK, и если так, то мы фиксируем результаты редактирования и используем их в нашей программе. Этот способ создания диалогового окна является наиболее типичным.

Класс EditorDataв нашем примере предельно прост.

class EditorData {

public:

enum { maxLen = 128 };

EditorData(char const* name) {

SetName(name);

}

BOOL IsNameOK() { return (_name[0] != '\0'); }

void SetName(char const *name) {

strcpy(_name, name);

}

char const* GetName() { return _name; }

private:

char _name[maxLen];

};

Класс контроллера, EditorCtrl, содержит все операции. Прежде всего он встраивает в себя элемент редактирования. Этот объект ответствен за взаимодействие с элементом редактирования, внедренным в диалоговое окно. Элемент имеет идентификатор IDC_NAME_EDIT, заданныйс помощью редактора ресурсов. Во-вторых, контроллер хранит указатель на EditorData. Этот указатель взят из базового класса DlgController. Три виртуальных метода DlgController должны быть переписаны в нашем EditorControl. Это OnInitDialog, который вызывается немедленно после того, как диалог был инициализирован, OnCommand, который вызывается всякий раз, когда любой элемент диалогового окна посылает нам команду и, в заключение, OnNotify, который используется новыми элементами управления Windows95.

class EditorCtrl : public DlgController{

public:

EditorCtrl(HWND hwndDlg, void *argList) : DlgController(argList), _nameEdit(hwndDlg, IDC_NAME_EDIT) {

_dlgData = (EditorData*)GetArgList();

}

void OnInitDialog(HWND hwnd);

bool OnCommand(HWND hwnd, int ctrlID, int notifyCode);

bool OnNotify(HWND hwnd, int idCtrl, NMHDR *hdr);

private:

Edit _nameEdit;

EditorData *_dlgData;

};

В методе OnInitDialog мы обрабатываем строку, которая была передана в EditorData и используем ее, чтобы инициализировать элемент редактирования.

void EditorCtrl::OnInitDialog(HWND hwnd) {

char const* name = _dlgData->GetName();

_nameEdit.SetString(name);

}

OnCommand получает команды от различных элементов. Элементы идентифицированы их идентификаторами. Например, если идентификатор — IDC_NAME_EDIT, это означает что что-то произошло с элементом редактирования. В нашей реализации мало функциональности, и мы реагируем на каждое изменение, копируя целую строку в объект EditorData. Хотя встречаются случаи, когда Вы должны проверять правильность строки или отображать ее в некотором другом элементе управления, а также Вы должны реагировать на каждое сообщение об изменении.

Когда пользователь нажимает кнопку OK, мы получаем команду с идентификатором IDOK. Мы проверяем строку и, если она правильная, то заканчиваем диалог, передающий TRUE как код возврата. Когда идентификатор — IDCANCEL (от кнопки Cancel) мы заканчиваем диалог с кодом возврата FALSE.

Метод OnNotify ничего не делает при использовании элементов управления, использовавшихся до Widnows95, таких как элементы редактирования и кнопки.

bool EditorCtrl::OnCommand(HWND hwnd, int ctrlID, int notifyCode) {

switch (ctrlID) {

case IDC_NAME_EDIT:

if (_nameEdit.IsChanged(notifyCode)) {

char nameBuf [EditorData::maxLen];

int len = _nameEdit.GetLen();

if (len < EditorData::maxLen) {

_nameEdit.GetString(nameBuf, sizeof(nameBuf));

_dlgData->SetName(nameBuf);

}

return true;

}

break;

case IDOK:

if (_dlgData->IsNameOK()) {

EndDialog(hwnd, TRUE);

} else {

MessageBox(hwnd, "Please, enter valid name", "Name Editor", MB_ICONINFORMATION | MB_OK);

}

return true;

case IDCANCEL:

EndDialog(hwnd, FALSE);

return true;

}

return false;

}

bool EditorCtrl::OnNotify(HWND hwnd, int idCtrl, NMHDR *hdr) {

return false;

}

Теперь, когда Вы знаете клиентский код, давайте рассмотрим полную реализацию образца "Диалоговое окно". Фабрика контроллера — очень простой шаблон класса. Все, что она делает, это прием списка обобщенных параметров и сохранение его через void-указатели. Только определенный клиентом контроллер знает, чем фактически является класс, размещенный в списке параметров, и только он выполняет приведение (см. конструктор EditorCtrl).

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

Интервал:

Закладка:

Сделать

Похожие книги на «Применение Windows API»

Представляем Вашему вниманию похожие книги на «Применение Windows API» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


libcat.ru: книга без обложки
Неизвестный Автор
Отзывы о книге «Применение Windows API»

Обсуждение, отзывы о книге «Применение Windows API» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x