Этот класс является необходимым для многих классов. Используется очень часто.
Он является оболочкой для структуры 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 чашки кофе.