You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
3.4 KiB

1 month ago
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Drawing.Drawing2D;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. namespace ShenTun.ImageCollection.Test
  12. {
  13. public partial class ImageMouseMoveForm : Form
  14. {
  15. private Panel panel;
  16. private PictureBox pictureBox;
  17. private HScrollBar hScrollBar;
  18. private VScrollBar vScrollBar;
  19. private Label positionLabel;
  20. private bool isDragging = false;
  21. private Point dragStartPoint;
  22. public ImageMouseMoveForm()
  23. {
  24. this.Width = 800;
  25. this.Height = 600;
  26. this.Text = "Image Viewer with Scrollbars";
  27. panel = new Panel();
  28. panel.Dock = DockStyle.Fill;
  29. panel.AutoScroll = true;
  30. pictureBox = new PictureBox();
  31. pictureBox.SizeMode = PictureBoxSizeMode.AutoSize;
  32. pictureBox.Image = Image.FromFile(@"d:\\log\\2407240149_0001.jpg"); // 替换为你的图片路径
  33. pictureBox.MouseMove += PictureBox_MouseMove;
  34. pictureBox.MouseDown += PictureBox_MouseDown;
  35. pictureBox.MouseUp += PictureBox_MouseUp;
  36. panel.Controls.Add(pictureBox);
  37. hScrollBar = new HScrollBar();
  38. hScrollBar.Dock = DockStyle.Bottom;
  39. hScrollBar.Scroll += HScrollBar_Scroll;
  40. vScrollBar = new VScrollBar();
  41. vScrollBar.Dock = DockStyle.Right;
  42. vScrollBar.Scroll += VScrollBar_Scroll;
  43. positionLabel = new Label();
  44. positionLabel.AutoSize = true;
  45. positionLabel.Text = "Mouse Position: (0, 0)";
  46. positionLabel.Dock = DockStyle.Top;
  47. this.Controls.Add(positionLabel);
  48. this.Controls.Add(panel);
  49. this.Controls.Add(hScrollBar);
  50. this.Controls.Add(vScrollBar);
  51. pictureBox.MouseMove += PictureBox_MouseMove;
  52. hScrollBar.Scroll += HScrollBar_Scroll;
  53. vScrollBar.Scroll += VScrollBar_Scroll;
  54. }
  55. private void PictureBox_MouseDown(object sender, MouseEventArgs e)
  56. {
  57. if (e.Button == MouseButtons.Left)
  58. {
  59. isDragging = true;
  60. dragStartPoint = e.Location;
  61. }
  62. }
  63. private void PictureBox_MouseMove(object sender, MouseEventArgs e)
  64. {
  65. if (pictureBox.ClientRectangle.Contains(pictureBox.PointToClient(Cursor.Position)))
  66. {
  67. // 计算鼠标位置相对于图片的位置
  68. Point pictureBoxLocation = pictureBox.PointToClient(Cursor.Position);
  69. int relativeX = pictureBoxLocation.X - panel.AutoScrollPosition.X;
  70. int relativeY = pictureBoxLocation.Y - panel.AutoScrollPosition.Y;
  71. positionLabel.Text = $"Mouse Position: ({relativeX}, {relativeY})";
  72. }
  73. }
  74. private void PictureBox_MouseUp(object sender, MouseEventArgs e)
  75. {
  76. isDragging = false;
  77. }
  78. private void HScrollBar_Scroll(object sender, ScrollEventArgs e)
  79. {
  80. panel.AutoScrollPosition = new Point(-hScrollBar.Value, panel.AutoScrollPosition.Y);
  81. }
  82. private void VScrollBar_Scroll(object sender, ScrollEventArgs e)
  83. {
  84. panel.AutoScrollPosition = new Point(panel.AutoScrollPosition.X, -vScrollBar.Value);
  85. }
  86. }
  87. }