CPoint

Этот класс является необходимым для многих классов. Используется очень часто.

Он является оболочкой для структуры Windows - POINT.

typedef struct tagPOINT 
{
LONG x; // координата Х
LONG y; // координата Y
} POINT;

У этого класса нет папы - он сирота.

Для работы необходимо создать класс и объект класса. Все примеры Win32 Console!

Пример 1

Создает класс с неинициализированными Х и Y

CPoint MyPoint();		// и класс и объект
CPoint *MyPoint(); // только класс
MyPoint=new CPoint(); // а это только объект на

Пример 2

Создает обьект со значениями

CPoint MyPoint(1,2);	// догадались теперь х=1 а y=2 

Пример 3

Конструктор копий создает точнуб копию исходного CPoint, брата близнеца:

CPoint InPoint(1,2);
CPoint OutPoint(InPoint);

Пример 4

Из объекта CSize, это естественно, так как в объекте CSize тоже всего x и y.

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint InPoint(CSize(10,10));
cout << InPoint.x << " " << InPoint.y << endl;
}

результат 10 и 10, а вы что подумали ?

Пример 5

Из двойного слова. Удобно писать на диск и востанавливать.

При записи на диск записываются только данные, а при чтении обьект восстанавливается.

#include <iostream.h>
#include <afxwin.h>
void main()
{
DWORD d;
d=10;
CPoint InPoint(d);
cout << InPoint.x << " " << InPoint.y << endl;
}

Ну , что будет ? 10 и 0.

Пример 6

Смещает точку с использованием разных классов, а точнее изменяет х и y. Именно смещает, прибавляя значения к х и y:

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint MyPoint(10,10);
CPoint OfPoint(3,3);
CSize OfSize(4,-4);
MyPoint.Offset(-5,-5); // непосредственным значением
cout << MyPoint.x << " " << MyPoint.y << endl;
MyPoint.Offset(OfPoint); // другой точкой
cout << MyPoint.x << " " << MyPoint.y << endl;
MyPoint.Offset(OfSize); // классов CSize
cout << MyPoint.x << " " << MyPoint.y << endl;
}

Пример 7

Точки можно сравнивать

#include <iostream.h>
#include <afxwin.h>

void main()
{
CPoint C1Point(10,10);
CPoint C2Point(3,3);
CPoint C3Point(10,10);
cout << "C1== C2 ";
if (C1Point==C2Point)
cout << " равны ";
else
cout << " не раны " << endl;
cout << "C1==C3 ";
if (C1Point==C3Point)
cout << " равны ";
else
cout << " не равны " << endl;
}

Пример 8

Сравнивать можно и так:

#include 
#include
void main()
{
CPoint C1Point(10,10);
CPoint C2Point(3,3);
CPoint C3Point(10,10);
if (!(C1Point!=C3Point))
cout << " равны ";
else
cout << " не равны " << endl;
}

Пример 9

Можно складывать точки вот так:

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CPoint C2Point(3,3);
C1Point+=C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 10

И так тоже можно:

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CSize C2Point(3,3);
C1Point+=C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 11

Так тоже можно:

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CSize C2Point(3,3);
C1Point=C1Point+C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 12

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CPoint C2Point(3,3);
C1Point=C1Point+C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 13

Вычитать так:

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CPoint C2Point(3,3);
C1Point-=C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 14

И так !

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CSize C2Point(3,3);
C1Point-=C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 15

Вычитать так:

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CPoint C2Point(3,3);
C1Point=C1Point-C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 16

И так !

#include <iostream.h>
#include <afxwin.h>
void main()
{
CPoint C1Point(10,10);
CSize C2Point(3,3);
C1Point=C1Point-C2Point;
cout << C1Point.x << " " << C1Point.y << endl;
}

Пример 17

Запись и чтение CPoint в файл.

#include <fstream.h>	// файловый поток
#include <iostream.h> // стандартный поток
#include <afxwin.h> // без коментариев
void main()
{
// переменные
DWORD *dwTest;
WORD wTest[2];
CPoint CTestPoint(1234,1119); // Создали класс точки
//Запись
wTest[0]=(WORD)CTestPoint.x; //
wTest[1]=(WORD)CTestPoint.y; //Перенесли в WORD + WORD =DWORD !
ofstream ofs("test.dat",ios::binary); // открыли на запись
ofs.write((char*)&wTest,sizeof(wTest)); // записали
ofs.close(); // закрыли
// Чтение
ifstream ifs("test.dat",ios::binary); // открыли на чтение
ifs.read((char*)&wTest,sizeof(wTest)); // прочитали
ifs.close(); // закрыли
dwTest=(DWORD*)&wTest; // Адреса равны !
// проверка
CPoint TestPoint(*dwTest); // Востановить класс
cout << TestPoint.x << " " << TestPoint.y << endl; //Вывести на экран
}

Ну вот. Это мои варианты. Потратил 4 чашки кофе.