Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.69 KB | None | 0 0
  1. #include <windows.h>
  2. #include <list>
  3. using namespace std;
  4.  
  5. HINSTANCE iglobal;
  6. TCHAR klasa[] = TEXT("Klasa okna");
  7. TCHAR tytulokna[40];
  8.  
  9.  
  10. class figura
  11. {
  12. protected:
  13.     HPEN pioro;
  14.     HBRUSH pedzel;
  15. public:
  16.     figura(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla);
  17.     ~figura();
  18.     virtual void rysuj(HDC hdc)=0;
  19. };
  20.  
  21. figura::figura(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla):
  22. pioro(CreatePen(PS_SOLID,grubosc_piora,kolor_piora)),
  23. pedzel(CreateSolidBrush(kolor_pedzla))
  24. {}
  25.  
  26. figura::~figura()
  27. {
  28.     DeleteObject(pioro);
  29.     DeleteObject(pedzel);
  30. }
  31.  
  32. class elipsa : public figura
  33. {
  34.     POINT punkty[2];
  35. public:
  36.     elipsa(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla,POINT p[2]);
  37.     void Rysuj(HDC hdc);
  38. };
  39.  
  40. elipsa::elipsa(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla,POINT p[2]):
  41.     figura(grubosc_piora,kolor_piora,kolor_pedzla)
  42.     {
  43.         for (int i=0;i<2;i++)   punkty[i] = p[i];
  44.     }
  45.  
  46. class kwadrat : public figura
  47. {
  48.     POINT wierzcholki[4];
  49. public:
  50.     kwadrat(int grubosc_piora,COLORREF kolor_piora, COLORREF kolor_pedzla,POINT p[4]);
  51.     void Rysuj(HDC hdc);
  52. };
  53.  
  54. kwadrat::kwadrat(int grubosc_piora, COLORREF kolor_piora, COLORREF kolor_pedzla, POINT p[]):
  55.     figura(grubosc_piora,kolor_piora,kolor_pedzla)
  56.     {
  57.         for (int i=0;i<4;i++)       wierzcholki[i] = p[i];
  58.     }
  59.  
  60. void kwadrat::Rysuj(HDC hdc)
  61. {
  62.     int wczesniejszy_hdc=SaveDC(hdc);
  63.     SelectObject(hdc, pioro);
  64.     SelectObject(hdc, pedzel);
  65.     Polygon(hdc,wierzcholki,4);
  66.     RestoreDC(hdc,wczesniejszy_hdc);
  67. }
  68.  
  69. void elipsa::Rysuj(HDC hdc)
  70. {
  71.     int wczesniejszy_hdc=SaveDC(hdc);
  72.     SelectObject(hdc, pioro);
  73.     SelectObject(hdc, pedzel);
  74.     Ellipse(hdc,punkty[0].x,punkty[0].y,punkty[1].x,punkty[1].y);
  75.     RestoreDC(hdc,wczesniejszy_hdc);
  76. }
  77.  
  78.  
  79.  
  80. list <figura*> lista;
  81. list <figura*>::iterator it;
  82.  
  83. LRESULT CALLBACK obslugakomunikatow(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
  84. {   int ile=0;
  85.     PAINTSTRUCT ps;
  86.     switch (msg)
  87.     {
  88.     case WM_PAINT:      BeginPaint(hwnd,&ps);
  89.                         if(lista.size()==0) TextOut(ps.hdc,200,200,L"Lista jest pusta",16);
  90.                        
  91.                         for(it=lista.begin(); it!=lista.end(); ++it)
  92.                             {
  93.                                 (*it)->rysuj(ps.hdc);
  94.                             }
  95.  
  96.  
  97.                         EndPaint(hwnd,&ps);
  98.                         ile++;
  99.                         wsprintf(tytulokna,L"Rysowalem %d razy",ile);
  100.         break;
  101.     case WM_CREATE:
  102.         break;
  103.     case WM_CLOSE:      PostQuitMessage(0);
  104.         break;
  105.     default: return DefWindowProc(hwnd,msg,wp,lp);
  106.     }
  107.     SetWindowText(hwnd,tytulokna);
  108. }
  109.  
  110. BOOL rejestrujklase()
  111. {
  112.     WNDCLASSEX wnd;
  113.     wnd.cbClsExtra = 0;
  114.     wnd.cbSize = sizeof(WNDCLASSEX);
  115.     wnd.cbWndExtra = 0;
  116.     wnd.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
  117.     wnd.hCursor = 0;
  118.     wnd.hIcon = 0;
  119.     wnd.hIconSm = 0;
  120.     wnd.hInstance = iglobal;
  121.     wnd.lpfnWndProc = obslugakomunikatow;
  122.     wnd.lpszClassName = klasa;
  123.     wnd.lpszMenuName = 0;
  124.     wnd.style = CS_DBLCLKS;
  125.    
  126.     if(RegisterClassEx(&wnd)==0)
  127.     {
  128.         MessageBox(0,TEXT("Nie zajestrowano klasy"), TEXT("Błąd!"),MB_OK|MB_ICONERROR);
  129.         PostQuitMessage(0);
  130.     }
  131.     return 0;
  132. }
  133.  
  134. INT WINAPI WinMain (HINSTANCE In, HINSTANCE Prev, LPSTR lpCmdLine, INT nSwowCmd)
  135. {
  136.     iglobal=In;
  137.     MSG msg;
  138.    
  139.     rejestrujklase();
  140.    
  141.     wsprintf(tytulokna,L"Nic nie rysowalem");
  142.  
  143.     HWND okno=CreateWindowEx(0,klasa,tytulokna,WS_OVERLAPPEDWINDOW,200,200,500,400,0,0,iglobal,0);
  144.     ShowWindow(okno,SW_SHOW);
  145.     UpdateWindow(okno);
  146.  
  147.     POINT W1[4];
  148.     W1[0].x= 50;
  149.     W1[0].y= 50;
  150.     W1[1].x= 400;
  151.     W1[1].y= 50;
  152.     W1[2].x= 50;
  153.     W1[2].y= 350;
  154.     W1[3].x= 400;
  155.     W1[3].y= 350;
  156.  
  157.     //kwadrat k(2,RGB(200,200,200),RGB(100,100,100),W1);
  158.     lista.push_back(&kwadrat(2,RGB(200,200,200),RGB(100,100,100),W1));
  159.  
  160.     while (GetMessage(&msg,okno,0,0)!=0)
  161.     {
  162.         TranslateMessage(&msg);
  163.         DispatchMessage(&msg);
  164.     }
  165.    
  166.     UnregisterClass(klasa,iglobal);
  167.     return msg.wParam;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement