Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Шпаргалка

Читайте также:
  1. От злобы учителя меня спасает шпаргалка
  2. Шпаргалка в прошлом и в настоящем

1. Включить описание классов MFC:

#include <afxwin.h>

2. Объявить класс производный от CWinApp:

3. class CMyApp: public CWinApp

.......

4. Объявить переменную этого класса:

CMyApp theApp;

5. Объявить класс производный от CFrameWnd:

6. class CMainWnd: public CFrameWnd

.......

7. В конструкторе класса производного от CFrameWnd вызвать функцию Create() и выбрать параметры в ней на свой вкус:

Create(NULL,"Step1",WS_OVERLAPPEDWINDOW,rectDefault,NULL,NULL);

8. Переопределить функцию InitInstance() класса производного от CWinApp.

9. В функции InitInstance() создать объект производный от CFrameWnd и присвоить указателю m_pMainWnd адрес этого объекта.

m_pMainWnd=new CMainWnd();

10. Проверить указатель на корректность:

ASSERT(m_pMainWnd);

11. Вызвать функции класса производного от CFrameWnd для прорисовки на экране:

12. m_pMainWnd->ShowWindow(SW_SHOW);// Показать окно

13. m_pMainWnd->UpdateWindow(); // Обновить окно

 

14. Закончить выполнение функции, убедив MFC, что все нормально:

return TRUE;

15. Откомпилировать, собрать и запустить программу, насладившись пустым окном и именем Step1.

Создание класса диалогового окна. Использование класса диалогового окна. Организация вывода диалогового окна на экран. За кулисами. Использование элемента управления типа список. Использование элементов управления типа переключатель.

Класс CDialog - базовый класс, используемый для отображения диалоговых окон на экране. Диалоговые окна имеют два типа: модальный и немодальный. Модальное диалоговое окно должно быть закрыто пользователем прежде, чем прикладная программа продолжается. Немодальное диалоговое окно позволяет пользователю отображать диалоговое окно и возвращаться к другой задаче без того, чтобы отменить или удалять диалоговое окно.

Объект CDialog - комбинация шаблона диалога и класса наследника CDialog. Используйте редактора диалога, чтобы создать шаблон диалога и сохранять его в ресурсе, затем используйте ClassWizard, чтобы создать класс, полученный из CDialog.

Диалоговое окно, подобно любому другому окну, получает сообщения от Windows. В диалоговом окне, Вы особенно заинтересованы в уведомительных сообщениях обработки из средств элементов управления блока диалога, именно так пользователь взаимодействует с Вашим диалоговым окном. ClassWizard просматривает потенциальные сообщения, сгенерированные каждым элементом управлением в Вашем диалоговом окне, и Вы можете выбирать, которые сообщения Вы желаете обработать. ClassWizard затем добавляет соответствующие входы карты сообщения и функции членства драйвера сообщения к новому классу для Вас. Вы только должны записать специфический для приложения код в функциях членства драйвера.

Функции GetFileName и GetFilePath по сути аналогичны, и предназначены для вывода диалогового окна выбора файла

(при этом можно указать стартовую папку для поиска файла, и тип\расширение выбираемого файла)

Функция GetFilenamesCollection позволяет выборать сразу несколько файлов в одной папке.

Функция GetFolderPath работает аналогично, только служит для вывода диалогового окна выбора папки.

Диалоговые окна Переключатели используются для предоставления во время установки до четырех взаимоисключающих вариантов выбора и возврата выбранного значения. Доступно три диалоговых окна Переключатели: Переключатели (2 варианта выбора), Переключатели (3 варианта выбора) и Переключатели (4 варианта выбора). Эти три диалоговых окна идентичны и различаются только количеством переключателей; каждое из них может быть добавлено к проекту развертывания лишь один раз.

Эти диалоговые окна содержат соответственно два, три и четыре переключателя с подписями и дополнительными метками для предоставления сведений пользователю. Тексты этих меток задаются во время разработки в окне Свойства. Каждый переключатель имеет дополнительные свойства для указания значения по умолчанию и варианта, выбираемого по умолчанию.

На следующем рисунке показано типичное диалоговое окно Переключатели (2 варианта выбора), отображаемое во время установки.

Во многих диалоговых окнах присутствует еще один компонент - блок списка. Этот список позволяет вам просматривать и выбирать запись из списка переменной длины, не выходя из диалогового окна.

