Cтраница 4
В отличие от других элементов управления, полосы прокрутки посылают уведомления о различных событиях и сменах состояния в рамках одного сообщения. Чтобы назначить свои собственные обработчики сообщений полос прокрутки, следует при помощи средства ClassWizard создать функции OnHScroll и On VScroll для класса, определяющего родительское окно. Мы приводим описание этих функций для класса CWnd, а не для некоторого пользовательского класса окна. Дело в том, что, действительно, класс CWnd, как и некоторые другие оконные классы библиотеки MFC, содержит соответствующие обработчики. Однако эти функции - не виртуальные. Сделано так для того, чтобы исключить влияние со стороны разработчика приложения в случае, если возникнет необходимость вызова этих функций базового класса для обработки именно тех данных, которые передает элемент управления при уведомлении. [46]
Предположим, что имеется приложение для управления персоналом в некоторой организации. Когда компания нанимает нового работника, приложение вносит запись в центральную базу данных, где содержится списочный состав компании, а также запись в локальную базу на новом месте работы этого человека. Если бы обе таблицы находились в одной и той же базе данных в одной локальной системе, то машина SQL-сервера должна была бы гарантировать, что во время операции ввода данных никаких ошибок не произойдет. Однако эта задача усложняется, когда таблицы расположены в разных базах данных, разделены сотнями километров и связаны достаточно ненадежной сетью. Что случится, если программа успешно внесет запись в центральную базу данных списочного состава, а также, в удаленную базу данных, но сервер удаленной базы данных выйдет из строя до завершения транзакции. С точки зрения центральной базы данных, транзакция завершена нормально и сведения о работнике добавлены вполне корректно. Однако удаленный сервер не закончил выполнение своей задачи, и новый работник ему неизвестен. Или другой случай: удаленный сервер остается активным и поэтому полагает, что транзакция прошла успешно, тогда как центральный сервер поврежден, в результате чего эта транзакция никогда не завершится. Управление программным способом такими ситуациями, как координация работы серверов, чрезмерно загружает разработчиков приложений и ведет к созданию очень громоздких программ. [47]