我有这个消息循环:
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];
}
我想过滤修改窗口的所有NSEvent,例如移动,调整大小,排序e.t.c.我试图在Apple documentation中寻找类型,但没有成功。有帮助吗?谢谢!
答案 0 :(得分:2)
过滤事件不是正确的方法。
如果您不想让用户移动窗口,请将窗口的movable
属性设置为false。
如果您不想让用户调整窗口大小,请将窗口styleMask
设置为不包括NSResizableWindowMask
。或者,可能将其contentMinSize
和contentMaxSize
设置为其当前大小。
没有事件可以直接命令窗口。窗口的委托通过实现-windowShouldClose:
来决定关闭按钮是否实际关闭了窗口。如果您根本不想启用关闭按钮,请将styleMask
设置为不包括NSClosableWindowMask
。
答案 1 :(得分:0)
我正在寻找的事件类型是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];
}