Покажите объект панели задач с NativeWindow

Мое приложение предназначается для работы почти полностью через объект панели задач Windows 7 с использованием списков перехода и миниатюр. Я знаю, что могу легко создать a 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);
    }
}
5
задан David Brown 12 April 2010 в 03:29
поделиться

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));
4
ответ дан 15 December 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: