2013-04-19 236 views
7

Tôi mới sử dụng Đồ họa trong Visual C++. Tôi chỉ cố gắng tạo một hình chữ nhật đầy màu sắc. Cần giúp đỡ để sửa này ...Sử dụng FillRect() trong 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))); 

Lỗi này là:

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

+1

Thật sao? Tôi đã nghĩ rằng sẽ làm việc. Bạn có chắc chắn không có một "rect" ở đâu đó mà điều này áp dụng cho? –

+0

Đó có phải là lỗi hoặc cảnh báo không? – deepmax

Trả lời

4

này thường sẽ là một lời cảnh báo, không phải là một lỗi. Trong trường hợp này, nó cũng có vẻ là giả mạo.

sức mạnh làm việc tốt hơn nếu bạn khởi tạo nó một cái gì đó như:

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); 

Đừng chú ý sử dụng CreateSolidBrush - đúc một màu sắc để một HBRUSH dường như khó có khả năng làm việc.

+0

Cảm ơn, Nhưng nó không phải là làm cho hình chữ nhật được chỉ định. –

+0

@shubhanksrivastava: Nên sử dụng cùng tọa độ bạn đã chỉ định. Tôi không thể làm được gì nhiều nếu những điều đó là sai. Thành thật mà nói, các tọa độ mã hóa cứng gần như luôn luôn là sai. –

+0

Ngoài ra ở trên tôi đoán bạn có nghĩa là CreateSolidBrush (RGB (50,151,151)); –

0

Mã của bạn không thành công vì mã này:

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

Bạn không thể đúc một màu RGB để một HBRUSH trong bất kỳ cách có ý nghĩa. Cách duy nhất để có được HBRUSH là yêu cầu hệ thống cung cấp cho bạn.

Vì vậy, bạn cần tạo một bàn chải thực bằng một trong các hàm API cho mục đích đó. Ví dụ: CreateSolidBrush.

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

Khi bạn đã hoàn thành với bàn chải, hãy gọi DeleteObject để trả lại tài nguyên cho hệ thống.

Như quy tắc chung, mỗi khi bạn viết một diễn viên, hãy coi mã là rất đáng ngờ. Luôn cố gắng viết mã mà không có phôi.