bool onMouseButtonDown(const EventArgs & e)
{
const MouseEventArgs & eMouse = static_cast<const MouseEventArgs &>(e);
// 取得控件(窗口)在屏幕主窗口中的绝对像数位置
//Rect rectScreen = eMouse.window->getUnclippedPixelRect();
Rect rectScreen = eMouse.window->getPixelRect();
// 取得控件相对于父窗口的相对位置
CEGUI::Size parentSize = eMouse.window->getParentPixelSize(); // 父窗口的像数大小
Vector2 pos = eMouse.window->getPosition().asAbsolute(parentSize); // 相对于父窗口的像数位置
Vector2 relPos = eMouse.window->getPosition().asRelative(parentSize); // 相对于父窗口的百分比位置
// 鼠标事件参数中的位置信息eMouse.position是主窗口屏幕的绝对位置
Point absMousePos = eMouse.position;
// 变化为相对于该控件的相对位置
Point relMousePos;
relMousePos.d_x = absMousePos.d_x - rectScreen.d_left;
relMousePos.d_y = absMousePos.d_y - rectScreen.d_top;
ListboxItem* curPosItem = this->getItemAtPoint(relMousePos);
MessageBoxA(0, curPosItem->getText().c_str(), 0, 0);
return true;
}
本文介绍了一个具体的鼠标点击事件处理函数实现细节。通过该函数,可以获取控件在屏幕上的绝对位置、相对于父窗口的位置和大小,并将鼠标点击事件中的坐标转换为相对于当前控件的坐标。此外,还展示了如何根据点击位置查找对应的列表项并显示其文本。
218

被折叠的 条评论
为什么被折叠?



