formulário do Windows com um fundo transparente que não pode ser clicado através

StackOverflow https://stackoverflow.com/questions/1436059

  •  07-07-2019
  •  | 
  •  

Pergunta

Usando C # / Windows Forms. Tentando fazer fundo de uma forma transparente, sem ele perder a sua capacidade de receber cliques.

  1. this.Opacity faz com que toda a forma transparente (não apenas o fundo

  2. BackColor = Color.Red;
    TransparencyKey = BackColor;

faz com que o fundo da forma transparente e clicar-capazes. Eu quero o formulário para ser transparente, mas deve ser capaz de receber cliques

Como?

Foi útil?

Solução

Você precisa lidar com WM_NCHITTEST. Nota no trecho abaixo que m.lParam contém embalados coordenadas X e Y da posição do mouse, em relação ao canto superior esquerdo da tela, e você precisa verificar se o local corresponde a sua região transparente.

Neste exemplo estou retornando HTCAPTION, o que significa que esta região vai se comportar como uma legenda da janela, ou seja, o usuário será capaz de arrastar a janela clicando e arrastando este local. Consulte aqui que outros valores podem ser devolvidos eo que eles significam

protected override void WndProc(ref Message m) {
    switch (m.Msg) {
    case 0x84: // this is WM_NCHITTEST
        base.WndProc(ref m);
        if ((/*m.LParam.ToInt32() >> 16 and m.LParam.ToInt32() & 0xffff fit in your transparen region*/) 
          && m.Result.ToInt32() == 1) {
            m.Result = new IntPtr(2);   // HTCAPTION
        }
        break;
    default:
        base.WndProc(ref m);
        break;
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top