2016-04-19 7 views
0

Я использую следующий механизм, который предотвращает появление агентов закрытия окна после того, как транзакция начала обрабатывать, как я их верну?Как показать кнопку X в окне WPF

Я связал un-reverting побитовое НЕ, удалив ~ перед WS_SYSMENU по телефону SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & WS_SYSMENU);, но это не полетело.

код, который скрывает кнопки выглядит следующий банкомат:

 public class WithoutCloseButton : Window 
     { 
      private const int GWL_STYLE = -16; 
      private const int WS_SYSMENU = 0x80000; 

      [DllImport("user32.dll", SetLastError = true)] 
      private static extern int GetWindowLong(IntPtr hWnd, int nIndex); 
      [DllImport("user32.dll")] 
      private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

      public void HideButtons() 
      { 
       var hwnd = new WindowInteropHelper(this).Handle; 
       SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & ~WS_SYSMENU); 
      } 

      public void ShowButtons() 
      { 
       var hwnd = new WindowInteropHelper(this).Handle; 
       SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & WS_SYSMENU); 
      } 
     } 


private void OpenBrowser(PaymentViewModel viewModel, Uri uri) 
     { 
      viewModel.BrowserWindow = new WithoutCloseButton(); 
      viewModel.BrowserWindow.Closed += BrowserWindow_Closed; 
      var browser = new MyWebBrowser(); 
      var scrollviewer = new ScrollViewer(); 
      var stackPanel = new StackPanel { Orientation = System.Windows.Controls.Orientation.Vertical}; 
      var formsHost = new WindowsFormsHost {Child = browser}; 
      stackPanel.Children.Add(formsHost); 
      scrollviewer.Content = stackPanel; 
      viewModel.BrowserWindow.Content = scrollviewer; 

      viewModel.BrowserWindow.Width = browser.Width = (int)System.Windows.SystemParameters.PrimaryScreenWidth; 
      viewModel.BrowserWindow.Height = browser.Height = (int)System.Windows.SystemParameters.PrimaryScreenHeight; 
      viewModel.BrowserWindow.Top = viewModel.BrowserWindow.Left = 0; 
      viewModel.BrowserWindow.Show(); 

      browser.Show(); 
      browser.Navigate("about:blank"); 
      browser.DocumentCompleted += delegate(object obj, WebBrowserDocumentCompletedEventArgs e) 
      { 
       var urlInLower = e.Url.ToString().ToLower(); 
       if (urlInLower == "about:blank") 
       { 
        ((MyWebBrowser)obj).Navigate(uri); 
       } 

       if (urlInLower.Contains("accepted")) 
       { 
        ViewModel.AuthCode = this.GetAuthToken(); 
        ViewModel.updateUiWhenDoneWithPayment_RunWorkerCompleted(new object(), null); 
        ViewModel.BrowserWindow.Close(); 
        ViewModel.BrowserWindow = null; 
       } 

       if (urlInLower.Contains("payment/processing")) 
       { 
        viewModel.BrowserWindow.HideButtons(); 
       } 

       if (urlInLower.Contains("payment/error")) 
       { 
        viewModel.BrowserWindow.ShowButtons(); 
       } 
      }; 

ответ

1
public void ShowButtons() 
{ 
    var hwnd = new WindowInteropHelper(this).Handle; 
    //SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & WS_SYSMENU); 
    SetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) | WS_SYSMENU); 
} 

&(and) не добавляет WS_SYSMENU к style, он возвращает этот флаг, если он установлен на style.

style | b //sets `b` flag on `style` 
style & ~b //clears `b` flag from `style` 
+0

Привет, Спасибо за ответ, я закончен на день, проверит его завтра. –