我有这个消息循环:
while (!shutdown_now_)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event) [NSApp sendEvent:event];
// If modifying window event, do something!!!
[pool drain];
}
我想过滤所有修改窗口的NSEvents,例如移动、调整大小、订购等等。我试着在苹果文档中寻找类型,但没有成功。有什么帮助吗?谢谢
过滤事件不是正确的方法。
如果不希望用户移动窗口,请将窗口的movable
属性设置为false。
如果不希望用户调整窗口大小,请将窗口的styleMask
设置为不包括NSResizableWindowMask
。或者,可能将其contentMinSize
和contentMaxSize
设置为其当前大小。
任何事件都不能直接订购窗口。窗口的代理可以通过实现-windowShouldClose:
来决定关闭按钮是否真的关闭了窗口。如果根本不希望启用关闭按钮,请将styleMask
设置为不包括NSClosableWindowMask
。
我要查找的事件类型是NSAppKitDefined
:
while (!shutdown_now_)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:[NSDate distantFuture]
inMode:NSDefaultRunLoopMode
dequeue:YES];
if (event.type == NSAppKitDefined)
{
NSLog(@"NSAppKitDefinedEvent with subtype: %d", event.subtype);
}
if (event) [NSApp sendEvent:event];
[pool drain];
}