0
トランザクションが処理を開始したらエージェントがウィンドウを閉じるのを防ぐ次のメカニズムを使用しています。WPFウィンドウでXボタンを再表示する方法
私はSetWindowLong(hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) & WS_SYSMENU);
にWS_SYSMENU
の前で~
を除去することにより、ビット単位の非復帰しないで結ばれているが、それは飛びませんでした。ボタンを非表示にします
コードは、ATM、以下になります。
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();
}
};
こんにちは、答えをありがとう、私はその日のために終わった、明日それをテストします。 –