Если в списке появляется мерцающий курсор и вы хотите что-то най ти, можно ввести слово (или его первые буквы), после чего IDE выполнит его поиск.

Активизировать блок списка можно щелкнув на нем кнопкой "мыши" или выбрав подсвеченную букву заголовка списка (либо нажать клавишу Tab или клавиши управления курсором, пока он не будет подсвечен). После вывода списка для его просмотра можно использовать полосу прокрутки или клавиши стрелок (вверх и вниз) на клавиатуре.

133. Научная графика: графическое представление функции с использованием меню и окон диалога. Заголовочный файл 24FOUR.H. Заголовочный файл ресурсов 24FOURR.H, файл описания ресурсов 24FOUR.RC и файл описания окна диалога 24FOUR.DLG.

Следующий пример 24FOUR изобразит в рабочей области окна график суммы ряда Фурье. Это приложение использует два ресурса Windows: меню и окна диалога.

С ростом сложности приложений увеличивается и количество файлов, не обходимых для их построения. Для этой программы требуется файл определения модуля (только при создании приложения Windows З.х) 24FOUR.DEF, заголовочный файл 24FOUR.H, заголовочный файл для ресурсов 24FOURR.H (с дополнительным "R" в имени), файл описания ресурсов 24FOUR.RC, файл с описанием окна диалога 24FOUR.DLG и файл с исходным текстом программы 24FOUR.CPP.

Ниже приведен листинг файла определения модуля 24FOUR.DEF:

NAME 24FOUR

DESCRIPTION 'Drawing A Fourier Series Waveform'

; Изображение суммы ряда Фурье

EXETYPE WINDOWS

STUB 'WINSTUB.EXE'

CODE PRELOAD MOVEABLE DISCARDABLE

DATA PRELOAD MOVEABLE MULTIPLE

HEAPSIZE 4096

Заголовочный файл 24FOUR.H, листинг которого приведен ниже, содержит определения классов.

class CMainWnd: public CFrameWnd

{

public:

CMainWnd();

afx_msg void OnPaint();

afx_msg void OnSize(UINT,int,int);

afx_msg int OnCreate(LPCREATESTRUCT cs);

afx_msg void OnAbout();

afx_msg void OnFourierData();

afx_msg void OnExit();

DECLARE_MESSAGE_MAP();

};

class CTheApp: public CWinApp

{

public:

virtual BOOL InitInstance();

};

class CFourierDataDialog: public CModalDialog

{

public:

CFourierDataDialog(CWnd* pParentWnd= NULL)

: CModalDialog("FourierData", pParentWnd)

{ }

virtual void OnOK();

};

Функция OnPaint() вызывается автоматически, когда объекту класса CMainWnd от приложения или от Windows поступает сообщение WM_PAINT. OnSize() вызывается, когда приходит сообщение WM_SIZE, вызванное изменением размеров окна. Эта информация пригодится при масштабировании графика по размерам окна. OnCreate() указывает на структуру, несущую информацию о создаваемом окне. Там содержатся размер, стиль и другие параметры окна. OnAboat(), OnFourierData() и OnExit() — функции, которые реагируют на сообщения WM_COMMAND. Эти сообщения возникают, когда пользователь выбирает команду меню или окна диалога.

Следующий заголовочный файл содержит уже привычные идентификационные номера для меню и окон диалога. Этот файл называется 24FOURR.H.

#define IDM_FOUR 100

#define IDM_ABOUT 110

#define IDM_EXIT 120

#define IDD_TERMS 200

#define IDD_TITLE 201

IDM_FOUR, IDM_ABOUT и IDM_EXIT используются для обозначения пунктов меню, a IDD_TERMS и IDD_TITLE необходимы для окна диалога ввода данных.

Файл описания ресурсов 24FOUR.RC содержит описание меню и значка. Описание окна диалога помещено в отдельный файл.

#include <windows.h>

#include <afxres.h>

#include "24FOURR.h"

FourierMenu MENU

BEGIN

POPUP "Fourier Data"

BEGIN

MENUITEM "Fourier Data...", IDM_FOUR

MENUITEM "Fourier About...", IDM_ABOUT

MENUITEM "Exit", IDM_EXIT

END

END

rcinclude 24FOUR.dlg

В файл 24FOUR.RC включена ссылка на значок, созданный с помощью Icon Editor. Этот значок будет использован для обозначения приложения.

