vanderpool@cals.enet.dec.com (Russ Vanderpool) (03/21/91)
I've just started digging my hands into modeless dialog boxes, and am having a problem being able to move the dialog box around, and also closing it. I can't. Is there anything obvious missing(I think there is). I've read everything in IM-I on IsDialogEvent() & DialogSelect(). In the program below, these routines seem to work. When I click on a user item, the Boolean flags correctly get set. I just can't move the thing around. Under Multifinder, I can switch back to the desktop, so that part is working. In RESEdit, I've tried various combinations with setting the check boxes: "Initially visible" and "Close box", without any success. What's missing? +Russ =========================================================================== /* * Using THINK C * DLOG ID: 2777 (just contains a couple of radio buttons and a static text) */ #include <stdio.h> #define ALERT_DLG_ID 3017 #define MODELESS 2777 #define NIL_POINTER 0L #define MOVE_TO_FRONT -1L /* * For debugging purposes */ #define HALT asm{_Debugger} void ShowSelection(char *s); void Init(void); void EventLoop(void); void GoModeless(void); /* * Globals variables for event loop */ Boolean gDone; unsigned short gmask; /* using everyEvent */ EventRecord gevent; unsigned long gsleep; DialogPtr myDialog; main() { Init(); GoModeless(); } void Init() { InitGraf( &thePort ); InitFonts(); FlushEvents( everyEvent, 0 ); InitWindows(); InitMenus(); TEInit(); InitDialogs( 0L ); InitCursor(); } /* * Handle events for the modeless dialog box */ void EventLoop() { Boolean isDLGevent, isITEMhit; int i; int itemHit; WaitNextEvent( everyEvent, &gevent, gsleep, NIL_POINTER); isDLGevent = IsDialogEvent( &gevent ); if(isDLGevent) { isITEMhit = DialogSelect( &gevent, &myDialog, &itemHit); if(isITEMhit) { /* HALT;*/ } } switch( gevent.what ) { case keyDown: /* HALT;*/ gDone = TRUE; default: break; /* do nothing, all other events will hit here */ } } void GoModeless() { /* * Set up modeless dialog box */ myDialog = GetNewDialog( MODELESS, NIL_POINTER, MOVE_TO_FRONT ); ShowWindow( myDialog ); gDone = FALSE; while( gDone == FALSE ) { EventLoop(); } DisposDialog(myDialog); } /* * Shows alert dialog box */ void ShowSelection(s) char *s; { Str255 tStr; GetIndString(&tStr,256,4); ParamText(s,0,0,0); NoteAlert(ALERT_DLG_ID, 0); };