WndProc com nenhuma forma visível?

votos
3

Eu quero criar um formulário em um segundo segmento que irá receber mensagens em seu método WndProc. O que é a maneira recomendada para criar uma forma invisível como este? É a criação ShowInTaskbar = false e Visible = false o suficiente, ou se existe uma maneira mais limpo?

Publicado 19/05/2009 em 19:54
fonte usuário
Em outras línguas...                            


5 respostas

votos
2

Eu não tenho certeza do que você quer dizer com "mais limpa". A forma padrão para criar um formulário que é invisível para o usuário é a criação visível e ShowInTaskbar como falsa.

Respondeu 21/05/2009 em 16:04
fonte usuário

votos
0

Você não será capaz de receber mensagens do Windows se você definir seu ShowInTaskbar como falsa. A única maneira de fazer isso é por esconder o seu formulário em vez (ele ainda esconde o ícone da barra de tarefas).

Respondeu 14/06/2013 em 15:59
fonte usuário

votos
0

O código neste projeto tem uma forma elegante de lidar com este problema: http://www.codeproject.com/KB/dotnet/XDMessaging.aspx

Eu não estou copiando o código aqui porque é protegido por direitos autorais, mas você pode usá-lo para referência baixando-lo sozinho.

A classe XDListener estende NativeWindow, por isso é capaz de receber mensagens. No construtor de alguns atributos são definidas na janela que torná-lo invisível. O método WndProc é substituído em que a classe para processar mensagens que chegam. Eu testei que este código funciona em Win 7 com um # aplicativo C, enquanto todos os meus formulários estão todos escondidos e não está sendo exibido na barra de tarefas.

Respondeu 10/11/2011 em 16:18
fonte usuário

votos
0

usar:

Public Declare Function CreateWindowExA Lib "user32" (ByVal dwExStyle As Long, 
    ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, 
    ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, 
    ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) 
    As Long

ou

Public Declare Function CreateWindowExW Lib "user32" (ByVal dwExStyle As Long, 
    ByVal lpClassName As Long, ByVal lpWindowName As Long, ByVal dwStyle As Long, 
    ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, 
    ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Long) 
    As Long

Atenção: você pode mudar a lpClassNameou lpWindowNamepara stringou longna declaração certifique-se de usar "Static", como o lpClassNamemembro - este é o estilo da janela invisível que quer que é normalmente utilizado para janelas recieve WndProc.

o valor de retorno a partir desta API é o hwnd (identificador) que você pode subclasse para obter as mensagens que receberá todas as mensagens padrão do Windows ou você pode enviar mensagens personalizadas para ele, por isso não irá disparar seu código acidentalmente quando uma mensagem padrão é recebido.

exemplo: hwnd_mainé o hwnd da sua janela pai

dim hwnd_recieve as long
hwnd_recieve = CreateWindowEx(num_zero, "Static", "",0,0,0,0,0, hwnd_main,0,0,0)

subclasse isso e divirta-se!

Respondeu 05/02/2010 em 03:11
fonte usuário

votos
0

Tanto quanto eu sei, o que você está fazendo é contra as regras (embora, estas coisas não funcionam às vezes) ... todo o material de interface do usuário é suposto ser no segmento principal.

Quanto à sua pergunta, você deve ser capaz de apenas definir Visible para false. Definir ShowInTaskbar só seria importante para o formulário de inscrição principal, eu acredito, e se você fez que os usuários não têm uma maneira de voltar para seu aplicativo na barra de tarefas.

Respondeu 19/05/2009 em 21:27
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more