社内アプリで表題の通りWebBrowserを貼り別アプリで作成したhtmlを表示させています。
簡易コードで、JPEGを表示させています。
そのWebBrowser上に表示してる「JPEGに線を引きたい」ことになり調べていますがうまくいきません。下記のコードでMouseDownやMouseMoveを取得できますが線が引けません。線を表示できません。
下記のコードは、動的にWebBrowserを作成し、その派生クラスでマウスイベントを取得しています。どのようにしたらWebBrowser上のJpegに線を引けますか?
その線は、ラインマーカーのようにできればありがたいのですが・・・
開発環境 VS2015 C# WinForm
C# Form1
1 public partial class Form1 : Form 2 { 3 private ExWebBrowser _WebBrowser; 4 private ExWebBrowser WebBrowser 5 { 6 [MethodImpl(MethodImplOptions.Synchronized)] 7 get 8 { 9 return _WebBrowser; 10 } 11 12 [MethodImpl(MethodImplOptions.Synchronized)] 13 set 14 { 15 if (_WebBrowser != null) 16 { 17 _WebBrowser.MouseDown -= WebBrowser_MouseDown; 18 _WebBrowser.MouseEnter -= WebBrowser_MouseEnter; 19 _WebBrowser.MouseLeave -= WebBrowser_MouseLeave; 20 _WebBrowser.MouseMove -= WebBrowser_MouseMove; 21 _WebBrowser.MouseOver -= WebBrowser_MouseOver; 22 _WebBrowser.MouseUp -= WebBrowser_MouseUp; 23 } 24 25 _WebBrowser = value; 26 if (_WebBrowser != null) 27 { 28 _WebBrowser.MouseDown += WebBrowser_MouseDown; 29 _WebBrowser.MouseEnter += WebBrowser_MouseEnter; 30 _WebBrowser.MouseLeave += WebBrowser_MouseLeave; 31 _WebBrowser.MouseMove += WebBrowser_MouseMove; 32 _WebBrowser.MouseOver += WebBrowser_MouseOver; 33 _WebBrowser.MouseUp += WebBrowser_MouseUp; 34 } 35 } 36 } 37 38 39 public Form1() 40 { 41 InitializeComponent(); 42 43 _WebBrowser = new ExWebBrowser(); 44 _WebBrowser._form1Instance = this; 45 } 46 47 [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 48 static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 49 50 [System.Runtime.InteropServices.DllImport("user32.dll")] 51 static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 52 53 private void Form1_Load(object sender, EventArgs e) 54 { 55 WebBrowser.Dock = DockStyle.Fill; 56 this.Controls.Add(WebBrowser); 57 WebBrowser.GoHome(); 58 }
C#
1 public partial class ExWebBrowser : WebBrowser 2 { 3 int prevX; 4 int prevY; 5 bool mouseDrag = false; 6 public Form1 _form1Instance; 7 8 private HtmlElement _Body; 9 10 private HtmlElement Body 11 { 12 [MethodImpl(MethodImplOptions.Synchronized)] 13 get 14 { 15 return _Body; 16 } 17 18 [MethodImpl(MethodImplOptions.Synchronized)] 19 set 20 { 21 if (_Body != null) 22 { 23 _Body.MouseDown -= Body_MouseDown; 24 _Body.MouseUp -= Body_MouseUp; 25 _Body.MouseEnter -= Body_MouseEnter; 26 _Body.MouseLeave -= Body_MouseLeave; 27 _Body.MouseMove -= Body_MouseMove; 28 _Body.MouseOver -= Body_MouseOver; 29 } 30 31 _Body = value; 32 if (_Body != null) 33 { 34 _Body.MouseDown += Body_MouseDown; 35 _Body.MouseUp += Body_MouseUp; 36 _Body.MouseEnter += Body_MouseEnter; 37 _Body.MouseLeave += Body_MouseLeave; 38 _Body.MouseMove += Body_MouseMove; 39 _Body.MouseOver += Body_MouseOver; 40 } 41 } 42 } 43 44 45 public new event MouseDownEventHandler MouseDown; 46 public new delegate void MouseDownEventHandler(MouseEventArgs e); 47 public new event MouseUpEventHandler MouseUp; 48 public new delegate void MouseUpEventHandler(MouseEventArgs e); 49 public new event MouseEnterEventHandler MouseEnter; 50 public new delegate void MouseEnterEventHandler(MouseEventArgs e); 51 public new event MouseLeaveEventHandler MouseLeave; 52 public new delegate void MouseLeaveEventHandler(MouseEventArgs e); 53 public new event MouseMoveEventHandler MouseMove; 54 public new delegate void MouseMoveEventHandler(MouseEventArgs e); 55 public new event MouseOverEventHandler MouseOver; 56 public new delegate void MouseOverEventHandler(MouseEventArgs e); 57 58 protected override void OnDocumentCompleted(WebBrowserDocumentCompletedEventArgs e) 59 { 60 Body = this.Document.Body; 61 base.OnDocumentCompleted(e); 62 } 63 64 private void Body_MouseDown(object sender, System.Windows.Forms.HtmlElementEventArgs e) 65 { 66 prevX = e.MousePosition.X; //(int)m.LParam & 0xFFFF; 67 prevY = e.MousePosition.Y; //((int)m.LParam >> 16) & 0xFFFF; 68 69 mouseDrag = true; 70 71 //MouseDown.Invoke(new MouseEventArgs(e.MouseButtonsPressed, 1, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0)); 72 } 73 74 private void Body_MouseUp(object sender, System.Windows.Forms.HtmlElementEventArgs e) 75 { 76 mouseDrag = false; 77 78 //MouseUp.Invoke(new MouseEventArgs(e.MouseButtonsPressed, 1, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0)); 79 } 80 81 private void Body_MouseEnter(object sender, System.Windows.Forms.HtmlElementEventArgs e) 82 { 83 //MouseEnter.Invoke(new MouseEventArgs(MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0)); 84 } 85 86 private void Body_MouseLeave(object sender, System.Windows.Forms.HtmlElementEventArgs e) 87 { 88 //MouseLeave.Invoke(new MouseEventArgs(MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0)); 89 } 90 91 private void Body_MouseMove(object sender, System.Windows.Forms.HtmlElementEventArgs e) 92 { 93 // マウスカーソルの位置座標を取得. 94 //int x = LOWORD(m.LParam); // LOWORD(lParam)でマウスカーソルの位置座標xを取得. 95 //int y = HIWORD(m.LParam); // HIWORD(lParam)でマウスカーソルの位置座標yを取得. 96 97 if (mouseDrag) 98 { 99 Pen pen = new Pen(Color.Orange, 10); 100 //Graphics g = this.CreateGraphics(); 101 Graphics g = _form1Instance.CreateGraphics(); 102 g.DrawLine(pen, prevX, prevY, e.MousePosition.X, e.MousePosition.Y); 103 g.FillEllipse(Brushes.Orange, prevX - pen.Width / 2, prevY - pen.Width / 2, pen.Width, pen.Width); 104 prevX = e.MousePosition.X; 105 prevY = e.MousePosition.Y; 106 107 pen.Dispose(); 108 g.Dispose(); 109 } 110 //MouseMove.Invoke(new MouseEventArgs(MouseButtons.None, 0, e.ClientMousePosition.X, e.ClientMousePosition.Y, 0)); 111 }

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/19 07:06 編集
2020/08/19 14:14
2020/08/20 02:27