2013-04-19 11 views
7

Jestem nowy w używaniu grafiki w Visual C++. Po prostu próbuję zrobić prostokąt wypełniony kolorem. Potrzebują pomocy, aby rozwiązać ten ...Używanie FillRect() w C++

RECT rect; 
HDC hdc; 
hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL); 
rect.left=30; 
rect.right=100; 
rect.top=50; 
rect.bottom=200; 
FillRect(hdc,&rect,(HBRUSH)(RGB(40,151,151))); 

Błąd jest:

ERROR: The variable 'rect' is being used without being initialized.

+1

Naprawdę? Myślałem, że to zadziała. Czy na pewno nie ma innego "prostego" gdzieś, do czego odnosi się to? –

+0

Czy to jest błąd, czy ostrzeżenie? – deepmax

Odpowiedz

4

To będzie normalnie być ostrzeżeniem, a nie błąd. W tym przypadku wydaje się również, że jest fałszywa.

To może działać lepiej, jeśli go zainicjować coś takiego:

HDC hdc=CreateDC(TEXT("DISPLAY"),NULL,NULL,NULL); 
RECT rect = {30, 50, 100, 200}; 
HBRUSH brush = CreateSolidBrush(RGB(50, 151, 151)); 

FillRect(hdc, &rect, brush); 

DeleteObject(brush); 

Należy pamiętać użycie CreateSolidBrush - casting kolor do HBRUSH wydaje się mało prawdopodobne, aby pracować.

+0

Dzięki, ale nie tworzy określonego prostokąta. –

+0

@shubhanksrivastava: Powinien używać tych samych współrzędnych, które określiłeś. Nie mogę wiele zrobić, jeśli te są złe. Prawdę mówiąc, zakodowane na stałe współrzędne są prawie zawsze błędne. –

+0

Również powyżej Myślę, że chodziło Ci o CreateSolidBrush (RGB (50, 151, 151)); –

0

Twój kod nie powiedzie się z powodu tego kodu:

(HBRUSH)(RGB(40,151,151)) 

Nie można rzutować kolor RGB do HBRUSH w żaden znaczący sposób. Jedynym sposobem uzyskania numeru HBRUSH jest poproszenie systemu, aby go dał.

Musisz więc utworzyć prawdziwy pędzel, korzystając z jednej z funkcji API do tego celu. Na przykład CreateSolidBrush.

HBRUSH hBrush = CreateSolidBrush(RGB(40,151,151)); 

Po zakończeniu szczoteczką, zadzwoń DeleteObject aby powrócić do zasobów systemu.

Zgodnie z ogólną zasadą, za każdym razem, gdy piszesz obsadę, uważaj kod za bardzo podejrzany. Zawsze staraj się pisać kod bez rzutowania.