tarr-michael@CS.Yale.EDU (michael tarr) (07/09/90)
************************************************************************** Help! I am trying to get a window to the screen with scroll bars in Think C 4.0!!! I call InitMessageWindow and it inits fine, but then sometime soon after I call dPrompt the system freezes up completely. What am I doing wrong? Thanks in advance. Mike Tarr tarr@cs.yale.edu ************************************************************************** /**** InitMessageWindow ****/ void InitMessageWindow(void) { Rect messageRect; char titleStr[20]; SetRect( &messageRect, screenBits.bounds.left + 2, screenBits.bounds.top + MBarHeight * 2, screenBits.bounds.right - 3, screenBits.bounds.bottom - 3 ); strcpy(titleStr, "macExp Version "); strcat(titleStr, PtoCstr(gVersion)); CtoPstr(gVersion); CtoPstr(titleStr); gMessageWindow = NewWindow( NIL_POINTER, &messageRect, titleStr, VISIBLE, documentProc, MOVE_TO_FRONT, NO_GO_AWAY, NIL_REF_CON ); SetPort( gMessageWindow ); InitMessageScrollBar(); gCurrRow = 0; gMaxRow = messageRect.bottom - messageRect.top - ROWHEIGHT; } #define SCROLL_BAR_PIXELS 16 #define START_VALUE 1 #define MIN_VALUE 1 #define MAX_VALUE 100 /*** InitMessageScrollBar ***/ static void InitMessageScrollBar(void) { Rect vScrollRect; vScrollRect = gMessageWindow->portRect; vScrollRect.top -= 1; vScrollRect.bottom += 1; vScrollRect.left = vScrollRect.right - SCROLL_BAR_PIXELS + 1; vScrollRect.right += 1; gMessageScrollBarHandle = NewControl( gMessageWindow, &vScrollRect, NIL_TITLE, VISIBLE, START_VALUE, MIN_VALUE, MAX_VALUE, scrollBarProc, NIL_REF_CON ); } #define OK_BUTTON 1 #define DITL_ID 500 #define THE_PROMPT 2 #define THE_RESPONSE 3 #define STRT_SEL 0 #define END_SEL 32767 /**** dPrompt ****/ char* dPrompt(prompt, defaultReply) char* prompt; char* defaultReply; { Handle itemList, itemHandle; DialogPtr codeDialog; GrafPtr oldPort; Rect boundsRect, itemRect; Boolean dialogDone = FALSE; int itemType, itemHit; char tempString[255]; if ( (itemList = GetResource( 'DITL', DITL_ID )) == NIL_POINTER ) { ErrorHandler("dPrompt", "Couldn't find DITL", (char*) NIL_POINTER); FatalError(); } SetRect(&boundsRect, (screenBits.bounds.right / 2) - 200, (screenBits.bounds.bottom / 2) - 80, (screenBits.bounds.right / 2) + 200, (screenBits.bounds.bottom / 2) + 80); codeDialog = NewDialog( NIL_POINTER, &boundsRect, NIL_TITLE, TRUE, dBoxProc, MOVE_TO_FRONT, NO_GO_AWAY, NIL_REF_CON, itemList ); ShowCursor(); GetDItem( codeDialog, OK_BUTTON, &itemType, &itemHandle, &itemRect ); GetPort( &oldPort ); SetPort( codeDialog ); PenSize(3, 3); InsetRect( &itemRect, -4, -4 ); FrameRoundRect( &itemRect, 16, 16 ); PenSize(1, 1); SetPort( oldPort ); GetDItem( codeDialog, THE_PROMPT, &itemType, &itemHandle, &itemRect ); SetIText( itemHandle, CtoPstr(prompt) ); PtoCstr(prompt); GetDItem( codeDialog, THE_RESPONSE, &itemType, &itemHandle, &itemRect ); SetIText( itemHandle, CtoPstr(defaultReply) ); PtoCstr(defaultReply); SelIText( codeDialog, THE_RESPONSE, STRT_SEL, END_SEL ); while ( !dialogDone ) { ModalDialog( NIL_POINTER, &itemHit ); switch ( itemHit ) { case OK_BUTTON: GetDItem( codeDialog, THE_RESPONSE, &itemType, &itemHandle, &itemRect ); GetIText( itemHandle, &tempString ); PtoCstr(tempString); dialogDone = TRUE; break; } } DisposDialog( codeDialog ); ReleaseResource( itemList ); HideCursor(); DrawClearScreen(); return(tempString); }