Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <list>
- using namespace std;
- HINSTANCE iglobal;
- TCHAR klasa[] = TEXT("Klasa okna");
- TCHAR tytulokna[40];
- class figura
- {
- protected:
- HPEN pioro;
- HBRUSH pedzel;
- public:
- figura(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla);
- ~figura();
- virtual void rysuj(HDC hdc)=0;
- };
- figura::figura(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla):
- pioro(CreatePen(PS_SOLID,grubosc_piora,kolor_piora)),
- pedzel(CreateSolidBrush(kolor_pedzla))
- {}
- figura::~figura()
- {
- DeleteObject(pioro);
- DeleteObject(pedzel);
- }
- class elipsa : public figura
- {
- POINT punkty[2];
- public:
- elipsa(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla,POINT p[2]);
- void Rysuj(HDC hdc);
- };
- elipsa::elipsa(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla,POINT p[2]):
- figura(grubosc_piora,kolor_piora,kolor_pedzla)
- {
- for (int i=0;i<2;i++) punkty[i] = p[i];
- }
- class kwadrat : public figura
- {
- POINT wierzcholki[4];
- public:
- kwadrat(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla,POINT p[4]);
- void Rysuj(HDC hdc);
- };
- kwadrat::kwadrat(int grubosc_piora, COLORREF kolor_piora, COLORREF kolor_pedzla, POINT p[]):
- figura(grubosc_piora,kolor_piora,kolor_pedzla)
- {
- for (int i=0;i<4;i++) wierzcholki[i] = p[i];
- }
- void kwadrat::Rysuj(HDC hdc)
- {
- int wczesniejszy_hdc=SaveDC(hdc);
- SelectObject(hdc, pioro);
- SelectObject(hdc, pedzel);
- Polygon(hdc,wierzcholki,4);
- RestoreDC(hdc,wczesniejszy_hdc);
- }
- void elipsa::Rysuj(HDC hdc)
- {
- int wczesniejszy_hdc=SaveDC(hdc);
- SelectObject(hdc, pioro);
- SelectObject(hdc, pedzel);
- Ellipse(hdc,punkty[0].x,punkty[0].y,punkty[1].x,punkty[1].y);
- RestoreDC(hdc,wczesniejszy_hdc);
- }
- list <figura*> lista;
- list <figura*>::iterator it;
- LRESULT CALLBACK obslugakomunikatow(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
- { int ile=0;
- PAINTSTRUCT ps;
- switch (msg)
- {
- case WM_PAINT: BeginPaint(hwnd,&ps);
- if(lista.size()==0) TextOut(ps.hdc,200,200,L"Lista jest pusta",16);
- for(it=lista.begin(); it!=lista.end(); ++it)
- {
- (*it)->rysuj(ps.hdc);
- }
- EndPaint(hwnd,&ps);
- ile++;
- wsprintf(tytulokna,L"Rysowalem %d razy",ile);
- break;
- case WM_CREATE:
- break;
- case WM_CLOSE: PostQuitMessage(0);
- break;
- default: return DefWindowProc(hwnd,msg,wp,lp);
- }
- SetWindowText(hwnd,tytulokna);
- }
- BOOL rejestrujklase()
- {
- WNDCLASSEX wnd;
- wnd.cbClsExtra = 0;
- wnd.cbSize = sizeof(WNDCLASSEX);
- wnd.cbWndExtra = 0;
- wnd.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
- wnd.hCursor = 0;
- wnd.hIcon = 0;
- wnd.hIconSm = 0;
- wnd.hInstance = iglobal;
- wnd.lpfnWndProc = obslugakomunikatow;
- wnd.lpszClassName = klasa;
- wnd.lpszMenuName = 0;
- wnd.style = CS_DBLCLKS;
- if(RegisterClassEx(&wnd)==0)
- {
- MessageBox(0,TEXT("Nie zajestrowano klasy"), TEXT("BÅÄ d!"),MB_OK|MB_ICONERROR);
- PostQuitMessage(0);
- }
- return 0;
- }
- INT WINAPI WinMain (HINSTANCE In, HINSTANCE Prev, LPSTR lpCmdLine, INT nSwowCmd)
- {
- iglobal=In;
- MSG msg;
- rejestrujklase();
- wsprintf(tytulokna,L"Nic nie rysowalem");
- HWND okno=CreateWindowEx(0,klasa,tytulokna,WS_OVERLAPPEDWINDOW,200,200,500,400,0,0,iglobal,0);
- ShowWindow(okno,SW_SHOW);
- UpdateWindow(okno);
- POINT W1[4];
- W1[0].x= 50;
- W1[0].y= 50;
- W1[1].x= 400;
- W1[1].y= 50;
- W1[2].x= 50;
- W1[2].y= 350;
- W1[3].x= 400;
- W1[3].y= 350;
- //kwadrat k(2,RGB(200,200,200),RGB(100,100,100),W1);
- lista.push_back(&kwadrat(2,RGB(200,200,200),RGB(100,100,100),W1));
- while (GetMessage(&msg,okno,0,0)!=0)
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- UnregisterClass(klasa,iglobal);
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement