Pocket PC / Windows Mobile: Como detectar inteligente minimizar
-
21-08-2019 - |
Pergunta
Como faço para detectar quando a minha candidatura Compact Framework está sendo smart-minimizado (smart minimizar é o que acontece quando o usuário clica no botão "X" no canto superior direito em um Pocket PC)?
O evento Desactivar não é o caminho certo, porque ela ocorre em diferentes minimização circunstâncias, como quando uma caixa de mensagem ou de outra forma é mostrada na parte superior do formulário principal. E WindowState do formulário não ajuda, porque não há "minimizado" WindowState em .NET CF.
Ouvi dizer que, definindo MinimizeBox = false, meu aplicativo será fechado em vez de minimizada. Mas eu realmente não quero que meu aplicativo para perto, eu só quero saber quando tiver sido minimizado.
Solução
Eu acho que o caminho a percorrer aqui está a processar a WM_ACTIVE mensagem e, em seguida, verificar se o parâmetro fMinimized não é zero. Você pode encontrar mais informações sobre como declarar estas mensagens em seu código no aqui .
Vou tentar descobrir como exatamente este código em C # e provar a hipótese. No entanto, você talvez mais rápido do que eu e descobrir isso.
Além disso, verifique as funções DefWindowProc e WindowProc , que são usados ??para processar as mensagens. Funções são declaradas no seu código como este:
Em primeiro lugar ter o incluem:
using System.Runtime.InteropServices;
, em seguida, na declarar classe como este
[DllImport("coredll.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam,
IntPtr lParam);
Há uma outra coisa que você poderia fazer, isso é mais uma solução alternativa "filosófica". INMO o smart minimizar X é confuso para os usuários, é por isso que eu não gosto de incluí-lo. Em vez disso eu fornecer um botão no canto inferior direito do formulário que diz "perto" ou "back", que utiliza o método close do formulário. Usei-o em todas as formas de manter um padrão. Isso é menos ambígua para usuários do Windows, pois eles podem assumir que o X no Windows Mobile é o mesmo X no Windows para PC.
Se por algum motivo você precisa minimizar seu aplicativo ou enviá-lo para o uso do fundo o seguinte código:
using System.Runtime.InteropServices;
...
public partial class Main : Form
{
public Main()
{
InitializeComponent();
}
[DllImport("coredll.dll")]
static extern int ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_MINIMIZED = 6;
...
...
public void HideForm()
{
ShowWindow(this.Handle, SW_MINIMIZED);
}
}
Outras dicas
O que exatamente você quer dizer com smart-minimizado? Eu suponho que você quer dizer seu aplicativo sendo minimizada automaticamente em nenhuma atividade por algum tempo? Bem, eu não acho que há um evento para isso.
O autor usa essa blogue ponto o evento Desactivar para transformar processo interno ligado e desligado. Isto é aceitável para a animação e outros processos semelhantes e os casos de uma caixa de mensagem ou de outra forma aparecendo há problemas. Se, no entanto, o seu processo não deve ser interrompido a menos que o fechamento de aplicativos ou 'smart-minimiza', você pode tentar iniciar um temporizador em eventos desativar. Se o formulário não é ativado de volta para um intervalo específico, então seria seguro para parar o processo interno.
É claro que em projetar sua solução que você precisa tomar Power Management em consideração. Ter um olhar para este e, claro, também OpenNetCF para as notificações de energia.