2011-04-12 39 views
1

我的滑塊有一個子按鈕控件。我最近更改了我的GUI,以便相對於窗口小部件發送鼠標座標,因此如果窗口小部件的寬度爲50,50,鼠標的寬度爲50,50,它現在將報告爲0,0。包含滑塊控件的相對座標包含拇指控件

這對我的滑塊造成了一些問題。當我拖動按鈕時,它會定位到值。

我想到的唯一解決方法是取給定的鼠標座標,加回按鈕的絕對位置,然後減去滑塊的絕對位置。

然而,我卻希望有一個解決方案,沒有絕對定位。

我用來接收絕對鼠標位置,當我沒有,我定位這樣的:

int mousePos = getOrientation() == AGUI_HORIZONTAL ? 
    mouseArgs.getPosition().getX() - getAbsolutePosition().getX() : 
mouseArgs.getPosition().getY() - getAbsolutePosition().getY(); 

setValue(positionToValue(mousePos)); 

mouseArgs給出相對於按鈕鼠標位置。不是相對於滑塊,這是需要的。

我可以獲取小部件的相對位置,但我不認爲這樣做。

感謝

+0

什麼框架? – 2011-04-12 01:05:56

+0

這是我自己的 – jmasterx 2011-04-12 01:13:45

回答

1

由於這是一個自定義GUI,我會作出一些假設,並重申你的問題,以確保我回答你的問題。

您有一個包含拇指小部件的滑塊小部件。用戶可以點擊並拖動拇指重新定位它。您的GUI將鼠標通知發送到本地相對空間中的小部件,而不是絕對的屏幕空間。你的問題是,拇指小部件如何響應鼠標事件而不必使用絕對座標來移動本身?

你可以通過改變誰是移動拇指小部件的責任來做到這一點。它應該是滑塊小部件的工作來定位其拇指小部件。通過這樣做,所有的座標都可以在滑塊小部件的本地相對空間中。基本上它會是類似的(假設你有某種事件通知):

  1. 創建時,滑塊小部件在其子小拇指小部件上註冊各種鼠標事件。
  2. 當大拇指收到鼠標事件時,它會引發沿其本地座標傳遞的事件。
  3. 滑塊控件接收這些事件並將座標從拇指本地空間轉換爲滑塊本地空間(即,click_x = thumb_x + thumb_mouse_x)。
  4. 滑塊可以使用此滑塊本地相對空間中的座標來移動滑塊。

一般來說,家長應該對孩子的佈局負責。

+0

輝煌!謝謝! – jmasterx 2011-04-12 03:59:39