簡體   English   中英

如何使用.NET Compact Framework 3.5在Win CE 6.0中創建全屏應用程序?

[英]How to create a full screen application in Win CE 6.0 using .NET Compact Framework 3.5?

我們希望我們的應用程序以全屏模式運行,在Win CE 6.0驅動的設備上沒有標題欄。 該應用程序正在使用.NET Compact Framework 3.5(C#)開發。 任何示例代碼或指向文章的指針都表示贊賞。

首先,您必須通過P / Invoke隱藏任務欄。 這是C代碼,應該很容易轉換

HWND hwndTaskbar = ::FindWindow(_T("HHTaskBar"), NULL); 
::ShowWindow(hwndTaskbar, SW_HIDE); 

完成后,使用Screen.PrimaryScreen確定顯示器的大小,並將表單調整為這些尺寸。

使用此代碼:

public class FullScreenEngine
{
    // Fields
    private IntPtr _hWndInputPanel;
    private IntPtr _hWndSipButton;
    private IntPtr _hWndTaskBar;
    private Rectangle _desktopArea;

    public FullScreenEngine()
    {
        Init();
    }

    public bool SetFullScreen(bool mode)
    {
        try
        {
            if (mode)
            {
                if (_hWndTaskBar.ToInt64() != 0L)
                {
                    ShowWindow(_hWndTaskBar, SW_HIDE);
                }
                if (_hWndInputPanel.ToInt64() != 0L)
                {
                    ShowWindow(_hWndInputPanel, SW_HIDE);
                }
                if (_hWndSipButton.ToInt64() != 0L)
                {
                    ShowWindow(_hWndSipButton, SW_HIDE);
                }
                WorkArea.SetWorkArea(new RECT(Screen.PrimaryScreen.Bounds));
            }
            else
            {
                if (_hWndTaskBar.ToInt64() != 0L)
                {
                    ShowWindow(_hWndTaskBar, SW_SHOW);
                }
                if (_hWndInputPanel.ToInt64() != 0L)
                {
                    //ShowWindow(_hWndInputPanel, SW_SHOW);
                }
                if (_hWndSipButton.ToInt64() != 0L)
                {
                    ShowWindow(_hWndSipButton, SW_SHOW);
                }
                WorkArea.SetWorkArea(new RECT(_desktopArea));
            }
        }
        catch (Exception)
        {
            return false;
        }
        return true;
    }

    private bool Init()
    {
        try
        {
            _desktopArea = Screen.PrimaryScreen.WorkingArea;
            _hWndInputPanel = FindWindowW("SipWndClass", null);
            _hWndSipButton = FindWindowW("MS_SIPBUTTON", null);
            _hWndTaskBar = FindWindowW("HHTaskBar", null);
        }
        catch (Exception)
        {
            return false;
        }
        return true;
    }

    private const uint SW_HIDE = 0;
    private const uint SW_SHOW = 1;

    [DllImport("coredll.dll")]
    private static extern int ShowWindow(IntPtr hwnd, uint command);

    [DllImport("coredll.dll")]
    private static extern IntPtr FindWindowW(string lpClassName, string lpWindowName);

    // Nested Types
    public struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;

        public RECT(Rectangle rect) : this()
        {
            Left = rect.Left;
            Right = rect.Left+rect.Width;
            Top = rect.Top;
            Bottom = rect.Top + rect.Height;
        }
    }

    private static class WorkArea
    {
        [DllImport("coredll.dll")]
        private static extern bool SystemParametersInfo(uint uAction, uint uparam, ref RECT rect, uint fuWinIni);

        private const uint WM_SETTINGCHANGE = 0x1a;
        const uint SPI_GETWORKAREA = 48;
        const uint SPI_SETWORKAREA = 47;

        public static bool SetWorkArea(RECT rect)
        {
            return SystemParametersInfo(SPI_SETWORKAREA, 0, ref rect, WM_SETTINGCHANGE);
        }

        public static RECT GetWorkArea()
        {
            var rect = new RECT();
            SystemParametersInfo(SPI_GETWORKAREA, 0, ref rect, 0);
            return rect;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM