[英]How to get the x,y coordinate of a mouse-click with win32 C++ on a directx object?
如何獲得鼠標單擊的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;
}
如果您的菜單按鈕是2D菜單,那么這就像記住按鈕所用的屏幕坐標一樣簡單。
如果您要確定單擊是否落在已渲染的3D對象上,那么您正在尋找的技術稱為Picking 。
一個簡單的Google用於“ Directx Picking”的結果很好:
基本上,該技術涉及將鼠標單擊轉換為射線並轉換為場景。 對於您的菜單項,一個簡單的邊界框可能足以確定“命中”。
不論是否使用DirectX, GetCursorPos都會在屏幕坐標中檢索鼠標的位置。 ScreenToClient會將屏幕相對點映射到相對於window / directX曲面的客戶區域的點。
繪制對象后,系統不知道屏幕上更改了哪些像素,這些像素也不知道哪個或哪些對象更改了對象(即使這些對象甚至仍然存在)。 因此,如果您需要了解屏幕上的某些內容,則必須自己進行跟蹤。 對於按鈕和其他GUI元素,這通常意味着將GUI與定義每個元素邊界的矩形一起保留在內存中。 然后,您可以將鼠標位置與每個元素的邊界進行比較,以查看其指向哪個元素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.