문제

나는 C ++에 새로운 것이고 게임을 만들려고 노력하고 있습니다. 직사각형의 2D 배열 rect_grid가 있습니다. 서명되지 않은 짧은 2D 배열 그리드가 있습니다. wm_create 동안 직사각형 배열을 채 웁니다

WM_PAINT 이벤트는 배열의 모든 요소에 대해 직사각형을 그립니다. 사각형의 색상은 그리드 값 [x] [y]의 값을 기준으로합니다.

다운 키를 누르면 그리드 [1] [xmove] = 다른 색상으로 설정하여 직사각형 중 하나의 색상을 변경하여 클라이언트 사각형을 무효화합니다.

기본적으로 일어나는 일은 한동안 잘 작동하지만 결국에는 물건을 그리는 것을 멈추는 것입니다. 디버그 중에 Xmove 변수를 확인했는데 그리드 값과 물건으로 확인했으며 모든 것이 정상입니다. 페인트 이벤트에서 for 루프를 제거하고 1 개의 특정 사각형에 초점을 맞추면 결코 실패하지 않지만, 한 번에 한 번에 모든 것을 다시 작성하려고하면 약 20 번의 그림을 멈 춥니 다. 이것을 원인 할 수있는 것은 무엇입니까? 나는 C ++를 처음 접했고 제대로 그림을 그리거나 오버플로 등을 일으키지 않는다고 내기.

누구든지 무엇이 잘못되고 있는지 또는 올바른 방법을 설명 할 수 있다면 정말 감사합니다. Google 에서이 예와 같은 것을 찾을 수 없었습니다. 감사

편집하다:

나는 3 개의 글로벌 브러쉬를 사용하고 있습니다. hbrush a; hbrush b; hbrush c;

그리고 내가 그들을 수정할 때, 나는 항상 a = makebrush (num)라고 말합니다.

AMI 브러시를 제대로 사용하고 있습니까?

도움이 되었습니까?

해결책

내 첫 번째 추측, 당신이 총 GDI/C ++ 초보자라면 아마도 많은 펜과 브러시를 만들고 있다는 것입니다. 이들은 Windows에서 제한된 자원입니다. 자원에 세금을 부과하기 전에 많은 것만 만들 수 있습니다. 따라서 브러시와 펜과 창문 등을 한 번에 모두 만들고 재사용하거나 완료되면 올바르게 폐기하십시오. "성경"의 사본을받는 것이 좋습니다 (http://www.amazon.com/programming-windows%C2%AE-Fifth-microsoft/dp/157231995x/ref=sr_1_1?ie=Utf8&s=Books&qid=125278457&sr=8-1) 그리고 그림에 관한 장을 읽습니다.

편집하다: 브러시를 올바르게 수정하는 것처럼 들리지 않지만 MakeBrush의 코드를 볼 수 없으므로 모르겠습니다. 당신은 아마도 무대 뒤에서 많은 브러시를 만들고있을 것입니다. 그리고 당신은 그것을 알지 못합니다. 진지하게, Petzold의 책 사본을 받고 한두 시간을 보냅니다. 나중에 머리에 더 많은 머리카락이 생길 것입니다! ;-)

다른 팁

모든 GDI 예제에서 'CreatePen'또는 'CreateSolidBrush'에 이어 삭제 객체가 나타납니다. 이것은 창에서 자원이 제한되어 있기 때문에 완료되었을 때 삭제하지 않으면 자원이 부족할 수 있기 때문입니다.

PAINTSTRUCT Ps;
HDC hDC = BeginPaint(hWnd, &Ps);
HBRUSH NewBrush = CreateSolidBrush(RGB(250, 25, 5));

SelectObject(hDC, NewBrush);
Rectangle(hDC, 20, 20, 250, 125);
DeleteObject(NewBrush);
EndPaint(hWnd, &Ps);

'deleteobject'호출을 포함하는 것을 잊어 버린 경우 사용 가능한 모든 브러시를 사용한 후에는 문제가 발생합니다. 실제로 시도하는 것은 재미 있습니다 =)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top