يظهر nsrunalertpanel خلف "النافذة النشطة"
-
26-09-2019 - |
سؤال
أحاول تجميع حزمة الإبلاغ عن خطأ بسيط. إذا تعطل البرنامج الرئيسي ، فإنه يحفظ Crashlog ، ثم يبدأ برنامج مراسل. يسأل برنامج المراسل المستخدم إذا كان بإمكانه إرسال سجل التصادم إلي ، ثم يفعل ذلك. أنا أستخدم nsrunalertpanel لإنشاء مربع رسالة أساسي.
لسبب ما ، يظهر مربع الرسائل هذا المدفون أسفل أي نوافذ أخرى قد تكون مفتوحة. قم بتشغيل الحزمة الرئيسية من نافذة Finder ، ويظهر في الأعلى ، وإجبارها على التعطل ، وتظهر نافذة المراسل وراء نافذة الباحث.
لماذا يحدث هذا ، وكيف يمكن حله؟
قضية الاختبار الحد الأدنى:
#import <AppKit/AppKit.h>
int main(int a, char* av) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSApplication* q = [[NSApplication alloc] init];
NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
[pool release];
}
بنيت مع:
g++ test.mm -framework AppKit && ./a.out
المحلول
يبدو أنني قد توصلت إلى حل ، تم تقطيره من العديد من صفحات الويب المتعلقة بشكل عرضي:
#import <AppKit/AppKit.h>
int main(int a, char* av) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSApplication* q = [[NSApplication alloc] init];
ProcessSerialNumber psn = {0, kCurrentProcess};
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
[NSApp activateIgnoringOtherApps:YES];
NSRunAlertPanel(@"Hello", @"Aloha", @"OK", nil,nil);
[pool release];
}
لا أدعي أن أفهم هذا - إنها برمجة عبادة البضائع في أفضل حالاتها. ستكون الإجابات الأفضل ، أو تفسيرات ما تفعله كل خطوة ، موضع تقدير كبير.
لا تنتمي إلى StackOverflow