Как вы можете получить координаты кнопки «X» в окне? - PullRequest
0 голосов
/ 28 мая 2009

По той или иной причине мне нужно определить, когда пользователь действительно нажимал кнопку X. То, что я пока имею, это:

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == (int)0xa1) //WM_NCLBUTTONDOWN
        {
            Point p = new Point((int)m.LParam);
            p = this.PointToClient(p);
            if (p.X > 680)
            {
                //do what I need to do...
            }
        }

        base.WndProc(ref m);
    }

По сути, я высматриваю сообщение "WM_NCLBUTTONDOWN", которое представляет собой щелчок мышью в не клиентской области окна. Затем я получаю координаты X и Y от LParam и, наконец, преобразовываю их в Координаты экрана. Итак, на данный момент я знаю, что пользователь нажал на не клиентскую область, и я знаю, где в форме.

Мой вопрос: как я могу определить, находятся ли эти координаты на кнопке X? На данный момент я жестко программирую 680, потому что это то, что работает в текущем размере окна (оно не имеет значительного размера), но проблема в том, что я использую Windows 7, которая имеет более крупные кнопки X, чем XP, поэтому очевидно, что хардокдинг не является жизнеспособным вариант. Кроме того, я даже не кодировал координаты Y, поэтому, если кто-то щелкнет по правому краю окна, это также вызовет этот код. Итак ... у кого-нибудь есть идеи?

Ответы [ 2 ]

3 голосов
/ 28 мая 2009

Допустим, у вас есть кнопка «ОК» и кнопка «Отмена», почему бы просто не установить значение, когда нажата одна из этих кнопок. Затем в событии закрытия формы, если это значение не установлено, вы знаете, что кнопка X была нажата. Если нет других способов закрытия формы, о которых я не знаю ...

Edit:

Вместо использования глобального логического значения вы можете изменить свойство DialogResult формы при нажатии кнопки. Я не уверен, что такое значение DialogResult, когда вы нажимаете кнопку X, вам придется его попробовать.

0 голосов
/ 28 мая 2009

Если вы проверяете сообщение WM_NCHITTEST, которое должно сообщать вам, когда указатель мыши находится над кнопкой закрытия.

...