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

а второй, по формуле

x=a cos t

{

y=b sin t

Вот функция, которая рисует оба эллипса:

void CEllipseView::OnDraw(CDC* pDC)

{

CEllipseDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

float x, y, t, PI = 3.1415926;

for (x = -pDoc->A; x < pDoc->A; x+=0.005)

{

y = sqrt(abs((1.0 - (x*x)/(pDoc->A*pDoc->A))*(pDoc->B*pDoc->B)));

pDC->SetPixel(x*5+pDoc->A*5+10,

y*5+pDoc->B*5+10, RGB(0xFF,0,0));

y = -sqrt(abs((1.0 - (x*x)/(pDoc->A*pDoc->A))*(pDoc->B*pDoc->B)));

pDC->SetPixel(x*5+pDoc->A*5+10,

y*5+pDoc->B*5+10, RGB(0xFF,0,0));

}

for (t = -PI; t < PI; t+=0.005)

{

x = pDoc->Ac * cos(t);

y = pDoc->Bc * sin(t);

pDC->SetPixel(x*5+MAX(pDoc->A,pDoc->Ac)*15+20,

y*5+MAX(pDoc->B,pDoc->Bc)*5+10, RGB(0,0x20,0x80));

}

Для передачи параметров в функцию рисования я создал два диалоговых окна, одно для первой формулы (первого эллипса), другое – для второй формулы (второго эллипса). При нажатии на иконки эллипсов появляются эти диалоговые окна и предлагается ввести соответствующие параметры формулы эллипса. Диалоговые окна вызываются в файле EllipseDoc.Cpp, вот функции вызова обоих диалоговых окон:

void CEllipseDoc::OnNewEllipseProperties()

{

CEditEllipseProperties dlg;

dlg.m_A = A;

dlg.m_B = B;

dlg.DoModal();

A = dlg.m_A;

B = dlg.m_B;

UpdateAllViews(NULL);

}

void CEllipseDoc::OnEditEllipseProperties2()

{

CEditEllipseProperties dlg;

dlg.m_A = Ac;

dlg.m_B = Bc;

dlg.DoModal();

Ac = dlg.m_A;

Bc = dlg.m_B;

UpdateAllViews(NULL);

}

Глава 3.Печать и предварительный просмотр

1)Основы печати и предварительный просмотр

2)Усовершенствованная печать

В этой главе я объясню, как выполняется печать текстов и графических изо­бражений, а также предварительный просмотр внешнего вида документа перед печатью. А также, как выполняются стандартные команды Print ., Print Preview и Print Setup из меню File. Так как в Windows применяется модель вывода данных, не зависящая от устройств, для отображения текста и графики на печатной страни­це можно использовать уже известные вам способы. Рассмотрим особые способы печати - выбор и установку принтера, разбиение документа на страницы и другие действия, необходимые для работы принтером.

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

Основы печати и предварительный просмотр

При генерации новой программы с использованием мастера AppWizard, в нее можно включить основные средства поддержки печати и предварительного про­смотра, установив опцию Printing And Print Preview в диалоговом окне (Step 4) AppWizard , в следствие чего команды Print ., Print Preview и Print Setup . добавляются в меню программы File. При реализации мастером AppWizard команда Print . печатает ту часть документа, которая помещается на одной страни­це. Оставшаяся часть документа игнорируется.

Подобным образом команда Print Preview отображает распечатку, появляющуюся на одной странице документа. Как вы увидите, команды Print . и Print Preview вызывают функцию OnDraw, чтобы сгенерировать реально выводимую текстовую или графическую информацию. Команда Print Setup . отображает обычное диалоговое окно Print Setup, позво­ляющее выбрать тип принтера и задать его установки.

В этом разделе в мою программу Ellipse добавлены все средства печати, позво­ляющее печатать так же, как и при выборе опции Printing And Print Preview в первом варианте программы, сгенерированном мастером AppWizard. В новую версию моей программы Ellipse включены все средства, которые вошли в программу.

Модификация ресурсов

Чтобы отобразить ресурсы программы, перед началом модификации ресурсов откроем проект Ellipse и вкладку Resource View в окне Workspace. Затем откроем меню idr_mainframe в конструкторе меню. Непосредственно под существующей командой Save As . в меню File добавляем разделитель и команды Print ., Print Preview и Print Setup

Откроем в редакторе акселераторов таблицу idr_main frame, чтобы задать клавиатурный акселератор для команды Print . (Ctrl+P). Добавим акселератор с идентификатором id_file_print и комбинацией клавиш Ctrl+P.

Теперь необходимо включить в файл определения ресурсов Ellipse некоторые дополнительные предопределенные ресурсы. Для этого выбираем команду Resource Includes . в меню View Developer Studio. В диалоговом окне Resource Includes добавляем конце текста в поле Compile-Time Directives следующую строку:

#include "afxprint.re"

Щелкаем на кнопке ОК, а после запроса Developer Studio подтверждаем свои действия. Добавление этой строки предписывает компилятору ресурсов добавить их опре­деления, содержащиеся в списке Afxprint.rc, которые задают несколько ресурсов, используемых для поддержки команд Print . и Print Preview программы (например, диалоговое окно Printing, отображаемое во время печати).

Модификация текста программы

Первый шаг модификации текста программы состоит в создании обработчика для новой команды Print Setup ., добавленной в меню File. Его не нужно писать самостоятельно, так как класс cwinApp предоставляет обработчик, называемый OnFilePrintSetup. Однако MFC не добавляет его в схему сообщений, т. е. теку­щая функция не получает управление при выборе команды Print Setup . Следова­тельно, его необходимо вручную добавить в схему сообщений класса приложения Ellipse. Для этого откроем файл Ellipse.cpp и добавим операторы, выделен­ные полужирным шрифтом, в определение схемы обработки сообщений.

////////////////////////////////////////////////////////////////

// Класс CMiniDrawApp

BEGIN_MESSAGE_MAP(CMiniDrawApp, CWinApp) //{{AFX_MSG_MAP(CMiniDrawApp)

//-Входы' схемы обработки сообщений мастера ClassWizard .

//}}AFX_MSG_MAP

// Команды работы с файлами документов • ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)

ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)

ON_COMMAND (ID_FILE_PRINT_SETUP, CWinApp: : OnFilePrintSetup) END MESSAGE MAP()

Новая запись в схеме сообщений приводит к тому, что при выборе команды PrintSetup . будет вызываться функция CWinApp:: OnFilePrintSetup. Функция ' OnFilePrintSetup отображает диалоговое окно PrintSetup, в котором нужно выбрать тип принтера и установить его параметры. Это все, что необходимо для поддержки команды PrintSetup .

Подобным образом класс cview предоставляет обработчики сообщений для стандартных команд меню Print и Print Preview. Эти обработчики необходимо активировать, добавив их в схему сообщений для класса представления программы Ellipse. Откроем файл Ellipse.cpp и добавим следующие две записи в конце схемы обработки сообщений.


Страница: