2013-05-12 336 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