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