|
Программирование >> Процедурные приложения
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(), ее можно не создавать. В нашем простом примере конструктор
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |