formulário do Windows com um fundo transparente que não pode ser clicado através
-
07-07-2019 - |
Pergunta
Usando C # / Windows Forms. Tentando fazer fundo de uma forma transparente, sem ele perder a sua capacidade de receber cliques.
-
this.Opacity faz com que toda a forma transparente (não apenas o fundo
-
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?
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;
}
}