2013-05-12 273 views
0

如何在用户单击鼠标左键后(鼠标点击坐标 - 换句话说)获取鼠标屏幕坐标。这是一个用FireBreath写的插件。 我试着使用:获取鼠标屏幕坐标点击

FB::variant TestPluginAPI::Detect() 
{ 
POINT pt; 

if (WM_LBUTTONUP) 
{ 
    GetCursorPos(&pt); 
} 
FB::VariantList Dtd = FB::variant_list_of(pt.x)(pt.y); 
return Dtd; 

它返回的JavaScript Array Dtdpt.x和它pt.y,然后我用这个数组来呈现这个坐标经JS我的网页上。 这只能在页面启动时给我鼠标坐标。

然后我试图WM_LBUTTONUP == MK_RBUTTONif;它给了我一些随机的大数字......我能做什么?
你会帮助我吗?

回答

2

如果你想在你的JavaScript功能鼠标的位置,你可以在你的插件的回调函数JSAPI并调用它鼠标左键点击带有参数的鼠标坐标的FB :: VariantList时。您可以通过重载继承自FB :: PluginCore的类中的onMouseDown事件来检测鼠标点击。要注册onMouseDown事件,您可以在标题中使用以下代码。
BEGIN_PLUGIN_EVENT_MAP()
   EVENTTYPE_CASE(FB::MouseDownEvent, onMouseDown, FB::PluginWindow) END_PLUGIN_EVENT_MAP()

virtual bool onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *);

onmousedown事件可以定义为 -
bool MirrarOrnaments::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *)
{

   if(evt->m_Btn == FB::MouseButtonEvent::MouseButton_Left)
   {
     /**
      * apiPtr is the pointer to FB::JSAPIPtr
      * mousePositionCallback is the JSAPI function which takes variant list of mouse
      * co-ordinates as argument
      */
      apiPtr->invoke("mousePositionCallback", FB::variant_list_of(evt->m_x)(evt->m_y));
   }
}

希望这是您要问什么。你的问题有点含糊。

+0

谢谢,这似乎是我想要的。 – 2013-05-14 00:19:26

+0

你可以给我一些提示,这个apiPtr可以看看我的代码,我只是不明白我怎么才能正确地写它,我怎么能得到它 – 2013-05-19 20:07:22

+0

你的apiPtr是FB :: JSAPIPtr你在createJSAPI返回功能。你可以像这样分配它 - apiPtr = PluginAPIPtr(new PluginAPI(FB :: ptr_cast (shared_from_this()),m_host)); – 2013-06-05 12:12:22

1

WM_LBUTTONUP是一个WinAPi函数,所以你应该有权访问与消息一起的lParam。

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 
+0

lParam? “有权访问”是什么意思?它是窗口函数的一部分吗?但如果它是浏览器插件,我可以“访问”它? – 2013-05-12 19:40:29

+0

你用winapi标记了问题并使用了WM_LBUTTONUP,所以我假设你得到了包含lParam的windows消息事件。你从哪里得到这个WM_LBUTTONUP? lParam是附加信息,如果发生按钮向上事件,它将在事件发送时发送当前的X/Y位置。 – Devolus 2013-05-12 19:42:09

+0

无论我的窗口的窗口消息事件如何,我是否可以直接点击鼠标坐标?因为我现在有点困惑,我可以得到它的浏览器窗口。 – 2013-05-12 21:57:34