X作成講座 on TC(8) 外部ウィンドウを作る(パレット)
パレットタイプのウィンドウを作ります。
// -------------------------------- // xPalette template 1998.3.11 ( c )UDI // for THINK C 7.1 // -------------------------------- #include "HyperXCmd.h" #include "SetUpA4.h" /* Prototypes */ void createWindow( XCmdPtr paramPtr ); void doEvent( XCmdPtr paramPtr ); pascal void main( XCmdPtr paramPtr ){ RememberA0( ); SetUpA4( ); if ( paramPtr->paramCount > -1 ){ createWindow( paramPtr ); } else { doEvent( paramPtr ); } RestoreA4( ); } void createWindow( XCmdPtr paramPtr ){ Str255 tempStr, winName; short theLeft, theTop, theRight, theBottom, picID; Rect winRect; PicHandle myPicHand; WindowPtr myWindowPtr; ZeroToPas( paramPtr, *paramPtr->params[0], winName ); ZeroToPas( paramPtr, *paramPtr->params[1], tempStr ); picID = StrToNum( paramPtr, tempStr ); myPicHand = GetPicture( picID ); if ( myPicHand == nil ){ paramPtr->returnValue = PasToZero( paramPtr, "\pNot found picture resource" ); return; } if ( paramPtr->paramCount > 2 ){ ZeroToPas( paramPtr, *paramPtr->params[2], tempStr ); StrToRect( paramPtr, tempStr, &winRect ); } else { winRect = ( **myPicHand ).picFrame; OffsetRect( &winRect, 100,100 ); } myWindowPtr = NewXWindow(paramPtr, &winRect,winName, false, paletteProc, true, true); if ( myWindowPtr == nil ){ paramPtr->returnValue = PasToZero( paramPtr, "\pCouldn't create XWindow" ); return; } SetWRefCon( myWindowPtr, ( long )myPicHand ); } void doEvent( XCmdPtr paramPtr ){ GrafPtr savePort; EventRecord myEvent; WindowPtr myWindowPtr; XWEventInfoPtr myXWEventInfoPtr; PicHandle myPicHand; myXWEventInfoPtr = ( XWEventInfoPtr)(paramPtr->params[0] ); myWindowPtr = myXWEventInfoPtr->eventWindow; myEvent = myXWEventInfoPtr->event; GetPort( &savePort) ; SetPort( myWindowPtr ); switch ( myEvent.what ){ case mouseDown: switch ( FindWindow( myEvent.where, &myWindowPtr ) ){ case inGoAway: // closeBox if ( TrackGoAway( myWindowPtr, myEvent.where ) ){ CloseXWindow( paramPtr, myWindowPtr ); } break; case inDrag: // titleBar paramPtr->passFlag = true; break; case inContent: // window content SelectWindow( myWindowPtr ); InvertRect( &( myWindowPtr->portRect ) ); break; } break; case xOpenEvt: XWAllowReEntrancy(paramPtr, myWindowPtr, true, true); ShowWindow( myWindowPtr ); paramPtr->passFlag = true; break; case xCloseEvt: paramPtr->passFlag = true; break; case xHidePalettesEvt: // palette only HideWindow( myWindowPtr ); break; case xShowPalettesEvt: // palette only ShowWindow( myWindowPtr ); break; case updateEvt: BeginUpdate( myWindowPtr ); myPicHand = ( PicHandle )GetWRefCon( myWindowPtr ); DrawPicture( myPicHand, &( **myPicHand ).picFrame ); EndUpdate( myWindowPtr ); if( FrontWindow() == myWindowPtr ) SelectWindow( myWindowPtr ); // palette only HiliteWindow( myWindowPtr, true ); // palette only break; case activateEvt: break; case app4Evt: ShowHide( myWindowPtr, ( myEvent.message % 2 != 0 ) ); // palette only break; case xCursorWithin: paramPtr->passFlag = true; // change arrow-cursor by HyperCard break; } SetPort( savePort ); }
on mouseUp xWin "testWin", 1000, "100,100,200,200" if the result is not empty then answer the result end mouseUp