В файле 24FOUR.DLG содержатся описания двух окон диалога: простого окна "О Программе" (About) и окна для ввода данных.

Заголовочный файл ресурсов 24FOURR.H, файл описания ресурсов 24FOUR.RC и файл описания окна диалога 24FOUR.DLGиспользуются компилятором ресурсов для создания единственного файла с готовыми ресурсами Windows.

134. Файл исходного текста 24FOUR.СРР. Создание нового класса CMainWnd. Определение размера рабочей области окна. Рисование графика. Окно диалога "О Программе". Окно диалога для ввода данных. Обработка команды OnExit().

1,2. Можно задать параметры объекта CMainWnd путем создания класса окна при помощи AfxRegisterWndClass. Класс окна имеет много полей, четыре из которых легко изменить: стиль, курсор, фон и значок свернутого окна.

Небольшой фрагмент текста, приведенный здесь, демонстрирует синтаксис для изменения курсора на стандартный курсор в виде крестика (IDC_CROSS) и задания кисти, которая закрасит фон белым (WHITE_BRUSH).

CMainWnd::CMainWnd()

{ Create((AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,

LoadCursor(NULL,IDC_CROSS),

(HBRUSH) (GetStockObject(WHITE_BRUSH)),NULL)),

"Fourier Series Foundation Class Application",

WS_OVERLAPPEDWINDOW,rectDefault,NULL,"FourierMenu");}

Функции Create() передается имя меню для окна.

3. Метод OnSize()определяет размер рабочей области данного окна. Когда размер окна изменяется, оно получает сообщение WM_SIZE. Как показано ниже, размер окна запоминается в двух переменных, m_cxClient и т_су Client.

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

{ m_cxClient=x; m_cyClient=y; }

4. Чтобы избежать проблем масштабирования, для рисования создается масштабируемое поле.

Как показано в приведенном фрагменте кода, вызовом функции SetMapMode() режим отображения заменяется на MM_ISOTROPIC. Этот режим использует произвольные единицы для задания координат. dc.SetMapMode (MM_ISOTROPIC);

Следующая строка задает протяженность координатных осей по х и у в 500 единиц.

dc.SetWindowExt(500,500);

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

dc.SetViewportExt (m_cxClient, -m_cyClient);

В этом случае все 500 единиц на координатных осях попадут в окно.

Как показано далее, физическое начало отсчета устанавливается на середине оси у и на небольшом расстоянии (одной двадцатой ширины окна) от левого края по оси х.

dc.SetViewportOrg(m_cxClient/20,m_cyClient/2);

Затем в окне изображаются координатные оси х и у.

Метод рисования графика суммы ряда Фурье использует два цикла for. Переменная i управляет значением угла для функции синуса, а переменная j соответствует текущему номеру гармоники. Каждая точка на графике представляет собой сумму всех гармоник для данного значения угла. Таким образом, если потребовать от приложения изобразить ряд из 1000 гармоник, программе придется проделать 400 000 вычислений.

// рисуем; выводим график суммы ряда Фурье

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

{ for(j= 1; j<= nterms; j++)

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

dc.LineTo(i,(int) yp); yp-= yp; ang++;}

При помощи функции LineTo() точки графика соединяются последовательно, благодаря чему график изображается сплошной линией. Внутренняя область графика будет заполнена серым цветом. Для этого вызывается функция ExtFloodFill(), которой в качестве аргументов передаются координаты точек внутри заполняемого пространства и цвет границы. Параметр FLOODFILLBORDER указывает, что требуется заполнить все пространство до границы заданного цвета.

// Готовимся к закрашиванию графика

// кистью newbrush. newbrush.CreateSolidBrush(dwColor[7]);

newbrush.CreateSolidBrush(dwColor[7]);

oldbrush= dc.SelectObject(&newbrush);

dc.ExtFloodFill(150,10,dwColor[0],FLOODFILLBORDER);

dc.ExtFloodFill(300,-10,dwColor[0],FLOODFILLBORDER);

В конце работы выводится заголовок графика, а затем удаляется созданная ранее кисть.

// заголовок графика

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

// удаляем кисть

dc.SelectObject(oldbrush); newbrush.DeleteObject();

Все объекты, выводимые в рабочую область, масштабируются по размерам окна.

5. Окно диалога "О Программе" используется, чтобы сообщить сведения о программе, ее разработчиках, дате регистрации авторских прав и так далее.

