現在我有一個無邊框窗口,處理鼠標下移事件來移動和調整自己的大小。但我怎樣才能處理沒有焦點的鼠標按下事件?如何讓NSWindow處理沒有焦點的mouseDown事件?
3
A
回答
6
您的自定義視圖必須實現-acceptsFirstMouse:
方法並返回YES
。
2
[NSWindow windowNumberAtPoint:mouseDownCoordinates belowWindowWithWindowNumber:0];
通mouseDownCoordinates
中,您將通過Quartz Event Services捕捉。它會返回鼠標懸停在上面的窗口號。抓住那個窗口,做你的動作/調整大小。
樣品實施(主要來自here拍攝):
#import <ApplicationServices/ApplicationServices.h>
// Required globals/ivars:
// 1) CGEventTap eventTap is an ivar or other global
// 2) NSInteger (or int) myWindowNumber is the window
// number of your borderless window
void createEventTap(void)
{
CFRunLoopSourceRef runLoopSource;
CGEventMask eventMask = NSLeftMouseDownMask; // mouseDown event
//create the event tap
eventTap = CGEventTapCreate(kCGSessionEventTap,
kCGHeadInsertEventTap, // triggers before other event taps do
kCGEventTapOptionDefault,
eventMask,
myCGEventCallback, //the callback we receive when the event fires
nil);
// Create a run loop source.
runLoopSource =
CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
// Add to the current run loop.
CFRunLoopAddSource(CFRunLoopGetCurrent(),
runLoopSource,
kCFRunLoopCommonModes);
// Enable the event tap.
CGEventTapEnable(eventTap, true);
}
//the CGEvent callback that does the heavy lifting
CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef theEvent, void *refcon)
{
// handle the event here
if([NSWindow windowNumberAtPoint:CGEventGetLocation(theEvent)
belowWindowWithWindowNumber:0] == myWindowNumber)
{
// now we know our window is the one under the cursor
}
// If you do the move/resize at this point,
// then return NULL to prevent anything else
// from responding to the event,
// otherwise return theEvent.
return theEvent;
}
相關問題
- 1. 在NSWindow處理事件
- 2. mouseDown事件處理與主要處理
- 3. 處理沒有焦點的關鍵事件
- 4. mouseDown事件沒有顯示點擊
- 5. QWidget沒有焦點事件
- 6. 如何讓NSView立即獲得焦點/第一響應者接受mouseDown事件?
- 7. 爲什麼MouseDown事件處理程序沒有被擊中?
- 8. 如何在透明NSWindow中區分mouseDown事件與mouseDragged
- 9. 處理事件mouseDown和mouseUp在Cocoa
- 10. 沒有失去焦點事件jQuery的
- 11. jQuery的datePicker沒有焦點事件?
- 12. 爲處理焦點行處理onkeypress事件
- 13. 如何處理Windows窗體在C#中獲得焦點事件?
- 14. 如何處理Cocoa窗口中的mousedown事件
- 15. 如何處理圖表部分上的mousedown事件?
- 16. emberjs沒有處理事件
- 17. 事件處理不工作 - 失去焦點事件上彈出
- 18. 如何讓Outlook處理事件更新?
- 19. 如何讓CCSprite處理Touch事件?
- 20. 如何在Flex中處理CLICK和MouseDown事件?
- 21. C#如何爲listBox1.MouseDown創建一個事件處理程序?
- 22. NSMutableArray失去了所有對象,當沒有在nswindow焦點
- 23. 使NSWindow前臺但沒有聚焦
- 24. 如何處理DataGridViewLinkColumn的點擊事件
- 25. 處理ABPersonViewController中的點擊事件;沒有響應點擊
- 26. .Net WindowsForms MouseDown事件沒有觸發
- 27. 如何讓jQuery點擊事件處理角js
- 28. 將mousedown事件分派給元素將不會使其焦點
- 29. 在DOM節點上處理焦點和模糊事件
- 30. 如何訪問聚焦事件中的事件對象事件處理程序
這不是您自己的應用程序中的窗口所必需的。你只需要實現'-acceptsFirstMouse:'就像我的答案一樣。 – 2011-03-04 04:03:48
織補。哦,希望它能幫助別人! – darvids0n 2011-03-05 13:37:18