Как добавить указатель мыши на изображение с помощью .DrawImage () - PullRequest
1 голос
/ 28 ноября 2010

Привет всем, я не уверен, возможно ли это, но я пытаюсь динамически добавить всплывающую подсказку к изображению, используя метод Graphics - DrawImage.Я не вижу каких-либо свойств или событий, когда изображение накладывается или что-то еще, поэтому я не знаю, с чего начать.Я использую WinForms (в C # - .NET 3.5).Любые идеи или предложения будут оценены.Спасибо.

Ответы [ 2 ]

1 голос
/ 28 ноября 2010

Помните, вы должны хранить границы изображения, которое вы рисуете и в mouseMove event проверьте, находится ли местоположение current Mouse cursor в этом регионе, затем отобразите всплывающую подсказку, иначе скрывайте его.

    ToolTip t; 
    private void Form1_Load(object sender, EventArgs e)
    {
         t = new ToolTip();  //tooltip to control on which you are drawing your Image
    }

    Rectangle rect; //to store the bounds of your Image
    private void Panel1_Paint(object sender, PaintEventArgs e)
    {
        rect =new Rectangle(50,50,200,200); // setting bounds to rect to draw image
        e.Graphics.DrawImage(yourImage,rect); //draw your Image
    }

    private void Panel1_MouseMove(object sender, MouseEventArgs e)
    {

        if (rect.Contains(e.Location)) //checking cursor Location if inside the rect
        {
            t.SetToolTip(Panel1, "Hello");//setting tooltip to Panel1
        }
        else
        {
            t.Hide(Panel1); //hiding tooltip if the cursor outside the rect
        }
    }
1 голос
/ 28 ноября 2010

Я бы предположил, что у вас есть какой-то UserControl и вы вызываете DrawImage() в методе OnPaint.

Учитывая это, ваша подсказка должна будет явно контролироваться.По сути, создайте Tooltip в вашей форме, передайте его своему элементу управления через свойство, покажите всплывающую подсказку, когда ваш элемент управления получил событие MouseHover, и скройте подсказку, когда вы получите событие MouseLeave.* Примерно так:

public partial class UserControl1 : UserControl
{
    public UserControl1() {
        InitializeComponent();
    }

    protected override void OnPaint(PaintEventArgs e) {
        base.OnPaint(e);

        // draw image here
    }

    public ToolTip ToolTip { get; set; }

    protected override void OnMouseLeave(EventArgs e) {
        base.OnMouseLeave(e);

        if (this.ToolTip != null)
            this.ToolTip.Hide(this);
    }

    protected override void OnMouseHover(EventArgs e) {
        base.OnMouseHover(e);

        if (this.ToolTip == null)
            return;

        Point pt = this.PointToClient(Cursor.Position);
        String msg = this.CalculateMsgAt(pt);
        if (String.IsNullOrEmpty(msg))
            return;

        pt.Y += 20;
        this.ToolTip.Show(msg, this, pt);
    }

    private string CalculateMsgAt(Point pt) {
        // Calculate the message that should be shown 
        // when the mouse is at thegiven point
        return "This is a tooltip";
    }
}
...