Показать элемент панели задач с NativeWindow
Мое приложение предназначено для работы почти полностью через элемент панели задач Windows 7 с использованием миниатюр и списков переходов. Я знаю, что могу легко создать Form
и просто скрыть это, но это кажется излишним. Кроме того, я хотел бы поиграть с NativeWindow
насколько это возможно, потому что я никогда не использовал его раньше.
По сути, у меня есть класс под названием RootWindow
что происходит от NativeWindow
это будет обрабатывать горячие клавиши и, надеюсь, все остальное. Мне вообще не нужно видимое окно, а просто что-то для обработки оконных сообщений и предоставления элемента панели задач, к которому я могу прикрепить миниатюры и списки переходов.
Есть ли какая-то особенная CreateParams
вариант мне нужно передать CreateHandle
? Или мне не повезло?
РЕДАКТИРОВАТЬ: Ну, это было проще, чем я думал, но это не совсем то, что я хочу. Однажды я прошел NativeWindow
ручкой к ShowWindow
API, появился элемент панели задач. Тем не менее, он также показывает окно в верхнем левом углу экрана. Есть ли какой-нибудь способ избавиться от этого окна, пока еще отображается элемент панели задач?
public class RootWindow : NativeWindow {
public const int SW_SHOWNOACTIVATE = 4;
[DllImport("User32.dll")]
private static extern int ShowWindow(IntPtr hWnd, short cmdShow);
public RootWindow() {
CreateHandle(new CreateParams());
ShowWindow(this.Handle, SW_SHOWNOACTIVATE);
}
}
1 ответ
Хитрость заключалась в том, чтобы установить стиль окна на WS_POPUP.
const int WS_POPUP = unchecked((int)0x80000000);
const int SW_SHOWNOACTIVATE = 4;
CreateHandle(new CreateParams() {
Style = WS_POPUP
});
ShowWindow(Handle, SW_SHOWNOACTIVATE);
Я также отключил Aero Peek для окна, так как это только для фоновой работы.
const int DWMNCRP_ENABLED = 2;
const int DWMWA_DISALLOW_PEEK = 11;
int policy = DWMNCRP_ENABLED;
DwmSetWindowAttribute(Handle, DWMWA_DISALLOW_PEEK, ref policy, sizeof(int));