Как получить координаты x, y щелчка мыши с Win32 C ++ на объекте DirectX? - PullRequest
1 голос
/ 06 декабря 2009

Как я могу получить координаты x, y щелчка мыши, чтобы увидеть, находится ли он над моей кнопкой меню, нарисованной directx? В настоящее время моя кодовая база имеет следующий связанный с мышью класс, который, кажется, не может дать мне это ... Я не уверен, как это может работать.

InputMouse::InputMouse() :
    m_LastX(-1),
    m_LastY(-1)
{
    m_MouseActionEvent.clear();
}

InputMouse::~InputMouse()
{

}

void InputMouse::PostUpdate()
{
    m_CurrentAction.clear();
}

bool InputMouse::IsEventTriggered(int eventNumber)
{
    for (unsigned int i = 0; i < m_CurrentAction.size(); i++)
    {
        if (m_MouseActionEvent.size() > 0 && m_MouseActionEvent[m_CurrentAction[i]] == eventNumber)
        {
            return true;
        }
    }
    return false;
}

void InputMouse::AddInputEvent(int action, int eventNumber)
{
    m_MouseActionEvent[action] = eventNumber;
}

void InputMouse::SetMouseMouse(int x, int y)
{
    if (m_LastX != -1)
    {
        if (x > m_LastX)
        {
            m_CurrentAction.push_back(MOUSE_RIGHT);
        }
        else if (x < m_LastX)
        {
            m_CurrentAction.push_back(MOUSE_LEFT);
        }

        if (y > m_LastY)
        {
            m_CurrentAction.push_back(MOUSE_UP);
        }
        else if (y < m_LastY)
        {
            m_CurrentAction.push_back(MOUSE_DOWN);
        }
    }

    m_LastX = x; 
    m_LastY = y;
}

Ответы [ 3 ]

2 голосов
/ 08 декабря 2009

Если ваши кнопки меню 2D, это должно быть так же просто, как запомнить координаты экрана, используемые для ваших кнопок.

Если вы пытаетесь определить, попадет ли щелчок на трехмерный объект, который был отрендерен, то метод, который вы ищете, называется Выбор .

Простой Google для "DirectX Picking" дает хорошие результаты:

В основном, техника включает преобразование щелчка мыши в луч в сцене. Для ваших пунктов меню, вероятно, будет достаточно простой ограничительной рамки для определения «попадания».

1 голос
/ 07 декабря 2009

DirectX или нет, GetCursorPos собирается получить положение мыши в координатах экрана. ScreenToClient отобразит относительную точку экрана на точку относительно клиентской области вашего окна / поверхности DirectX.

0 голосов
/ 09 декабря 2009

Как только объект нарисован, система не знает, какие пиксели на экране изменились, и эти пиксели не знают, какой объект или объекты изменили его (и даже если эти объекты все еще существуют). Поэтому, если вам нужно знать, где что-то находится на экране, вы должны отслеживать это самостоятельно. Для кнопок и других элементов графического интерфейса это обычно означает сохранение вашего графического интерфейса в памяти вместе с прямоугольниками, которые определяют границы каждого элемента. Затем вы можете сравнить положение мыши с границей каждого элемента, чтобы увидеть, на какой элемент он указывает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...