[C++]Rysowanie prostokątów myszą.

bamsye123
Użytkownik
Użytkownik
Posty: 60
Rejestracja: 11 paź 2014, o 15:36
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 29 razy

[C++]Rysowanie prostokątów myszą.

Post autor: bamsye123 »

Witam. Mam problem z napisaniem programu, który pozwalał by rysować 3 prostokąty w różnych kolorach ( po narysowaniu 3 znowu mamy rysować takie same prostokąty o tych samych kolorach, taka jakby pętla). Niestety nie mam pomysłu od czego zacząć. Myślałem nad stworzeniem klasy ale próbowałem na różne sposoby i wywala mi pełno błędów. Nie proszę o rozwiązanie lecz o wskazówki jak się do tego zabrać.

Oto kod : ( Jest to tylko część programu w którym mam dokonać zmian ponieważ reszta kodu jest od wykładowcy i nic mam tam nie mieszać )

Kod: Zaznacz cały

#include "MsgHandlers.h"
#include "Utils.h"
#include <time.h>
#include <math.h>
#include <cstdio>

/************************ Zmienne globalne ************************/

int ClientWidth, ClientHeight;
BOOL EraseBkgnd = TRUE;
RECT MyRect;
bool InDrawState = false;
HPEN MyPen;
HBRUSH MyBrush;

const int NumOfRectangles = 3;

class Tangle // TO MOJE!!
{
    
};


/******************** Procedury obsługi zdarzeń ********************/

//Procedura wywoływana przed pokazaniem okna (na początku działania programu).
//Tutaj można przeprowadzić początkową inicjalizację zmiennych, obiektów itp.
void OnCreate(HWND hwnd)
{
    MyPen = CreatePen(PS_SOLID, 3, RGB(0,0,255));
    MyBrush = CreateSolidBrush(RGB(255,255,0));

    SetTimer(hwnd, 1, 25, NULL);
}


//Procedura wywoływana po każdej zmianie rozmiaru okna
void OnSize(HWND hwnd, int width, int height, WPARAM wParam)
{
    ClientWidth = width;
    ClientHeight = height;

    MyRect.left = width * .25;
    MyRect.top = height * .25;
    MyRect.right = width * .75;
    MyRect.bottom = height * .75;

    InvalidateRect(hwnd, NULL, EraseBkgnd);
}


//Procedura wywoływana co 25 ms (czas ustawia się trzecim argumentem
// funkcji SetTimer() wywoływanej w OnCreate).
void OnTimer(HWND hwnd, WPARAM timerID)
{
    if(InDrawState)
        return;
    MyRect.left += RandRange(-10, 10);
    MyRect.top += RandRange(-10, 10);
    MyRect.right += RandRange(-10, 10);
    MyRect.bottom += RandRange(-10, 10);

    InvalidateRect(hwnd, NULL, EraseBkgnd);
}


//Procedura wywoływana w celu odświeżenia zawartości okna.
//Wyłącznie tutaj powinno się przeprowadzać rysowanie.
void OnPaint(HWND hwnd, HDC hdc)
{

    HPEN oldPen;//dedklaracja uchwytu
    HBRUSH oldBrush;//deklaracja pędzla


    oldPen      = (HPEN)SelectObject(hdc, MyPen);
    oldBrush    = (HBRUSH)SelectObject(hdc, MyBrush);

    Rectangle(hdc, MyRect.left, MyRect.top, MyRect.right, MyRect.bottom);

    SelectObject(hdc, oldPen);
    SelectObject(hdc, oldBrush);


}


//Procedura wywoływana po naciśnięciu klawisza klawiatury.
void OnKeyDown(HWND hwnd, WPARAM keyCode)
{
    switch (keyCode)
    {
    case VK_LEFT:
        break;
    case VK_UP:
        break;
    case VK_RIGHT:
        break;
    case VK_DOWN:
        break;
    case 0x43: //klawisz C
        break;
    case 0x45: //klawisz E
        EraseBkgnd ^= 0x00000001;
        break;
    case 0x52: //klawisz R
        break;
    case 0x53: //klawisz S
        break;
    }
    //InvalidateRect(hwnd, NULL, EraseBkgnd);
}


//Procedura wywoływana po poruszeniu wskaźnika myszy.
void OnMouseMove(HWND hwnd, int x, int y, WPARAM wParam)
{
    if(InDrawState)
    {
    MyRect.right   = x;
    MyRect.bottom  = y;
    InvalidateRect(hwnd, NULL, EraseBkgnd);
    }


}


//Procedura wywoływana po naciśnięciu lewego przycisku myszy.
void OnLButtonDown(HWND hwnd, int x, int y, WPARAM wParam)
{
    if(!InDrawState)
    {
    MyRect.left = x;
    MyRect.top  = y;
    InDrawState = true;
    SetCapture(hwnd);//okno przejmuje kontrolę nad myszą.
    }
}


//Procedura wywoływana po zwolnieniu lewego przycisku myszy.
void OnLButtonUp(HWND hwnd, int x, int y, WPARAM wParam)
{
    if(InDrawState)
    {
    MyRect.right   = x;
    MyRect.bottom  = y;
    InDrawState = false;
    ReleaseCapture();
    InvalidateRect(hwnd, NULL, EraseBkgnd);
    }

}


//Procedura wywoływana przed zniszczeniem okna (przed końcem działania programu).
//Tutaj można zwolnić zaalokowane zasoby.
void OnDestroy(HWND hwnd)
{
    DeleteObject(MyPen);
    DeleteObject(MyBrush);
    KillTimer(hwnd, 1);

}
ODPOWIEDZ