Contribution to International Economy

  • Манипуляция цветами на изображении
Манипуляция цветами на изображении
1. Общая харктеристика библиотеки классов Microsoft Foundation Classes
Компилятор Misrosoft Visual C++ предлагает мощную библиотеку классов Microsoft Foundation Classes (MFC), предназначенную для разработки 32-разрядных приложений, отвечающих всем стандартам и требованиям сегодняшнего дня. В нее инкапсулированы все API-функции Windows и дополнительно обеспечивается поддержка панелей инструментов, страниц свойств, технологии OLE, элементов ActiveX и многое другое. Она содержит готовые классы С++, используемые как для управления объектами в среде Windosw, так и для решения общесистемных задач, в частности, в библиотеке содержатся классы для управления файлами, строками, изображениями. Классы, управляющие стандартными диалоговыми панелями, определены в файле afxdlgs.h. Поэтому при использовании этих классов в приложении необходимо включить этот файл в исходный текст при помощи директивы #include.
Библиотека MFC позволяет программистам в подавляющем большинстве случаев полностью отстраниться от сообщений нижнего уровня и сосредоточиться на сообщениях более высокого уровня., она берет на себя значительную часть работы по обработке сообщений низшего уровня. В среде Windows реализована основополагающая концепция - независимость работы приложений от аппаратных средств.
Основные преимущества использования библиотеки классов MFC:
• Устраняются конфликты, связанные с совпадением имен стандартных и программных функций, а также переменных;
• Код и данные инкапсулируются в классах и доступ к ним ограничен;
• Обеспечивается наследование кода;
• Значительно сокращается размер кода.
Благодаря использованию библиотек MFC, программист получает возможность уделять больше внимания не разработке процедур взаимодействия приложения с Windows, а решению тех задач, для которых создается приложение.

2. Связывание приложения с контекстом устройства
Управление устройствами происходит посредством специальных программ – драйверов. Драйверы принимают информацию от приложения и передают ее устройству – монитору, принтеру, сканеру и т.п. Драйвер монитора, например, выбирает конкретный цвет из доступной палитры, вычисляет координаты каждого отображаемого объекта в системе координат экрана. Например, система с дисплеем VGA может отобразить меньший набор цветов, чем система с SVGA – дисплеем. Монохромный дисплей отображает только один цвет, варьируя его плотность. Монитор высокого разрешения отобразит больше данных, чем монитор с низким разрешением (или отобразит столько же, только с низшей проработкой). Драйвер устройства приспосабливает отображение к возможностям управляемого им дисплея. Связывается драйвер с приложением посредством специальной структуры данных, названной контекстом устройства.
Контекст устройства – это структура С++, которая содержит следующие атрибуты: рабочее поле окна, избранные для текущей операции перо, кисть и шрифт. Контекст устройства в каждый момент времени располагает только одним пером, кистью и шрифтом. Если требуется некоторую часть изображения прорисовать другим пером, надо создать новое перо и ввести его в контекст устройства вместо прежнего. Аналогично, если требуется залить контуры другой кистью, ее надо создать и «выбрать в контекст»
Рабочая область окна – это часть поверхности экрана, в которой приложение отображает текст, таблицу данных, картинку и пр. Библиотека MFC инкапсулирует функции графического интерфейса Windows (Grafic Device Interface – GDI) в свои классы контекста устройств.

