Применение Windows API - [9]
> 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:
> if (_edit.IsChanged(HIWORD (wParam))) {
> _edit.GetString(_string, maxLen);
> }
> break;
> …
> }
>}
Далее: Естественно, что наиболее вероятным местом использования элемента управления является диалоговое окно.
Использование «Контроллера» в диалоге
Перевод А. И. Легалова
Англоязычный оригинал находится на сервере компании Reliable Software
Основное окно программы не должно быть универсальным окном, изменяющим свой размер. Много небольших приложений работают лучше в формате диалогового окна. Очевидное преимущество такого подхода заключается в том, что, для размещения элементов управления на поверхности диалога, можно использовать редактор ресурсов. Таким образом реализован пользовательский интерфейс (ПИ) частотного анализатора. Ниже этот полезный подход описан подробнее. Вы можете разгрузить исходный текст простого приложения, которое демонстрирует, описанные методы (любезность Laszlo Radanyi).
Прежде всего мы должны разработать диалоговое окно, используя редактор ресурсов. Мы назначаем идентификаторы всем элементам управления и непосредственно диалогу. В данном примере ресурс диалога имеет идентификатор DLG_MAIN. В процедуре WinMain мы не можем регистрировать окна любого класса, потому что Windows имеет предопределенный класс для диалоговых окон. Вместо того, чтобы создавать окно, мы вызываем функцию CreateDialog, передавая ей указатель на нашу собственную процедуру диалога (объясню позже).
Цикл сообщений данной программы является нестандартным, так как он вызывает функцию IsDialogMessage для каждого сообщения. Эта функция API не только проверяет, направлено ли данное сообщение к диалоговому окну, но и, что более важно, пересылает это сообщение процедуре диалога. Если сообщение не было адресовано диалогу, мы выполняем стандартную трансляцию и диспетчеризацию.
Для удобства, мы храним значение HINSTANCE в глобальной переменной. Этот вариант фактически является предшественником более общего объекта — Приложения. Однако, в данном случае, пример слишком тривиальный, чтобы заслуживать собственного класса.
>HINSTANCE TheInstance = 0;
>int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, char* cmdParam, int cmdShow) {
> TheInstance = hInst;
> _set_new_handler(&NewHandler);
> HWND hDialog = 0;
> hDialog = CreateDialog(hinst, MAKEINTRESOURCE(DLG_MAIN), 0, DialogProc);
> if (!hDialog) {
> char buf[100];
> wsprintf(buf, "Error x%x", GetLastError());
> MessageBox(0, buf, "CreateDialog", MB_ICONEXCLAMATION | MB_OK);
> return 1;
> }
> MSG msg;
> int status;
> while ((status = GetMessage(&msg, 0, 0, 0)) != 0) {
> if (status == –1) return –1;
> if (!IsDialogMessage(hDialog, &msg)) {
> TranslateMessage(&msg);
> DispatchMessage(&msg );
> }
> }
> return msg.wParam;
>}
Процедура диалога — точно такая же как и процедура Windows, за исключением того, что она возвращает TRUE, когда она обрабатывает сообщение и FALSE, когда его не обрабатывает. Нет никакой потребности вызывать процедуру, заданную по умолчанию, потому что Windows делает это за нас всякий раз, когда процедура диалога возвращает FALSE (делает за Вас это дело, так почему же не сделано точно также при использовании оконной процедуры…). Первое сообщение, которое диалог получает — WM_INITDIALOG, а последнее — WM_CLOSE. В ходе обработки этих сообщений мы создаем и уничтожаем «Контроллер» (Controller). Других случаях, отличных от этих, диалог ожидает сообщения от его элементов управления управления, передаваемого как WM_COMMAND. Одно из элементов управления, требует специальной обработки. Это (горизонтальная) линейка прокрутки (scrollbar). Она посылает сообщение WM_HSCROLL. Средства управления линейкой прокрутки (scrollbar) имеются в частотном анализаторе, и там показано, как иметь с ними дело.
>BOOL CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
> static Controller* control = 0;
> switch (message) {
> case WM_INITDIALOG:
> try {
> control = new Controller(hwnd);
> }
> catch (WinException e) {
> MessageBox(0, e.GetMessage(), "Exception", MB_ICONEXCLAMATION | MB_OK);
> PostQuitMessage(1);
> } catch (…) {
> MessageBox(0, "Unknown", "Exception", MB_ICONEXCLAMATION | MB_OK);
> PostQuitMessage(2);
> }
> return TRUE;
> case WM_COMMAND:
> control->Command(hwnd, LOWORD (wParam), HIWORD (wParam));
> return TRUE;
> case WM_HSCROLL:
> control->Scroll(hwnd, LOWORD(wParam), HIWORD(wParam));
> return 0;
> case WM_DESTROY:
> PostQuitMessage(0);
> return TRUE;
> case WM_CLOSE:
В учебно-методическом пособии рассматриваются основы языка программирования 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, необходимые для построения объектно-ориентированной модели системы с использованием графической нотации. Изложение сопровождается примерами разработки отдельных диаграмм, которые необходимы для представления информационной модели системы.