Pergunta

Eu sou uma espécie de novo para c ++ e eu estou tentando criar um jogo. Eu tenho um RECT_GRID matriz 2d de retângulos. Eu tenho uma grade matriz 2d de unsigned short. Eu preencher a matriz retângulo durante WM_CREATE

As tintas de eventos WM_PAINT retângulos para todos os elementos na matriz. A cor do retângulo é baseado no valor de GRID [x] [y]

Eu fiz isso por isso, quando a tecla para baixo é pressionado, muda a cor de um dos retângulos, definindo GRID [1] [XMOVE] = para uma cor diferente em seguida, ele invalida o retângulo do cliente

Basicamente o que acontece é que ele funciona bem por um tempo, mas eventualmente ele simplesmente pára de material de desenho. Eu verifiquei minha variável XMOVE durante a depuração, eu verifiquei por valores de grade e outras coisas e está tudo bem. Quando eu remover o loop do evento pintura e foco em um retângulo específico, que nunca falha, mas se eu tentar redesenhar todos eles de uma vez, depois de cerca de 20 vezes, ele pára de pintar coisas. O que poderia causar isso? Eu sou novo para c ++ e eu aposto que eu não estou pintando de forma adequada e causando um estouro ou algo assim.

Se alguém pudesse explicar o que está acontecendo de errado, ou uma maneira correta de fazer isso, eu realmente aprecio isso. Eu não poderia encontrar qualquer coisa como este exemplo no Google. Graças

EDIT:

Eu estou usando 3 escovas globais HBRUSH A; HBRUSH B; HBRUSH C;

e quando eu modificá-los, eu sempre digo A = MakeBrush (NUM);

ami I utilizando escovas corretamente?

Foi útil?

Solução

Meu primeiro palpite, se você é um GDI Total / novato C ++, é que você provavelmente está criando um monte de canetas e pincéis. Estes são limitados recursos no Windows. Você só pode criar tantos deles antes de começar a taxar seus recursos. Assim, ou fazer seus pincéis e canetas e Windows, etc todos de uma vez e reutilizá-los ou eliminá-los corretamente quando você está feito. Eu recomendo ter uma cópia de "a Bíblia" ( http://www.amazon.com / Programação-Windows% C2% AE-Quinta-Microsoft / dp / 157231995X / ref = sr_1_1? ie = UTF8 & s = livros & qid = 1252788457 & sr = 8-1 ) e ler os capítulos lá sobre desenho.

Editar : Não soa como você está modificando seus pincéis corretamente, mas desde que eu não posso ver o código para MakeBrush, eu não sei. Você provavelmente está criando um monte de escovas por trás das cenas e você não sabe mesmo. Sério, obter uma cópia do livro de Petzold e passar uma ou duas horas. Você vai acabar com mais cabelo em sua cabeça mais tarde! ; -)

Outras dicas

Você vai notar em todos os exemplos GDI, a 'CreatePen' ou 'CreateSolidBrush' será seguido por um objeto de exclusão. Isso é porque eles são recursos limitados no Windows, e você pode ficar sem eles, se você não excluí-los quando tiver terminado.

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

Se você esquecer de incluir a chamada 'DeleteObject', então você vai ter problemas depois de usar todas as escovas disponíveis. É realmente divertido tentar =)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top