// コンストラクタ public ClickWindow(ScreenshotProvider sp, Rectangle virtualDisplayRectangle, AfterAction aa) { // 仕方ないね ScreenshotProvider = sp; vdr = virtualDisplayRectangle; // クリック完了時にGUIに反映するための細工 this.aa = aa; // 表示用に仮想スクリーンのビットマップを生成する vdb = sp.getVirtualDisplayBitmap(vdr); // 画像を表示するためImageコントロールを用意する // (http://bacchus.ivory.ne.jp/gin/post-979/) var ScreenshotImage = new System.Windows.Controls.Image(); var hbitmap = vdb.GetHbitmap(); ScreenshotImage.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( hbitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()); NativeMethods.DeleteObject(hbitmap); ScreenshotImage.Height = vdr.Height; ScreenshotImage.Width = vdr.Width; // Gridを作成し、Imageコントロールを乗せる var grid = new System.Windows.Controls.Grid(); grid.Children.Add(ScreenshotImage); // ウィンドウについての設定を行う // 縁無しに設定する // (http://5000164.jp/2014-03-wpf_practice_1/) WindowStyle = WindowStyle.None; AllowsTransparency = true; // 表示座標を決める Left = virtualDisplayRectangle.Left; Top = virtualDisplayRectangle.Top; Height = virtualDisplayRectangle.Height; Width = virtualDisplayRectangle.Width; // コンテンツを設定する Content = grid; // イベントを設定する MouseDown += ClickWindow_Click; KeyDown += ClickWindow_Key; }
private void GetPositionMenu_Click(object sender, RoutedEventArgs e) { sp = new ScreenshotProvider(new AfterAction(getPosition), GetBackgroundColor()); }