Когда пользователь выбирает пункт меню Fourier About..., создается модальное окно диалога. Процедура обработки OnAbout() занимает лишь несколько строк текста:

void CMainWnd::OnAbout()

{ CModalDialog about("AboutBox",this); about.DoModal();}

Конструктору класса CModalDialog в качестве окна-родителя передается указатель на текущее окно. Для этого используется указатель this, который обозначает используемый в данный момент объект. Функция DoModal() обеспечивает отображение окна диалога на экране. При нажатии на кнопку ОК окно диалога исчезает с экрана.

6. Окно диалога, воспринимающее ввод пользователя можно вызвать, выбрав в меню пункт Fourier Data...Пользователь может ввести заголовок графика и целое число, задающее количество гармоник ряда Фурье. Если пользователь нажал кнопку ОК, окно диалога закрывается, а рабочая область окна перерисовывается.

Как уже говорилось, класс CFourierDataDialog порожден от CModalDialog в заголовочном файле 24FOUR.H. Обратите внимание, что именно здесь приложение получает данные. Эти данные были введены пользователем в окно диалога. Вот текст, извлекающий эту информацию после нажатия кнопки ОК:

void CFourierDataDialog::OnOK()

{ GetDlgItemText(IDD_TITLE,mytitle,80);

nterms= GetDlgItemInt(IDD_TERMS,NULL,0); CModalDialog::OnOK();}

Функция GetDlgItemText() заносит информацию о заголовке в виде строки в переменную mytitle. Положение этой информации в окне диалога задается константой IDD_TITLE. Целое число вводится аналогично функцией GetDlgItemInt(). Его идентифицирует константа IDD_TERMS, а значение запоминается в nterms. Второй параметр GetDlgItemText() используется для сообщения об ошибках перевода текста в число, но в данном примере не используется. Если третий параметр GetDlgItemInt() не ноль, функция будет воспринимать числа со знаком. В данном случае возможны только положительные числа.

7. Последний пункт в меню приложения — Exit (выход). При выполнении этой команды окно уничтожается вызовом DestroyWindow():

void CMainWnd::OnExit()

{ DestroyWindow();}

 

Меню приложения дает пользователю возможность завершить программу, не прибегая к оконному меню.

 

Линейчатая диаграмма с использованием меню и окон диалога. Заголовочный файл 24BAR.H. Заголовочный файл ресурсов 24BARR.H, файл описания ресурсов 24BAR.RC и файл описания окна диалога 24BAR.DLG. Исходный текст программы 24BAR.CPP.

Приложение Windows предоставляет возможность произвести необходимые расчеты, но и обеспечить удобное визуальное представление результата. Решение этих задач связано с использованием классического шаблона просторечия Windows-приложения.

Шаблон состоит из функции WinMain, которая организовывает бесконечный цикл обработки сообщений.

Сложность подготовки законченного Windows-приложения связана с расширением некоторых типов данных, используемых в WinMain и функции окна.

Чаще всего имена этих типов имеют префикс h перед именем привычного типа.

При использовании графических возможностей необходимо учитывать рисуемого окна. Он определяет систему координат отображаемых пикселей. Чаще всего используется нормальная система координат (0;0), соответствующая левому верхнему углу.

Одновременно необходимо учитывать, что для отображения графиков пользователь может вводить свою систему координат. Это значит, что она будет отличаться от нормальной смещением по оси x и y.

Замечание: смещение по двум координатам выбирается из разумных соображений.

Псевдоалгоритм подготовки графического отображения функции:

1. математически описать отображаемую функцию

2. определить вид используемого графика

3. определить писатели окна (WinMain)

4. создать функцию окна

Задача: построить линейный график функции.

Исходные значения функции и другие атрибуты отражаются с помощью диалогового окна.

Windows-приложение использует диалоговое окно для которого обязательно описываются ресурсы.

Файл ресурсов может состоять из нескольких составляющих. Обычно в него входит resource.h (содержит описания идентификаторов).

Например:

идентификатор заголовка

#define IDD_TITLE 1004

#define IDD_XLABEL 1006

#define IDD_YLABEL 1007

Замечание: все элементы, входящие в диалоговое окно должны быть определены в этом файле. Если определено меню приложения, то оно тоже должно быть описано в resourse.rc.

Пример:

IDR_MENU | MENU

BEGIN

POPUP «Line_Chart_Input»

BEGIN

