C # customcontrol OnMouseDown - всегда получаю неправильную позицию Y - PullRequest
1 голос
/ 14 декабря 2011

Я борюсь за проект на Windows Mobile 6.5.Я пишу пользовательские элементы управления, которые могут отображать линии, на которых пользователь нажимал пользовательские элементы управления.

Я столкнулся с проблемой, что OnMouseDown (MouseEventArgs e) не возвращает правильное значение eY (позиция Y в выбранном месте).Кто-нибудь, пожалуйста, помогите!Я потратил несколько часов на эту проблему, но все еще не могу понять, что не так.(Я думаю, что я в неправильном направлении)

Вот как выглядит приложение:

My application looks like

Когда я пытался запустить в эмуляторе WM6.5, OnMouseDown (MouseEventArgs e) всегда возвращает неправильную позицию Y (возвращает позицию Y минус некоторые значения).Например: я щелкнул по центру элемента управления для первого щелчка, но, очевидно, eY находится не в центре.

obviously the e.Y is not at center

Вот код спинета:

protected override void OnPaint(PaintEventArgs pe)
    {

        Graphics g = pe.Graphics;

        Pen pen_black = new Pen(Color.Black);
        g.DrawLine(pen_black, 0, 0, this.Width, 0);
        g.DrawLine(pen_black, 0, this.Height - 1, this.Width, this.Height - 1);
        g.DrawLine(pen_black, 0, 0, 0, this.Height);
        g.DrawLine(pen_black, this.Width - 1, 0, this.Width - 1, this.Height);

        // draw center cross
        g.DrawLine(pen_black, this.Width / 2, this.Height / 2 + 10, this.Width / 2, this.Height / 2 - 10);
        g.DrawLine(pen_black, this.Width / 2 + 10, this.Height / 2, this.Width / 2 - 10, this.Height / 2);


        // draw lines between all mouse down point
        if (pointCount > 0)
        {
            Pen pen_red = new Pen(Color.Red);

            for (int i = 0; i < pointCount - 1; i++)
            {
                g.DrawLine(pen_red, lineList[i].X, lineList[i].Y, lineList[i + 1].X, lineList[i + 1].Y);
            }
        }

            base.OnPaint(pe);
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        // Put the last point to array            
        lineList[pointCount] = new Point(e.X, e.Y);

        pointCount++;
    }

Вот исходный код моих пользовательских элементов управления: Скачать здесь Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011

Это может показаться сумасшедшим, и даже может быть лучше в качестве комментария, если бы на самом деле это не было возможным решением:

Зайдите в настройки вашей системы и настройте экран.

Настройки> Вкладка «Система»> «Экран»> «Выровнять экран»

System Settings Screen Settings

1 голос
/ 15 декабря 2011

Значение Y - это, скорее всего, координаты экрана, а не координаты внутри прямоугольника, в котором вы рисуете.

Прошло много времени с тех пор, как я работал с WM, но я помню, что у меня были похожие проблемы при захвате точек через MouseEventArgs.

...