Этот класс является необходимым для многих классов. Используется очень часто.
Он является оболочкой для структуры Windows - POINT.
typedef struct tagPOINT { LONG x; // координата Х LONG y; // координата Y } POINT;
У этого класса нет папы - он сирота.
Для работы необходимо создать класс и объект класса. Все примеры Win32 Console!
Создает класс с неинициализированными Х и Y
CPoint MyPoint(); // и класс и объект CPoint *MyPoint(); // только класс MyPoint=new CPoint(); // а это только объект на
Создает обьект со значениями
CPoint MyPoint(1,2); // догадались теперь х=1 а y=2
Конструктор копий создает точнуб копию исходного CPoint, брата близнеца:
CPoint InPoint(1,2); CPoint OutPoint(InPoint);
Из объекта 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, а вы что подумали ?
Из двойного слова. Удобно писать на диск и востанавливать.
При записи на диск записываются только данные, а при чтении обьект восстанавливается.
#include <iostream.h> #include <afxwin.h> void main() { DWORD d; d=10; CPoint InPoint(d); cout << InPoint.x << " " << InPoint.y << endl; }
Ну , что будет ? 10 и 0.
Смещает точку с использованием разных классов, а точнее изменяет х и 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; }
Точки можно сравнивать
#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; }
Сравнивать можно и так:
#include #include void main() { CPoint C1Point(10,10); CPoint C2Point(3,3); CPoint C3Point(10,10); if (!(C1Point!=C3Point)) cout << " равны "; else cout << " не равны " << endl; }
Можно складывать точки вот так:
#include <iostream.h> #include <afxwin.h> void main() { CPoint C1Point(10,10); CPoint C2Point(3,3); C1Point+=C2Point; cout << C1Point.x << " " << C1Point.y << endl; }
И так тоже можно:
#include <iostream.h> #include <afxwin.h> void main() { CPoint C1Point(10,10); CSize C2Point(3,3); C1Point+=C2Point; cout << C1Point.x << " " << C1Point.y << endl; }
Так тоже можно:
#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; }
#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; }
Вычитать так:
#include <iostream.h> #include <afxwin.h> void main() { CPoint C1Point(10,10); CPoint C2Point(3,3); C1Point-=C2Point; cout << C1Point.x << " " << C1Point.y << endl; }
И так !
#include <iostream.h> #include <afxwin.h> void main() { CPoint C1Point(10,10); CSize C2Point(3,3); C1Point-=C2Point; cout << C1Point.x << " " << C1Point.y << endl; }
Вычитать так:
#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; }
И так !
#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; }
Запись и чтение 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 чашки кофе.