MENUITEM «About…», 40001

MENUITEM «Input…», 40002

MENUITEM «Exit», 40003

END

END

Меню по команде Input загружает само диалоговое окно ввода данных для построения графика.

В этом окне задаются заголовок окна (caption), вид элементов (LTEXT и др.).

При описании Windows-приложения определены константы максимального количества значений пар x и y и описаний callback-функции.

Диалоговое окно ввода данных:

BOOL CALLBACK LineDiaProc (HWND, UINT, WPARAM, LPARAM)

Значение текстовых полей диалогового окна устанавливается по умолчанию.

Название графика:

static wchar_t SZ TString[80]=L’’line chart title area’’;

wchar_t SZ XValues [80]=L’’10,20,30,…’’;

wchar_t SZ YValues [80]=L’’5,10,…’’;

Функции WinMain содержат интервалы парламентов окна.

Вызываемая диалоговая функция, описываемая как прототип, имеет вид:

BOOL CALLBACK LineDiaProc (HWND hdlg, UINT messg, WPARAM wParam, LPARAM lParam)

{

GetDlgItemText (hdlg IDD_TITLE, (LPWSTR) SZ TString, 80);

}

Построение самого графика осуществляется с помощью WndProc.

Линейная диаграмма отображает данные в виде серии точек, соединенных линией. Этот тип диаграмм наиболее подходит при отображении данных для большого количества групп (например, общий объем продаж за последние несколько лет).

Пример взят из книги Щупака «Win32 API», т.к. больше ничего стоящего не нашла.

include <windows.h>

#include <math.h>

#include "KWnd.h"

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

void DrawDiagram (HWND, HDC);

#define Pi 3.14159265

 

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

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;

KWnd mainWnd("Временная диаграмма напряжения переменного электрического тока", hInstance, nCmdShow, WndProc);

//KWnd mainWnd("Пример окна", hInstance, nCmdShow, WndProc, NULL, 300, 400, 500, 450);

while (GetMessage(&msg, NULL, 0, 0))//выполняем цикл обработки сообщений до закрытия приложения

//извлекаем очередное сообщение

{

TranslateMessage(&msg);//вызов этой функции нужен тогда, когда идет обработка данных, вводимых

//с клавиатуры. Преобразует пару сообщений WM_KEYDOWN и WM_KEYUP в

//сообщение WM_CHAR, которое содержит код символа (wParam) в виде значения

//типа TCHAR

 

DispatchMessage(&msg);//передает структуру msg обратно в Windows.

}

 

return msg.wParam;

}

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

 

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)//заголовок оконной процедуры

//LRESULT - значение типа LONG, возвращаемое оконной процедурой

//hWnd - дескриптор окна, которому адресовано сообщение

//uMsg - код сообщения

//wParam и lParam - параметры сообщения

