Программа «Печать вкладышей». Двусторонее окно диалога

   
На этом шаге мы рассмотрим работу двустороннего окна диалога.

   
Поскольку все поля ввода, необходимые для обеих сторон кассеты, не могут вместиться в одно диалоговое окно, то за один раз отображаются данные
только одной стороны. В некотором смысле это окно представляет два диалоговых окна в одном. Из-за такой конструкции пользователь,
завершив ввод данных для стороны А, должен нажать кнопку Side В для переключения окна диалога на сторону В.

   
Если пользователь выбрал кнопку Side, сторона должна переключиться, отобразив поля редактирования для другой стороны кассеты.
Это выполняется функцией отклика на сообщение CmSide().

   
В этой функции при обращении к TransferData() данные сначала копируются из диалогового окна в буфер обмена:

    TransferData(tdGetData);

   
Автоматическая передача данных имеет место только тогда, когда пользователь закрывает окно диалога. Следовательно, программа должна информировать
механизм передачи тогда, когда ей нужны данные и когда необходимо обновить данные диалогового окна. После этого обращения введенный пользователем
в полях ввода текст будет находиться в структуре dlgStrgs.

   
После сохранения данных в буфере обмена, если пользователь работает со стороной А (флаг sideA равен TRUE), программа копирует
содержимое буфера обмена dlgStrgs в sideAStrgs, которая также является структурой типа TTransBuf:

    sideAStrgs = dlgStrgs;

   
Далее программа вызывает функцию SetText() объекта sideStr TStatic, чтобы изменить статический текст в верхнем правом углу окна диалога:

    sideStr->SetText("Side В:");

   
Чтобы изменить метку кнопки Side, программа вызывает функцию SetWindowText() объекта sideButn TButton:

    sideButn->SetWindowText("&Side  A");

   
Программа изменяет текст кнопки на Side А, так как кнопка теперь используется для переключения на сторону А, а статический текст строки -
на Side B, так как это теперь та сторона, с которой работает пользователь.

   
Так как основное название кассеты остается одним и тем же для обеих сторон, оно копируется в буфер стороны В:

    strcpy(sideBStrgs.cassTitle, sideAStrgs.cassTitle);

   
На следующем шаге программа копирует строки стороны В в буфер обмена, чтобы библиотека OWL могла их отобразить, и переключает флаг sideA:

    dlgStrgs = sideBStrgs; 
    sideA  =  FALSE;

   
Прежде, чем функция завершит работу, обращение к GetDlgItem() передает управление полю ввода ID_SIDETITLE, а вызов SetFocus() Windows
помещает текстовый курсор в то поле, в котором пользователь вероятнее всего захочет начать набор текста:

    HWND  hControl  =  GetDlgItem(ID_SIDETITLE); 
    ::SetFocus(hControl);

   
Наконец, программа копирует новые данные в поля ввода, вызывая TransferData():

    TransferData(tdSetData);

   
Аналогичный процесс происходит при переключении со стороны В на сторону А, поэтому оператор else здесь не рассматривается.

   
На следующем шаге мы рассмотрим печать вкладыша.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий