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.

Foi útil?

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.

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