當用戶點擊一個主題窗口(widget)的關閉框時,我該如何攔截,以及如何阻止Motif窗口管理器關閉被點擊的關閉框上的整個調用應用程序(以便我的應用程序可以關閉Motif應用程序上下文和窗口並繼續運行)?我試圖用Google,tuts和docs來發現自己,但沒有骰子。需要C++。Motif:攔截關閉盒事件並阻止應用程序退出? (C++)
1
A
回答
1
這似乎是工作(在INET找到):
#include <Xm/Protocols.h>
Boolean SetCloseCallBack (Widget shell, void (*callback) (Widget, XtPointer, XtPointer))
{
extern Atom XmInternAtom (Display *, char *, Boolean);
if (!shell)
return False;
Display* disp = XtDisplay (shell);
if (!disp)
return False;
// Retrieve Window Manager Protocol Property
Atom prop = XmInternAtom (disp, const_cast<char*>("WM_PROTOCOLS"), False);
if (!prop)
return False;
// Retrieve Window Manager Delete Window Property
Atom prot = XmInternAtom (disp, const_cast<char*>("WM_DELETE_WINDOW"), True);
if (!prot)
return False;
// Ensure that Shell has the Delete Window Property
// NB: Necessary since some Window managers are not
// Fully XWM Compilant (olwm for instance is not)
XmAddProtocols (shell, prop, &prot, 1);
// Now add our callback into the Protocol Callback List
XmAddProtocolCallback (shell, prop, prot, callback, NULL);
return True;
}
設置這樣的回調將阻止應用程序被關閉的關閉事件是手柄是默認的事件處理程序的結果。
0
IIRC,在X11上,當你點擊一個窗口的關閉框,窗口管理器將信號發送到您的應用程序,告訴它退出。無論您使用motif還是gtk或Qt都無關緊要,因爲關閉框屬於WM,而不是您的應用程序。
您需要捕獲unix信號以防止應用程序關閉。
1
vendorShellWidgetClass不會爲您做詭計嗎?如在,關閉只是圖案的應用程序上下文,而不是窗口..
相關問題
- 1. 阻止控制檯關閉時應用程序退出
- 2. Castle Windsor攔截器阻止PropertyChanged事件
- 3. 退出事件處理程序強制應用程序關閉
- 4. Android Phonegap App - 退出時關閉並停止應用程序
- 5. 阻止移動應用程序退出
- 6. MessageBox阻止從應用程序退出
- 7. 攔截頁面退出事件
- 8. 阻止應用程序關閉
- 9. Qt - 如何攔截應用程序的關閉事件(如果有的話)
- 10. 阻止提琴手攔截應用程序
- 11. 如何攔截swift iOS應用程序的關鍵事件?
- 12. 如果window.open()被彈出窗口攔截器阻止,則回退?
- 13. NSWindow關閉時退出應用程序
- 14. 退出時應用程序關閉Android
- 15. 在Windows關閉應用程序退出
- 16. Java併發。阻止應用程序退出
- 17. C#COM DLL阻止VBA應用程序退出
- 18. C#Windows應用程序阻止Windows關閉/註銷
- 19. 如何阻止C#控制檯應用程序自動關閉?
- 20. golang - 阻止應用退出
- 21. 「攔截」Windows關閉並執行命令
- 22. 阻止應用關閉
- 23. 阻止Android應用。關閉
- 24. 如何判斷setInterval是否阻止應用程序退出最後一件事
- 25. QT:如何退出應用程序並關閉UI
- 26. 關閉並退出我的應用程序在android
- 27. 如何正確關閉應用程序並退出代碼
- 28. 如何關閉所有活動並退出應用程序
- 29. 後退線程不關閉退出應用程序
- 30. 如何在C#windows應用程序中單擊關閉按鈕時阻止應用程序關閉?
我問*怎麼做到這一點。我已經知道,我必須以某種方式攔截涉及的事件,並防止默認的退出處理程序被調用。 – karx11erx 2009-09-07 13:46:21
我*已*告訴你如何去做。谷歌「unix信號」,你會得到答案。 – 2009-09-07 14:54:28
你什麼都沒有。你的提示是毫無價值的。看到我自己給出的答覆,這是一個很好的答覆。 – karx11erx 2009-09-07 21:45:14