2009-09-07 4 views
1

사용자가 모티프 창 (위젯) 닫기 상자를 클릭 할 때 가로 채기를 어떻게 할 수 있습니까? 그리고 Motif 윈도우 관리자가 닫힌 상자에서 전체 호출 응용 프로그램을 닫을 수 없게하려면 어떻게해야합니까? Motif 응용 프로그램 컨텍스트 및 창을 닫고 계속 실행하십시오.) 나는 Google, tuts 및 docs로 자신을 알아 내려고 노력했지만 주사위는 사용하지 않았습니다. C++가 필요합니다.주제 : 닫기 상자 이벤트를 가로 채고 응용 프로그램 종료를 방지 하시겠습니까? (C++)

답변

1

: 응용 프로그램을 방지 할 수 이러한 콜백을 설정

#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; 
} 

는 close 이벤트 인 핸들 할 기본 이벤트 핸들러의 결과로 폐쇄.

0

IIRC, X11에서 창 닫기 상자를 클릭하면 창 관리자가 응용 프로그램에 신호를 보내서 종료하도록 지시합니다. 닫는 상자가 응용 프로그램이 아니라 WM에 속하기 때문에 motif 또는 gtk 또는 Qt를 사용하는지 여부는 관계가 없습니다.

응용 프로그램이 닫히지 않도록 유닉스 신호를 알아야합니다. 합니다 (INET에 있음)이 작동하는 것 같다

+0

나는 어떻게해야할까요? 어떻게 든 이벤트를 가로 채고 기본 종료 핸들러가 호출되지 않도록해야한다는 것을 이미 알고 있습니다. – karx11erx

+0

나는 * 어떻게해야하는지 알려 줬다. 구글 "유닉스 신호"그리고 당신은 대답을해야합니다. –

+0

당신은 아무것도 없습니다. 너의 가정 된 힌트는 가치가 없다. 내 스스로 주어진 반응을 보아라, 그것은 좋은 대답이다. – karx11erx

1

vendorShellWidgetClass가 속임수를 사용하지 않습니까? 마찬가지로, 모티프 앱 컨텍스트를 닫고 창을 닫지 마십시오 ..

관련 문제