Убираем панель задач на .NET CF 2.0 (делаем Full Screen)

Недавно столкнулся с проблемой, что FormWindowState.Maximized не везде работает. Например у меня на одном из устройств с Windows CE 6.0 — отказалось работать, и ни какие танцы с бубнами не помогали. Долго копался в интернете, в русскоязычном ничего не нащёл, набрёл на руководство на одном англоязычном сайте.

Сделал у себя, заработало!

Итак, проблема решается тремя функциями из coredll.dll:
//Отображает тем или иным способом окно (в том числе и скрывает его).
[DllImport("coredll.dll", CharSet = CharSet.Auto)]
public static extern bool ShowWindow(int hwnd, int nCmdShow);

//Делает окно доступным либо недоступным (убрать с экрана либо показать).
DllImport("coredll.dll", CharSet = CharSet.Auto)]
public static extern bool EnableWindow(int hwnd, bool enabled);

//Находит нужное окно по наименованию.
[DllImport("coredll.dll")]
public static extern int FindWindow(string className, string windowName);


Не забываем подключить к проекту InteropServices:
using System.Runtime.InteropServices;


Для справки, ShowWindow может принимать следующие значения:
SW_HIDE = 0
SW_SHOWNORMAL = 1
SW_NORMAL = 1
SW_SHOWMINIMIZED = 2
SW_SHOWMAXIMIZED = 3
SW_MAXIMIZE = 3
SW_SHOWNOACTIVATE = 4
SW_SHOW = 5
SW_MINIMIZE = 6
SW_SHOWMINNOACTIVE = 7
SW_SHOWNA = 8
SW_RESTORE = 9
SW_SHOWDEFAULT = 10
SW_FORCEMINIMIZE = 11
SW_MAX = 11


Теперь в проекте при загрузке формы убираем панель задач, вот так:
int hid = FindWindow("HHTaskBar", "");
ShowWindow(hid, 0);
EnableWindow(hid, false);


После этого панель задач исчезнет, а чтобы растянуть на оставшееся пустым место форму, делаем так:
this.Width = Screen.PrimaryScreen.Bounds.Width;
this.Height = Screen.PrimaryScreen.Bounds.Height;
this.TopMost = true;


Ни в коем случае, не забываем возвращать панель задач на место, при выходе из приложения:
int hid = FindWindow("HHTaskBar", "");
ShowWindow(hid, 5);
EnableWindow(hid, true);


Вот и всё!


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.