private async void Window_Loaded(object sender, RoutedEventArgs e) { this.Loaded -= Window_Loaded; this.Activated += Window_Activated; this.Deactivated += Window_Deactivated; IntPtr handle = new WindowInteropHelper(this).Handle; // Subclassing Window's WndProc http://blogs.msdn.com/nickkramer/archive/2006/03/18/554235.aspx HwndSource.FromHwnd(handle).AddHook(new HwndSourceHook(WndProc)); // Loga izvēlnes komandu notveršanai. SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; MenuHelper.SystemMenuHandle = MenuHelper.GetSystemMenu(handle, false); MenuHelper.DeleteSystemSizeCommands(MenuHelper.SystemMenuHandle, true); // Pieliek programmas punktus. MenuHelper.SettingsMenuHandle = MenuHelper.CreatePopupMenu(); // Ar tabulācijas zīmi atdalīts īsinājumtaustiņš. MenuHelper.InsertMenu(MenuHelper.SettingsMenuHandle, 0, MenuFlag.ByPosition | (Settings.Default.UseGuide ? MenuFlag.Checked:MenuFlag.Unchecked), new IntPtr(MenuHelper.GuideCommandId), "Rādīt raidījumu sarakstu G"); MenuHelper.InsertMenu(MenuHelper.SettingsMenuHandle, 1, MenuFlag.ByPosition | (Settings.Default.ShowClock ? MenuFlag.Checked:MenuFlag.Unchecked), new IntPtr(MenuHelper.ClockCommandId), "Rādīt laiku studijā T"); MenuHelper.InsertMenu(MenuHelper.SettingsMenuHandle, 2, MenuFlag.ByPosition | (Settings.Default.MuteOnLock ? MenuFlag.Checked:MenuFlag.Unchecked), new IntPtr(MenuHelper.LockCommandId), "Bloķējot izslēgt skaņu"); MenuHelper.InsertMenu(MenuHelper.SettingsMenuHandle, 3, MenuFlag.ByPosition | (Settings.Default.UseSystemProxy ? MenuFlag.Checked:MenuFlag.Unchecked), new IntPtr(MenuHelper.ProxyCommandId), "Lietot sistēmas starpniekserveri"); MenuHelper.InsertMenu(MenuHelper.SystemMenuHandle, 0, MenuFlag.ByPosition | MenuFlag.Popup, MenuHelper.SettingsMenuHandle, "Iestatījumi"); MenuHelper.InsertMenu(MenuHelper.SystemMenuHandle, 1, MenuFlag.ByPosition | MenuFlag.String, new IntPtr(MenuHelper.AboutCommandId), "Par Radio"); MenuHelper.InsertMenu(MenuHelper.SystemMenuHandle, 2, MenuFlag.ByPosition | MenuFlag.Separator, IntPtr.Zero, null); // Iestata pirmo kanālu šeit, lai Dispatcher.Invoke neuzkar programmu. BeginInvoke nav risinājums, jo tad paraleli izpildās kods, kuram jānotiek secīgi. await SetChannel(channel).ConfigureAwait(false); notFirstChannel = true; }
protected override void OnSourceInitialized(EventArgs e) { base.OnSourceInitialized(e); IntPtr handle = new WindowInteropHelper(this).Handle; MenuHelper.DeleteSystemSizeCommands(MenuHelper.GetSystemMenu(handle, false), false); // Savādāk izmēra komandas pa reizei kļūst pieejamas. SetWindowLong(handle, -16 /*GWL_STYLE*/, 0x00C00000 | 0x00080000); // WS_CAPTION | WS_SYSMENU vai lietot this.ResizeMode=NoResize. // http://stackoverflow.com/a/3364875 // Palūdz noņemt ikonu. SendMessage(handle, 0x0080 /*WM_SETICON*/, new IntPtr(0 /*ICON_SMALL*/), IntPtr.Zero); SendMessage(handle, 0x0080 /*WM_SETICON*/, new IntPtr(1 /*ICON_BIG*/), IntPtr.Zero); // Nomaina loga stilu uz tādu, kuram nav ikonas, bet ir ierastie virsraksta izmēri salīdzinot ar Tool Window stilu. SetWindowLong(handle, -20 /*GWL_EXSTYLE*/, 0x0001 /*WS_EX_DLGMODALFRAME*/); // Atjaunina loga neklienta daļu, lai izmaiņas uzzīmētos. SetWindowPos(handle, IntPtr.Zero, 0, 0, 0, 0, 0x0001 | 0x0002 | 0x0004 | 0x0020); // SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_FRAMECHANGED }