{

HDC hDC;

PAINTSTRUCT ps;

switch (uMsg)//обработка оконных сообщений

{

case WM_PAINT://сообщение заставляет окно перерисовать свою клиентскую область

hDC=BeginPaint(hWnd, &ps);//hWnd - дескриптор окна, полученный через аргумент оконной процедуры

//&ps - адрес структуры ps типа PAINTSTRUCT

 

DrawDiagram(hWnd, hDC);//вызов основной функции программы

EndPaint(hWnd, &ps);//освобождаем контекст устройства

break;

case WM_DESTROY://разрушение окна

PostQuitMessage(0);

break;

default:

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

return 0;

}

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

void DrawDiagram (HWND hwnd, HDC hdc)//в данной функции сосредоточена основная работа программы

{

RECT rect;//рез. работы функции помещается в переменную rect типа RECT

GetClientRect (hwnd, &rect);//получение размеров клиентской области окна

const int xVE=rect.right-rect.left;//горизонт. набариты области просмотра

const int yVE=rect.bottom-rect.top;//вертикальные габариты области просмотра

const int xWE=xVE;//горизонтальные габариты окна

const int yWE=yVE;//вертикальные габариты окна

double nPixPerVolt = yVE / 1000.0;//масштабный коэффициент

double nPixPerMs = xVE / 60.0; //n Pixels Per Millisec // масштабный коэффициент

 

SetMapMode (hdc, MM_ISOTROPIC); //MM_ISOTROPIC - режим отображения

SetWindowExtEx(hdc, xWE, yWE, NULL);

SetViewportExtEx(hdc, xVE, -yVE, NULL);//преобразование отражения, значения по оси у возрастают

//снизу вверх

SetViewportOrgEx(hdc, 10 * nPixPerMs, yVE/2, NULL);//установка начала кооринат строго посередине

//по вертикали и сотступом на 10 металогич. ед. слева по горизонтали

//одна металогическая единица по горизонтали=1 мс; по вертикали - 1 В

const int tMin=0; //ms //металогические величины, являющиеся константами

const int tMax=40; //ms

const int uMin=-400; //V

const int uMax=400; //V

const int tGridStep=5;

const int uGridStep=100;

int x, y;

char* xMark[]={"0", "5", "10", "15", "20", "25", "30", "35", "40"};

char* yMark[]={"-400", "-300", "-200", "-100", "0", "100", "200", "300", "400"};

//Сетка

HPEN hPen0=CreatePen(PS_SOLID, 1, RGB(0, 160, 0));//HPEN-тип, зарезервир. для деск. логич. перьев

//PS_SOLID-стиль пера: сплошная линия, выравн. по центру

//1-толщина линии в логических единицах

//RGB(0, 160, 0)-макрос, задающий цвет линии

HPEN hOldPen=(HPEN)SelectObject(hdc, hPen0);//SelectObject-выбор объекта в контексте устройства

//hdc-дескриптор контекста устройства

//hPen0-дескриптор GDI-объекта

//"t" и "u" - металогические переменные

int u=uMin;//построение сетки по напряжению

//переход к логическим (физическим) величинам осуществляется через коэффиц. nPixPerMs и nPixPerVolt

int xMin=tMin * nPixPerMs;

int xMax=tMax * nPixPerMs;

for (int i=0; i<9; ++i)

{

y = u * nPixPerVolt;

MoveToEx(hdc, xMin, y, NULL);//изменение текущей позиции пера

//hdc-дескриптор контекста устройства

//xMin- х-координата новой текущей позиции

//у-координата новой текущей позиции

//NULL-предыдущая позиция пера(не важна)

LineTo(hdc, xMax, y);//рисование прямой линии; xMax и у - координаты конечной точки

TextOut(hdc, xMin-40, y+8, yMark, strlen(yMark));//вывод текстовой строки

//xMin-40- х-координата стартовой позиции

//y+8 - у-координата стартовой позиции

//yMark-указатель на симвоьную строку

u+=uGridStep;

}

int t = tMin;//построение сетки по времени

int yMin = uMin * nPixPerVolt;

int yMax = uMax * nPixPerVolt;

for (i=0; i<9; ++i)

{

x = t * nPixPerMs;

MoveToEx (hdc, x, yMin, NULL);

LineTo(hdc, x, yMax);

TextOut(hdc, x-6, yMin-10, xMark, strlen(xMark));

t+=tGridStep;

}

//Ось "х"

HPEN hPen1=CreatePen(PS_SOLID, 3, RGB(0, 0, 0));

SelectObject(hdc, hPen1);

MoveToEx(hdc, 0, 0, NULL);

LineTo(hdc, xMax, 0);

static LOGFONT lf;//структура LOGFONT определена в файле wingdi.h.

lf.lfPitchAndFamily=FIXED_PITCH | FF_MODERN;//шаг и семейство шрифта (моноширинный шрифт)

lf.lfItalic=TRUE;//закрашиваем курсивный шрифт

lf.lfWeight=FW_BOLD;//желаемый вес (жирность) шрифта в инт. от 0 до 1000 (700)

lf.lfHeight=20;//желаемая высота шрифта в логических единицах

lf.lfCharSet=DEFAULT_CHARSET;//код набора символа=1

lstrcpy ((LPSTR)&lf.lfFaceName, "Arial");

HFONT hFont0=CreateFontIndirect(&lf);

HFONT hOldFont=(HFONT) SelectObject(hdc, hFont0);

SetTextColor(hdc, RGB(0, 0, 200));

TextOut(hdc, xMax+10, 10, "t (ms)", 6);

//Ось "у"

MoveToEx(hdc, 0, yMin, NULL);

LineTo(hdc, 0, yMax);

TextOut(hdc, -10, yMax+30, "u (V)", 5);

//График

HPEN hPen2=CreatePen(PS_SOLID, 5, RGB(200, 0, 100));

SelectObject(hdc, hPen2);

int tStep=1;

double radianPerMs = 2 * Pi / 20;//масштабный коэффициент

const double uAmplit=311.17; //volt

t = tMin;

MoveToEx(hdc, 0, 0, NULL);

while (t<=tMax) //кусочно-линейная аппроксимация функции sin(x)

{

u = uAmplit * sin(t * radianPerMs);//текущее значение

LineTo(hdc, t * nPixPerMs, u * nPixPerVolt);//отрезок соединяет предыдущее и текущее значение

t+=tStep;

}

//Заголовок

char* title="Диаграмма напряжения переменного тока";

lf.lfItalic=FALSE;

lf.lfWeight=FW_BOLD;

lf.lfHeight=35;

HFONT hFont1=CreateFontIndirect(&lf);

SelectObject(hdc, hFont1);

SetTextColor(hdc, RGB(0, 200, 0));

TextOut(hdc, 0, yMax+70, title, strlen(title));

SelectObject(hdc, hOldPen);

SelectObject(hdc, hOldFont);

}

 

Создание приложений с использованием библиотеки MFC. Особенности Microsoft Foundation Classes, относящиеся к Windows 95 и NT. Простое приложение, использующее MFC и несколько графических примитивов. Изучаем WIN32MFCTMP.CPP. Запуск программы WIN32MFCTMP.

 

Приложение MFC является исполняемым приложением для Windows на основе библиотеки Microsoft Foundation Class (MFC). MFC – это базовый набор (библиотека) классов, написанных на языке С++ и предназначенных для упрощения и ускорения процесса программирования для Windows. Библиотека содержит многоуровневую иерархию классов, насчитывающую около 200 членов. Они дают возможность создавать Windows-приложения на базе объектно-ориентированного подхода. С точки зрения программиста, MFC представляет собой каркас, на основе которого можно писать программы для Windows.

Простенький пример.

Создадим приложение, отображающее на экране маленькую диалоговую панель, которая содержит строку текста. В этом приложении используется единственный класс, наследованный от базового класса CWinApp.

Файл first.cpp

#include <afxwin.h> /* Включаемый файл для MFC. Класс CFirstApp - главный класс приложения. Наследуется от базового класса CWinApp. */

class CFirstApp:public CWinApp { public: /*Переопределение метода InitInstance, предназначенного для инициализациии приложения. */

virtual BOOL InitInstance(); }; /* Создание объекта приложения класса CFirstApp. */

CFirstApp theApp; /* Метод InitInstance Переопределение виртуального метода InitInstance класса CWinApp. Он вызывается каждый раз при запуске приложения.*/

BOOL CFirstApp::InitInstance() { AfxMessageBox("First MFC-application");

return FALSE; }

В этом приложении определен только один класс - CFirstApp, наследованный от базового класса CWinApp. В класс CFirstApp входит метод InitInstance. Кроме того, определена одна глобальная переменная - theApp.

 

137. Научная графика с использованием ресурсов: меню, окна диалога и мультимедийного звука. Заголовочный файл WIN32MFCFOUR.H.

 

61. Выбор семейств шрифтов. Рамка окна. Заголовок окна. Кнопка оконного меню. Оконное меню. Кнопка свертывания окна. Кнопка развертывания окна.


Дата добавления: 2015-09-03; просмотров: 91 | Нарушение авторских прав


Читайте в этой же книге: Изменение цвета фона. Особенности поддержки Win32 в WIN32SWP.C. Функция WinMain(). | Изменение цвета фона. Функция окна. Обработка сообщений WM_PAINT. Обработка сообщения WM_DESTROY. Функция DefWIndowProc(). | Круговые диаграммы Windows NT. Столбиковая диаграмма. Приложение BAR.CPP. | Имена файлов и классов. Создание приложения. Создание простого диалогового приложения MFC. | Базы данных. Поддержка составных документов. Внешний вид приложения и другие опции. Другие опции. | Все начинается с CObject. Важнейшие классы библиотеки. Создание приложения MFC Windows. Выбор количества окон, которые будут поддерживаться приложением. | Получение и освобождение контекста отображения | Создание проектов в Visual Studio. Изменение настройки параметров проекта. Текст программы, формируемый AppWizard. | Библиотека MFC | Содержимое MDI-приложения. Простое диалоговое приложение. |
<== предыдущая страница | следующая страница ==>
Создание проекта| Енохианских посланий. 1 страница

mybiblioteka.su - 2015-2024 год. (0.067 сек.)