Показать элемент панели задач с 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));
Другие вопросы по тегам