Pergunta

Atualmente, estou trabalhando no Visual C ++ 2008 Express Edition. No meu projeto, tenho uma caixa de imagem que contém uma imagem, agora tenho que desenhar um retângulo para intensificar o usuário para selecionar uma parte da imagem. Eu usei o "Mousedown" Evento da PictureBox e o código abaixo para desenhar um retângulo:

Void pictureBox1_MouseDown(System::Object^ sender, Windows::Forms::MouseEventArgs^  e)   
                 {  
             Graphics^ g = pictureBox1->CreateGraphics();  
             Pen^ pen = gcnew Pen(Color::Blue);  
             g->DrawRectangle( pen , e->X ,e->Y,width,ht);           
         }

Agora, na "largura dos argumentos" e "ht" "Drawrectangle", o código acima resulta no desenho de um retângulo no ponto em que o usuário pressiona o botão do mouse na imagem no PictureBox ... eu quero Permita que o usuário possa arrastar o cursor e desenhar um retângulo de tamanho que ele deseja .. por favor me ajude nisso .. Thanx ..

Foi útil?

Solução

Você não deve desenhar diretamente para a sua janela em seus manipuladores de eventos - todo o desenho deve estar no manipulador de eventos de pintura.

Há muito mais que você pode fazer para fazê -lo funcionar bem, mas o núcleo da técnica que você precisa é:

Para mover um retângulo à medida que o usuário arrasta o mouse, você deve lidar com eventos movidos pelo mouse. Cada vez que você recebe um, você precisa invalidar () para causar uma redefinição da sua janela. No manipulador de tinta, se o botão do mouse estiver inativo, obtenha a posição do ponteiro do mouse e desenhe o retângulo naquele local.

Isso irá iniciar, mas terá alguns problemas - a janela piscará à medida que constantemente redesenha, e pode ser um pouco lento.

Há outras coisas que você pode fazer para melhorar isso, incluindo:

  • Apenas invalide as partes do formulário que você precisa (de onde o retângulo antigo precisa ser apagado e onde o novo retângulo precisa ser desenhado)

  • Após o invalidato (), ligue para a atualização () imediatamente para fazer com que o redesenho aconteça o mais rápido possível

  • Renderização "dupla buffer" e/ou armazenar o conteúdo da janela em um bitmap fora da tela para que você possa renderizar o plano de fundo com o retângulo em cima mais rapidamente e sem piscar. (Mas isso é uma técnica bastante avançada).

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