Path: utzoo!attcan!uunet!wuarchive!zaphod.mps.ohio-state.edu!samsung!cs.utexas.edu!sun-barr!newstop!sun!imagen!atari!mui From: mui@atari.UUCP (Derek Mui) Newsgroups: comp.sys.atari.st Subject: Re: GEM windows programming problem Message-ID: <1958@atari.UUCP> Date: 12 Jan 90 19:59:32 GMT References: <11830069@hpldola.HP.COM> Organization: Atari Corp., Sunnyvale CA Lines: 75 in article <11830069@hpldola.HP.COM>, jg@hpldola.HP.COM (Joe Gilray) says: > > > Here is a GEM programming problem: > > I've written a multiwindow GEM application, everything was fine until I > added a "feature" that allows users to edit window data in a dialog box. > The dialog box editing function allows the user to edit data that may > appear in several windows that are currently open on the screen. > > Here's the difficulty, when the dialog box closes, the window(s) receive > a WM_REDRAW message which is fine, but data may have changed in an area > of a window (or two, or three) that is not covered by the dialog box and > therefore does not appear on the redraw rectangle list. When the uncovered > part of the window(s) is redrawn the window data looks wrong because the > part of the window that was not covered is old. > Here's my $0.02 Inside the same function do the following: Immediately after the dialogue box is closed, do a evnt_multi of Timer Zero and Messages wait. You should receive a redraw message with a rectangle that covered the windows, and then do the normal window redraw. After you have done all these, do your internal data update. Then do a window redraw with a big rectangle ( full desktop size ) to each of the windows. The code should look like: foo( ) { ......; ......; form_do( ... ); form_dial( 3, ... ); event = evnt_multi( MU_TIMER|MU_MESAG, ..., msgbuff, .... ); if ( event & MU_MESAG ) { /* do your own window redraw */ do_redraw( msgbuff[3], &msgbuff[4] ); /* window handle, rectangle */ } update_windowdate( ); /* update your windows' data */ handle = firstwin( ); /* get your first window's handle */ loop { /* rectangle = desktop rectangle area */ do_redraw( handle, rectangle ); handle = nextwin; /* get your next window's handle */ }while( handle >= 0 ); } Hope this helps and works! ================================================================== Derek Mui, Atari Corp, 1196 Borregas Ave, Sunnyvale, CA 94086 UUCP: {..ames!atari!mui} FAX: 408-745-5179 Disclaimer: Opinions expressed here are my own and they may be hazardous to your mind. ==================================================================