Программирование >>  Процедурные приложения 

1 ... 109 110 111 [ 112 ] 113 114 115 ... 150


EDITTEXT IDDJTITLE, 33,1, 106,12

LTEXT Number of terms: , -1,6, 23,70/ 8, NOT WS GROUP

EDITTEXT IDDJTERMS, 76,18, 32, 12

PUSHBUTTON ОК , IDOK, 25,52,24,14

PUSHBUTTON Cancel , IDCANCEL, 89,53,28,14 END

tifdef APSTUDIO INVOKED

1 TEXTINCLUDE DISCARDABLE BEGIN resource.hNO END

2 TEXTINCLUDE DISCARDABLE BEGIN

#define APSTUDIO HIDDEN SYMBOLSNrNn #include windows.h NrNn tundef APSTUDIO HIDDEN SYMBOLSNr\n #include afxres.h NrNn

NO END

3 TEXTINCLUDE DISCARDABLE BEGIN

NrNn

NO

#endif APSTUDIO INVOKED

#endif .11 Ресурсы для английского (США) языка

Текст файла FOURIER.CPP несколько сложнее, чем в предыдущем примере, поскольку программа должна поддерживать работу меню и двух диалоговых окон.

fourier.cpp

Построение ряда Фурье.

#include <afxwin.h> #include <string.h> #include <math.h>

#include fourierR.h идентификаторы ресурсов

#include fourier.h

int m cxClient, m cyClient;

char mytitle[80] = Title ;

int nterms = 1;

CTheApp theApp;

CMainWnd::CMainWnd() {

Create(AfxRegisterWndClass(CS HREDRAW I CS VREDRAW,

LoadCursor(NULL, IDC CROSS), (HBRUSH) (GetStockObject>{WlJJTE. BRUSH)

) NULL),

Fourier Series Application with the MFC , WS OVERLAPPEDWINDOW, rectDefault, NULL, FourierMenu );

void CMainWnd::OnSize(UINT,int x, int y) {

m cxClient = x;

m cyClient = y; }

void CMainWnd::OnPaint() {

CPaintDC dc(this);

static DWORD dwColor[9J= {

RGB(0,0, 0), черный

RGB (245,0, 0), красный

RGB(0, 245, 0), зеленый

RGB(0,0,245), синий



RGB(245,245, 0), желтый

RGB(245,0, 245), пурпурный

RGB(0, 245, 245), голубой

RGB(127,127, 127), серый

RGB(245, 245, 245)}; белый

int i, j, Ititle, ang; double y, yp; CBrush newbrush; CBrush* oldbrush; CPen newpen; CPen* oldpen;

задание области просмотра dc. SetMapMode (MM ISOTROPIC) ; dc.SetWindowExt (500,500);

dc. SetViewportExt (m cxClient, -m cyClient) ; dc.SetViewportOrg(m cxClient/20, m cyClient/2) ; ang = 0; yp = 0 . 0 ;

newpen.CreatePen(PS SOLID, 2, RGB(0,0, 0) ) ; oldpen = dc.SelectObject (Snewpen) ; рисование осей координат х и у

dc.MoveTo(0, 240); dc.LineTo(0, -240); dc.MoveTo(0, 0) ; dc.LineTo(400, 0) ; dc.MoveTo(0, 0) ;

рисование ряда Фурье

for(i = 0; i <= 400; i++) {

for(j = 1; j <= nterms; JH-+) (

y= (150.0/{ (2.0*j)-1.0)) * sin(((j*2.0)-1.0)*0.015708*ang); УР = УР +

dc.LineTo(i, (int)yp); УР -= УР; ang+t;

заливка внутренних областей графика сер1м цветом newbrush.CreateSolidBrush(dwColor [7]) ; oldbrush = dc.SelectObject (Snewbrush) ; dc.ExtFloodFill (150,10,dwColorfO],FLOODFILLBORDER) ; dc.ExtFloodFill (300,-10, dwColor[0], FLOODFILLBORDER)

вывод заголовка графика Ititle= strlen(mytitle) ;

dc.TextOut (200-(ltitle*8/2) , 185, mytitle, Ititle);

удаление кистей

dc. SelectObject (oldbrush) ;

newbrush.DeleteObject () ;

int CMainWnd::OnCreate(LPCREATESTRUCT) {

UpdateWindow(); return (0); }

void CMainWnd::OnAbout() {

CDialog about( AboutBox , this);

about.DoModal(); }

void CFourierDataDialog: :OnOK() {

GetDlgltemText (IDDJTITLE, mytitle, 80);



nterms = GetDlgItemInt(IDD TERMS, NULL, 0) CDialog: :OnOK();

void CMainWnd::OnFourierData() {

CFourierDataDialog dlgFourierData(this); if (dlgFourierData.DoModal()

== IDOK) ( InvalidateRect(NULL, TRUE); UpdateWindow(); } }; void CMainWnd::OnExit() { DestroyWindowO ; }

BEGIN MESSAGE MAP (CMainWnd, CFrameWnd)

on wm paint() on wm sizeo on wm create ( )

ON COMMAND(IDM ABODT, OnAbout) ! 6Sf %OMMAND(IDM FOUR., OnFourierData)

OCOMMAND(IDM EXIT, OnExit) END MESSAGE MAP ( )

BOOL CTheApp: : Initlnstance () { m pMainWnd = new CMainWndO; m pMainWnd->ShowWindow(m nCmdShow) ; m pMainWnd->UpdateWindow() ; return TRUE;

Файл FOURIER.H

Класс CMainWnd теперь содержит несколько обработчиков сообщений: OnPait (), OnSize(), OnCreate(), OnAbout(), OnFourierData(} И OnExit():

afx msg void OnPaint();

afx msg void OnSize(UINT, int, int); afx msg int OnCreate(LPCREATESTRUCT cs); af x msg void OnAbout ( ) ; afx msg void OnFourierData (); afx msg void OnExit();

Функция OnPait() вызывается автоматически, когда объекту CMainWnd поступает сообщение wm paint от Windows или от самого приложения. Функция OnSize() вызывается в ответ на сообщение wm size, которое генерируется при изменении размеров окна приложения. Информация о размерах необходима для динамического масштабирования содержимого окна. Функции OnCreate( ) передается структура, содержащая информацию о создаваемом окне: его размерах, стиле и других атрибутах. Функции OnAbout( ) , OnFourierData ( ) и OnExit ( ) определяются пользователем и вызываются при получении сообщений wm command, генерируемых при выборе соответствующих команд меню.

Для работы с диалоговыми окнами в MFC существует класс CDialog. Его можно непосредственно использовать для вывода простейших диалоговых окон, например окна About. В случае более сложных окон потребуется создать собственный класс. В нашем примере используется диалоговое окно, в котором пользователь может ввести заголовок для графика и целочисленное значение, задающее число членов ряда Фурье. Класс CFourierDataDialogпорождается от CDialog. Для ввода данных создается модальное окно, т.е. с приложением невозможно будет продолжать работу до тех пор, пока пользователь не введет данные и не закроет диалоговое окно. Объявление класса выглядит следующим образом:

class CFourierDataDialog : public CDialog

public:

CFourierDataDialog (CWnd* pParentWnd=NULL) : CDialog ( FourierData , pParentWnd)

{ }

virtual void OnOK();

Классы диалоговых окон, порождаемые от CDialog, могут иметь собственную схему сообщений. Правда, если переопределяются только функции OninitDialog(), ОпОК () и OnCancel(), ее можно не создавать. В нашем простом примере конструктор



1 ... 109 110 111 [ 112 ] 113 114 115 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика