Мое приложение предназначается для работы почти полностью через объект панели задач 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);
}
}
Уловка заключалась в том, чтобы установить стиль окна на 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));