2011-04-04 49 views
1

我敢肯定,這只是一個簡單的答案,我只是沒有看到(與可可這些API很大的API的禍害)。我正在使用Apple的Sketch示例版本(我認爲這是原版,之前他們添加了可訪問性內容,並基於KVO製作了整個內容)。我正在使用'kiss'版本,這個版本漂浮在那裏,增加了Bezier和多邊形工具,試圖獲得它,所以如果您在創建工具面板時點擊工具面板,Bezier點跟蹤循環會折騰結束路徑。處理跟蹤列表中的點的相關行是這樣的:可可 - 只有特定窗口的鼠標事件? KeyDown事件?

// SKTGraphicView* view 
// Tracking loop 
while (1) { 
    event = [[view window] nextEventMatchingMask: 
(NSLeftMouseDownMask | NSLeftMouseDraggedMask | NSLeftMouseUpMask)]; 
    point = [view convertPoint:[event locationInWindow] fromView:nil]; 

如何判斷此點是否在文檔窗口內?我試過

BOOL insideView = [view mouse:point inRect:[view bounds]]; 

只要它跟蹤MouseDragged事件就會工作,但如果在工具選項板窗口中單擊將失敗。從locationInWindow出來的座標,看起來像是我單擊一個單獨的窗口,它將吐出相對於封閉窗口原點的點 - 無論那個窗口是什麼。我如何讓它從任何'屏幕座標是'([事件locationOnScreen]?)轉換,然後轉換到特定視圖的座標系?

我可以使用([view window] == [event window]) - 但對於初始點擊在窗口內的MouseDragged事件,這似乎沒有改變(但我可以在那裏檢查邊界矩形) 。但是,如果在特定的NSWindow對象上調用nextEventMatchingMask:它似乎應該只返回發生在該窗口中的事件。

回答

0

在視圖中,不在窗口,覆蓋 - [(無效)鼠標按下:(NSEvent *)theEvent]

在覆蓋

然後:

明白你的意思是這樣的:

- (void) mouseDown: (NSEvent *) theEvent 
{ 
    myPoint = [self convertPoint: [theEvent locationInWindow] fromView: nil] 
} 

...類似於mouseDragged,mouseUp,rightMouse等