3. Средства для работы приложения с графическим объектом
При создании приложения, работающего с графическим объектом, следует уметь обрабатывать сообщении WM_PAINT. Windows посылает это сообщение каждый раз, когда выполняется операция, требующая перерисовки изображения на экране. В правильно организованном приложении окно приложения получает это сообщение практически немедленно после запуска, для того чтобы данные, соответствующие исходному состоянию приложения сразу же стали доступны пользователю. Это сообщение генерируется функцией UpdateWindow() внутри функции WinMain().
Второе событие, требующее перерисовки окна, следовательно, генерирующее сообщение WM_PAINT – изменение размеров окна или его перекомпоновка на экране.
Третье событие, генерирующее сообщение WM_PAINT – необходимость затереть на экране прежние данные и вывести новые.
Сообщение WM_PAINT посылается при вызове функции ScrollWindow(), а также каждый раз, когда рабочая область окна перекрывается ниспадающим меню или диалоговым окном, после их закрытия.
Любая часть окна, которая была закрыта другим объектом, например, диалоговым окном, помечается как недействительная. Наличие недействительной области заставляет Windows послать приложению сообщение WM_PAINT, причем система отслеживает координаты такой области. Если окно закрыто несколькими объектами, Windows вычисляет координаты суммарной области., а не посылает несколько сообщений WM_PAINT для каждого отдельно взятого прямоугольного участка.
Для сообщения WM_PAINT макрос карты сообщение называется ON_ WM_PAINT, а соответствующая ему функция - OnPaint().
Класс CРaintDC – это специальный класс, используемый только для реакции на сообщения WM_PAINT. Объект класса CpaintDC не только создает контекст устройства, но также вызывает BeginPaint() – функцию API в конструкторе класса и функцию EndPaint() – в деструкторе.
В MFC обычно используются файлы заголовков двух типов. Файлы первого типа описывают порождение классов приложений от базовых классов MFC. Их имена совпадают с именами приложений и имеют расширение Н. Файлы второго типа содержат идентификаторы элементов меню и диалоговых окон, а также описание различных констант. Для распознания файлов этого типа в их именах добавляется буква R, что означает “Resource” (ресурс).
Наличие метода OnPaint()позволяет изменять содержимое рабочей области окна приложения. Эта функция автоматически вызывается всякий раз, когда объекту CmainWnd передается сообщение WM_PAINT.
Макрос DECLARE_MESSAGE_MAP применяется во всех MFC-приложениях он сигнализирует о том, что в классе организуется собственная схема обработки сообщений. Разработчики Microsoft рекомендуют использовать схемы сообщений, а не просто вызовы виртуальных функций, так как благодаря этому можно значительно сократить размер программного кода.
Файл AFXWIN.H выполняет роль шлюза в библиотеку MFC. Через него подключаются все файлы заголовков, включая WINDOWS.H. Использование этого файла упрощает создание предварительно скомпилированных файлов заголовков. Предварительная компиляция части программы позволяет сократить время, затрачиваемое на повторное построение приложения.
В функции OnPaint() создается массив dwColor, в котором хранятся девять RGB-значений цветов для используемых кистей и перьев.
Static DWORD dwColor(9) = (RGB(0,0,0), // черный
RGB(255,0,0), // красный
RGB(0,255,0), // зеленый
RGB(0,0,255), // синий
RGB(255,255,0), // желтый
RGB(255,0,255), // пурпурный
RGB(0,255,255), // голубой
RGB(127,127,127), // серый
RGB(255,255,255)) // черный
Классы СBrush и CPen позволяют создавать объекты кистей и перьев, которые могут использоваться любыми функциями класса CDC и его потомков (классов, связанных с контекстом устройств). Кисти могут иметь сплошную и штриховую заливку, а также заливку с применением растрового узора. Перья рисуются сплошной (PC_SOLID), штриховой (PS_DASH), пунктирной (PS_DOT), штрихпунктирной (PS_DASHDOT) и штрихточечной (PS_DASHDOTDOT) линиями. Синтаксис создания объектов кистей и перьев%
Cbrush newbrush;
Cbrush* oldbrush;
Cpen newpen;
Cpen* oldpen;
Объект пера задается функцией СreatePen(). Чтобы провести на экране черную сплошную линию толщиной в шесть логических единиц, следует записать код:
NewPen.CreatePen(PS_Solid,6,dwColor(0));
OldPen=dc.SelectObject(&newpen);
dcMoveTo(50,120);
dc.LineTo(450,300);
//Удаление пера
dc.SelectObject(oldpen);
newpеn.DeleteObject;
Работа с кистями организуется аналогично. В следующем фрагменте кода создается кисть с заливкой горизонтальными и вертикальными штрихами (HC_CROSS) синего цвета, рисуется закругленный прямоугольник с черным контуром и заливается с помощью выбранной кисти:
newbrush.CreateHatcBrush(MS_CROSS,dwColor(3));
oldbrush=dc.SelectObject(&newbrush);
dc.RoundRect(60,110,150,20,20);
// Удаление кисти
dc.SelectObject(oldbrush);
newbrush.DeleteObject();
Для определения установленного цвета можно обратиться к методу GetColor класса CCOLORDialog/. Данный метод возвращает значение COLORREF, соответствующее выбранному цвету. При помощи метода GetSavedCustomColors класса CCOLORDIALOG можно определить дополнительные цвета.

4. Описание программы манипуляции с цветом графического изображения
Разработанная на языке Visual C++ 6.0 , программа Graph демонстрирует основные возможности классов библиотеки MFC для работы с изображениями, а именно возможности класса CGraphAPP. Она может быть использовано в качестве стартовой для разработки других приложений, работающих с графическими изображениями. Программа разработана с помощью мастера AppWizard – универсального генератора динамических шаблонов. В созданный мастером шаблон добавлен программный код, выполняющий требуемые манипуляции с графическими объектами.
Созданы две экранные формы: AboutBox и GraphDialog. В экранной форме AboutBox размещены 3 метки с надписями – характеристиками программы и командная кнопка «ОК». В экранной форме GraphDialog размещена командная кнопка «ПУСК», нажатие которой инициирует выполнение программы. В рабочем поле этой формы в процессе выполнения программы будут размещены графические примитивы, на которых демонстрируются возможности изменения градаций серого цвета средствами библиотеки классов MFC.
В этом приложении собраны модули, которые используются при работе с графическими изображениями. В него входят следующие структурные единицы:
graph.dsp - этот файле содержит информацию, используемая на уровне проекта при разработке простого приложения или части более сложного проекта (.dsp)
graph.h - это основной файл заголовков приложения. Он включает в себя
спецификации заголовков других модулей (включенных в Resource.h) и декларирует класс CGraphApp в приложении.
graph.cpp - это основной файл приложения, включающий в себя класс CGraphApp.
graph.rc - это список всех ресурсов, используемых приложением для Microsoft Windows. Он включает в себя иконки, карты, курсоры, хранящиеся в подиректории RES. Этот файл можно редактировать в Microsoft Visual C++.
graph.clw - в этом файле находится информация, использованная мастером
ClassWizard при редактирования исходных классов и добавления новых классов. ClassWizard использует этот файл для хранения информации, требуемой для создания и редактирования карт сообщений, данных карт диалога и создания прототипов функций памяти
resgraph.ico - здесь находятся иконки, которые использует приложение. Они определяются в основном файле ресурсов graph.rc.
resgraph.rc2 - этот файл содержит ресурсы, которые нельзя изменять средствами Microsoft Visual C++.
StdAfx.h, StdAfx.cpp - эти файлы используется для построения и компиллляции заголовков (PCH) fайлов, называемых graph.pch, и перекомпиляции типов файлов, называемых StdAfx.obj.
В разработанном диалоговом приложении (диалоговое – т.к. не содержит документов) в прямоугольной области экранной формы окна размещены графические примитивы, а именно 5 эллипсов, окрашенных в различные градации серого цвета. В приведенном ниже фрагменте кода приложения выполняется прорисовка в экранной форме прямоугольника и заполнение его черным цветом : RGB( 0,0,0). Далее организуется в цикле изменение выбранного цвета от 0 до 255 (градации серого цвета) : RGB( i*temp, i*temp, i*temp). Прорисовываются эллипсы и закрашиваются их области установленным цветом. Для оживления рисунка изменяются координаты центров ХО, УО и радиусы RO эллипсов:
dc2.Ellipse( XO[i] - int(RO[i]/2) , YO[i] - int(RO[i]/2) , XO[i] + int(RO[i]/2) , YO[i] + int(RO[i]/2) );
int temp;
dc2.FillSolidRect( 0, 0, XMAX, YMAX, RGB( 0,0,0) );
for( i = 0; i < COL2; i++ )
{
temp = 255 / COL2;
br.CreatePen(PS_SOLID, (int)RO[i], RGB( i*temp, i*temp, i*temp) );
dc2.SelectObject( &br );
dc2.Ellipse( XO[i] - int(RO[i]/2) , YO[i] - int(RO[i]/2) ,
XO[i] + int(RO[i]/2) , YO[i] + int(RO[i]/2) );
}
dc.BitBlt( XMIN, YMIN , XMAX, YMAX , &dc2, 0,0, SRCCOPY );
}
Выход из программы осуществляется щелчком «мышью» по элементу окна «Х».
5. Листинг программы Graph
graph.cpp : Определение классов, работающих в приложении.
//
#include "stdafx.h"
#include "graph.h"
#include "graphDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CGraphApp
BEGIN_MESSAGE_MAP(CGraphApp, CWinApp)
//{{AFX_MSG_MAP(CGraphApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGraphApp construction
CGraphApp::CGraphApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CGraphApp object
CGraphApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CGraphApp initialization
BOOL CGraphApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CGraphDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
// graphDlg.cpp : implementation file
//
#include "stdafx.h"
#include "graph.h"
#include "graphDlg.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define COL 300
#define COL2 10
int XMIN = 0, YMIN = 0, XMAX, YMAX, XCENTER, YCENTER;
int X[COL], Y[COL], XS[COL], R = 3, C[COL];
int XO[COL2], YO[COL2], XOCENTER, YOCENTER ;
double T2, T = 0, DT = 0.01, PDT = 0.002, XL = 2, YL = 2, DXL = 0.01, DYL = 0.01;
double ROX = 80, DRX = 0.1, ROY = 80, DRY = -0.1, DRO[COL2], RO[COL2];
BOOL StartFlag;
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
afx_msg void OnDestroy();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGraphDlg dialog
CGraphDlg::CGraphDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGraphDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CGraphDlg)
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CGraphDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGraphDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CGraphDlg, CDialog)
//{{AFX_MSG_MAP(CGraphDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_START, OnButtonStart)
ON_WM_SIZE()
ON_WM_TIMER()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGraphDlg message handlers
BOOL CGraphDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Устанавливаются иконки для этого диалога
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Устанавливается большая иконка SetIcon(m_hIcon, FALSE); // Устанавливается маленькая иконка
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
void CGraphDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CGraphDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CClientDC dc( this );
CPen br;
CBitmap bit;
CDC dc2;
bit.CreateCompatibleBitmap( &dc, XMAX, YMAX );
dc2.CreateCompatibleDC(&dc);
dc2.SelectObject( &bit );
int temp;
dc2.FillSolidRect( 0, 0, XMAX, YMAX, RGB( 0,0,0) );
for (int i = 0; i < COL2; i++ )
{
temp = 255 / COL2;
br.CreatePen(PS_SOLID, (int)RO[i], RGB( i*temp, i*temp, i*temp) );
dc2.SelectObject( &br );
dc2.Ellipse( XO[i] - int(RO[i]/2) , YO[i] - int(RO[i]/2) ,
XO[i] + int(RO[i]/2) , YO[i] + int(RO[i]/2) );
}
dc.BitBlt( XMIN, YMIN , XMAX, YMAX , &dc2, 0,0, SRCCOPY );
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CGraphDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CGraphDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
XMAX = cx - 100;
YMAX = cy;
// TODO: Add your message handler code here
}
void CGraphDlg::SetBeginPosition()
{
srand( (unsigned)time( NULL ) );
XCENTER = XMAX / 2;
YCENTER = YMAX / 2;
for( int i=0; i<COL; i++ )
{
X[i] = int((float)rand() / RAND_MAX * XMAX);
Y[i] = int((float)rand() / RAND_MAX * YMAX);
XS[i] = int((float)rand() / RAND_MAX * 3);
C[i] = int((float)rand() / RAND_MAX * 255);
}
int temp = 60 / COL2;
for( i=0; i<COL2; i++ )
{
RO[i] = i*temp;
DRO[i] = 0.1;
}
}
void CGraphDlg::OnButtonStart()
{
// TODO: Add your control notification handler code here
SetBeginPosition();
SetTimer( 1, 100, NULL );
}
void CGraphDlg::Start()
{
CClientDC dc( this );
CPen br;
CBitmap bit;
CDC dc2;
bit.CreateCompatibleBitmap( &dc, XMAX, YMAX );
dc2.CreateCompatibleDC(&dc);
dc2.SelectObject( &bit );
int temp;
dc2.FillSolidRect( 0, 0, XMAX, YMAX, RGB( 0,0,0) );
for (int i = 0; i < COL2; i++ )
{
temp = 255 / COL2;
br.CreatePen(PS_SOLID, (int)RO[i], RGB( i*temp, i*temp, i*temp) );
dc2.SelectObject( &br );
dc2.Ellipse( XO[i] - int(RO[i]/2) , YO[i] - int(RO[i]/2) ,
XO[i] + int(RO[i]/2) , YO[i] + int(RO[i]/2) );
}
dc.BitBlt( XMIN, YMIN , XMAX, YMAX , &dc2, 0,0, SRCCOPY );
}
void CGraphDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
for( int i=0; i<COL; i++ )
{
X[i] += XS[i];
if( X[i] > XMAX ) X[i] -= XMAX;
}
XL += DXL;
YL += DYL;
if( (XL >= 3) || (XL <= 1) ) DXL=-DXL;
if( (YL >= 3) || (XL <= 1) ) DYL=-DYL;
XOCENTER = XCENTER + int(sin(cos(T2)) * 50);
YOCENTER = YCENTER + int(cos(T2) * 50);
ROX += DRX;
ROY += DRY;
if( ROX < 30 || ROX > 120 ) DRX = - DRX;
if( ROY < 30 || ROY > 120 ) DRY = - DRY;
for( i = 0; i < COL2; i++ )
{
XO[i] = XOCENTER + int(sin( (double)i/XL + T) * ROX);
YO[i] = YOCENTER + int(cos( (double)i/YL + T) * ROY);
RO[i] += DRO[i];
if( RO[i] < 5 || RO[i] >= 60 ) DRO[i]=-DRO[i];
}
T2+=0.01;
T+=DT;
DT+=PDT;
if( (DT > 0.2) || (DT < -0.2) ) PDT = -PDT;
Start();
CDialog::OnTimer(nIDEvent);
}
void CAboutDlg::OnDestroy()
{
CDialog::OnDestroy();
// TODO: Add your message handler code here
KillTimer( 1 );
}
// stdafx.cpp : source file that includes just the standard includes
// graph.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
Файлы заголовков
// graph.h : main header file for the GRAPH application
//
#if !defined(AFX_GRAPH_H__4887A7A5_8218_11D3_90D3_0060083232E0__INCLUDED_)
#define AFX_GRAPH_H__4887A7A5_8218_11D3_90D3_0060083232E0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CGraphApp:
// See graph.cpp for the implementation of this class
//
class CGraphApp : public CWinApp
{
public:
CGraphApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGraphApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CGraphApp)
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_GRAPH_H__4887A7A5_8218_11D3_90D3_0060083232E0__INCLUDED_)
// graphDlg.h : header file
//
#if !defined(AFX_GRAPHDLG_H__4887A7A7_8218_11D3_90D3_0060083232E0__INCLUDED_)
#define AFX_GRAPHDLG_H__4887A7A7_8218_11D3_90D3_0060083232E0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CGraphDlg dialog
class CGraphDlg : public CDialog
{
// Construction
public:
void Start( void );
void SetBeginPosition( void );
CGraphDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CGraphDlg)
enum { IDD = IDD_GRAPH_DIALOG };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CGraphDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
// Generated message map functions
//{{AFX_MSG(CGraphDlg)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnButtonStart();
afx_msg void OnSize(UINT nType, int cx, int cy);
afx_msg void OnTimer(UINT nIDEvent);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_GRAPHDLG_H__4887A7A7_8218_11D3_90D3_0060083232E0__INCLUDED_)
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by graph.rc
//
#define IDM_ABOUTBOX 0x0010
#define IDD_ABOUTBOX 100
#define IDS_ABOUTBOX 101
#define IDD_GRAPH_DIALOG 102
#define IDD_ZZZ_DIALOG 103
#define IDR_MAINFRAME 128
#define IDC_BUTTON_START 1000
#define IDC_XMAX 1003
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1004
#define _APS_NEXT_SYMED_VALUE 104
#endif
#endif
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__4887A7A9_8218_11D3_90D3_0060083232E0__INCLUDED_)
#define AFX_STDAFX_H__4887A7A9_8218_11D3_90D3_0060083232E0__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdisp.h> // MFC Automation classes
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__4887A7A9_8218_11D3_90D3_0060083232E0__INCLUDED_)


Другие работы по теме: