문제

컴팩트 프레임 워크 애플리케이션이 스마트 모방 될 때 어떻게 감지합니까 (스마트 최소화는 사용자가 포켓 PC의 오른쪽 상단 코너에서 "x"버튼을 클릭하면 어떻게 되는가)?

비활성화 이벤트는 메시지 상자 나 다른 양식이 기본 형식 위에 표시되는 것과 같은 최소화 이외의 상황에서 발생하기 때문에 올바른 방법이 아닙니다. .NET CF에서 "최소화 된"창 스테이트가 없기 때문에 양식의 창 스테이트는 도움이되지 않습니다.

Minimizebox = false를 설정함으로써 최소화 대신 내 앱이 닫힌다고 들었습니다. 그러나 나는 실제로 내 앱이 닫히기를 원하지 않습니다. 단지 그것이 최소화되었는지 알고 싶습니다.

도움이 되었습니까?

해결책

여기로가는 길은 처리하는 것입니다. wm_active 메시지 후 fminimized 매개 변수가 0이 아닌지 확인하십시오. 코드 에서이 메시지를 선언하는 방법에 대한 자세한 정보를 찾을 수 있습니다. 여기.

나는 이것을 C#에서 정확하게 코딩하고 가설을 증명하는 방법을 알아 내려고 노력할 것이다. 그러나 당신은 나보다 더 빠르고 그것을 알아냅니다.

또한 함수를 확인하십시오 defwindowproc 그리고 WindowProc, 메시지를 처리하는 데 사용됩니다. 기능은 다음과 같이 코드에 선언됩니다.

먼저 포함이 있습니다.

using System.Runtime.InteropServices;

그런 다음 수업에서 이렇게 선언합니다

[DllImport("coredll.dll")]
static extern IntPtr DefWindowProc(IntPtr hWnd, uint uMsg, UIntPtr wParam,
   IntPtr lParam);

당신이 할 수있는 또 다른 일이 있습니다. 이것은 더 "철학적"해결 방법입니다. Inmo Smart Minimize X는 사용자에게 혼란스러워서 포함하고 싶지 않은 이유입니다. 대신 나는 양식의 닫기 메소드를 사용하는 "Close"또는 "back"이라는 양식의 오른쪽 하단에 버튼을 제공합니다. 표준을 유지하기 위해 모든 형태로 사용했습니다. Windows Mobile의 X가 PC의 Windows에서 동일한 x라고 가정 할 수 있기 때문에 Windows 사용자에게는 덜 모호합니다.

어떤 이유로 앱을 최소화하거나 배경으로 보내야하는 경우 다음 코드를 사용하십시오.

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);
    }
} 

다른 팁

Smart-Minimized가 정확히 무엇을 의미합니까? 나는 당신이 당신의 앱이 한동안 활동없이 자동으로 최소화된다는 것을 의미한다고 생각하십니까? 글쎄, 나는 그것에 대한 이벤트가 있다고 생각하지 않습니다.

이것의 저자 블로그 스팟 내부 프로세스를 켜고 끄기 위해 비활성화 이벤트를 사용합니다. 이것은 애니메이션 및 기타 유사한 프로세스에 허용되며 메시지 상자 또는 다른 양식이 팝업되는 경우에는 아무런 문제가 없습니다. 그러나 응용 프로그램이 문을 닫거나 '스마트 멘트링'하지 않으면 프로세스를 중지해서는 안되며, 비활성화 이벤트에서 타이머를 시작할 수 있습니다. 양식이 특정 간격으로 다시 활성화되지 않으면 내부 프로세스를 중지하는 것이 안전합니다.

물론 솔루션을 설계하려면 전력 관리를 고려해야합니다. 살펴보십시오 이것 물론 전원 알림을위한 OpenNETCF.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top