Визуализация контактных преобразований в среде Visual C++ 6
Рефераты >> Программирование и компьютеры >> Визуализация контактных преобразований в среде Visual C++ 6

BEGIN_MESSAGE_MAP(CEllipse,CScrollView) //{(AFX_MSG MAP(CEllipse) ON_WM_LBUTTONDOWN() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() //}}AFX_MSG_MAP

ON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView: : OnFilePrintEreview)

END_MESSAGE_MAP() .

Обе функции, CView:: OnFilePrint и CView: :OnFilePrintPreview, управляют операциями печати. Однако OnFilePrint передает результат на

принтер, а функ­ция OnFilePrintPreview — в окно предварительного просмотра печати, отобра­жаемое поверх обычного окна программы. При этом она показывает результат в виде одной или двух печатаемых страниц. В процессе управления печатью эти функции вызывают виртуальные функции, определенные внутри класса CView. Реализация виртуальных функций в классе CView по умолчанию наклады­вает ограничение на процесс печати. Для улучшения возможностей программы печати одну (или более) из этих функций можно переопределить.

Чтобы реализовать поддержку печати или предварительного просмотра печати, необходимо переопределить только виртуальную функцию OnPreparePrinting. MFC вызывает ее либо перед печатью, либо перед предварительным просмот­ром. Чтобы создать функцию OnPreparePrinting для программы Ellipse, вызовите мастер ClassWizard, откроем вкладку Message Maps, выберем CEllipse в списках Class Name и Object Ids, а в списке Messages — OnPreparePrinting и щелкнем на кнопке Add Function. Затем щелкнем на кнопке Edit Code, в функции OnPreparePrinting удалим вызов основной версии функции OnPreparePrinting и добавим вызов функции CView::DoPrepa-rePrinting.

BOOL CEllipse:;OnPreparePrinting(CPrintInfo* pinfo) (

// TODO: Здесь добавьте собственный код обработчика

// и/или вызов базового класса

return DoPreparePrinting (pinfo); // удалите вызов // CScrollView:: OnPreparePrinting(pinfo)

)

Функция DoPreparePrinting создает объект контекста устройства, связанный с принтером. Если документ печатается, то DoPreparePrinting отображает обычное диалоговое окно Print, позволяющее выбрать определенный принтер и установить несколько опций печати. Затем функция

создает объект контекста устройства для выбранного принтера и задает для него выбранные установки. Однако при предварительном просмотре документа функция DoPreparePrinting создает объект контекста устройства для текущего стандартного принтера Windows, а затем присваивает стандартные установки принтера, не отображая диалоговое окно Print. Если объект контекста устройства связан с принтером, он дополни­тельно сохраняет установки принтера при сохранении атрибутов и инструментов рисования, описанных в предыдущих главах. Обратите внимание: функцию OnPreparePrinting необходимо создать, так как ее стандартная версия ничего не выполняет. Это может привести к тому, что MFC попытается напечатать или просмотреть документ без наличия корректного объекта контекста устройства.

Примечание

Указатель на объект класса cprintinfo передается во все виртуальные функции выпол­нения печати. Этот объект содержит информацию о печати и предоставляет функции и переменные, которые используются виртуальными функциями для получения или изменения установок принтера. Например, если известен номер печатаемой страницы документа, то из функции OnPreparePrinting можно вызвать функцию Cprintinfo: :SetMaxPage {перед вызовом DoPreparePrinting), чтобы задать номер печатаемой страницы. Тогда при печати документа этот номер отобразится в диалоговом окне Print (в текстовом поле То). При просмотре документа предоставление этого номера приведет к отображению MFC полосы прокрутки в окне предварительного просмотра, что позволит прокручивать страницы доку­мента. MFC должно передаваться общее число страниц для корректной установки позиции бегунка на полосе прокрутки.

После того как MFC вызовет функцию OnPreparePrinting, чтобы подготовить объект контекста устройства для печати или просмотра, она передает этот объект в функцию OnDraw класса представления. Поскольку объект контекста устройства связывается с принтером, а не с окном представления, выводимая графическая информация появляется на печатаемой странице (или в окне предварительного просмотра печати), а не внутри окна представления. Единственная программа рисования внутри функции OnDraw имеет возможность отобразить выводимую информацию как в окне представления, так и при печати, поскольку вызываемые для этого функции класса CDC в достаточной степени аппаратно независимы.

Примечание

Когда документ печатается или просматривается, MFC готовит объект контекста устройства, связанный с принтером, и передает его в функцию OnDraw. Однако при просмотре доку­мента код MFC в объекте контекста устройства фактически передается в окно предвари­тельного просмотра. При этом используется отдельный контекст устройства, который связан с окном представления и задает установки для имитации печатаемой страницы.

Теперь можно построить и выполнить новую версию программы Ellipse. Если выбрать команду Print Setup -, программа открывает одноименное диалоговое окно, позволяющее выбрать принтер, принимающий выводимую на печать информацию (если в Windows установлено несколько принтеров), и задать некоторые его параметры. Щелчок на кнопке Properties . в диалоговом окне Print Setup позволяет получить доступ ко всем имеющимся установкам принтера (в зависимости от выбранного принтера).

При выборе команды Print . программа откроет диалоговоеокно Print. В диалоговом окне Print можно выбрать принтер, принимающий выводимую

информацию, и указать некоторые параметры печати (качество печати и число копий). Щелчок на кнопке Properties . в диалоговом окне Print позволяет изменить любой из доступных параметров принтера непосредственно перед печатью. Эти же параметры отображаются при щелчке на кнопке Properties . в диалоговом окне Print Setup. Если рисунок печатается не очень быстро, то во время печати будет видно диалоговое окно Printing. В этом окне можно щелкнуть на кнопке Cancel, чтобы остановить работу принтера. Если сделать это до передачи Print Manager выводимой информации, то печать выполняться не будет.

Добавление средств печати в окно представлений класса CEditView

Если класс представления в программе наследуется из класса CEditVtew, то MFC и Windows предоставляют большую часть кода, требуемого для печати. Даже если в мастере AppWizard не была выбрана опция Printing and Print Preview, можно реализовать команды Print ., Print Preview и Print Setup самому, потратив небольшие усилия на программирование.

Чтобы реализовать команду Print ., просто добавим ее в меню File, задав иден­тификатор id_file_print_preview, без дальнейшего изменения кода. Результи­рующая команда Print будет печатать весь текст документа, занимающий даже более одной страницы.

Для реализации команды Print Preview добавим ее в меню File, присвоив иден­тификатор id_e'ile_print_preview, затем добавим в схему сообщений оператор include для вставки файла Afxprint.rc и макрос on_command для класса представления.

Чтобы реализовать команды Print . или Print Preview, не нужно создавать функцию OnPreparePrinting.


Страница: