RbBFBlokProj OrƋPSIVStrn5.5OPSpStrnWindowSubclass.rbACnmStrnAChpStrnACsvStrnlocalhost:7325Ver1Strn1Ver2Strn0Ver3Strn0RelsStrn0NnRlStrn0RegnStrn0SVerStrnLVerStrnIVerStrnDVewInt PWprTpInt DLanInt CLanInt DEncInt BflgInt BCXFInt IconGrup :EndGInt :CPalGrup ;flagInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt elemInt EndGInt ;MacCStrn????BMacStrnMy Application (Classic)BCarStrnMy ApplicationBSizInt @BMSzInt BSzSStrn4096BMSSStrn2048MDIcStrnMy ApplicationBWinStrnMy Application.exeBMDIInt BL86Strn MyApplicationrEdtRect2fTypGrupL scKyInt rEdtRect+!eSptInt EndGInt >EndGInt =lstHInt lstVInt PDefGrup4 ?nameStrnNamePValStrnWindow1EncoInt EndGInt ?PDefGrup( @nameStrnFramePValStrn0EndGInt @PDefGrup0 AnameStrn CompositePValStrnFalseEndGInt APDefGrup0 BnameStrn HasBackColorPValStrnFalseEndGInt BPDefGrup0 CnameStrn BackColorPValStrn16777215EndGInt CPDefGrup( DnameStrnBackdropPValStrn0EndGInt DPDefGrup8 EnameStrnTitlePValStrnUntitledEncoInt EndGInt EPDefGrup( FnameStrnVisiblePValStrnTrueEndGInt FPDefGrup0 GnameStrn FullScreenPValStrnFalseEndGInt GPDefGrup0 HnameStrnMenuBarVisiblePValStrnTrueEndGInt HPDefGrup( InameStrnCloseBoxPValStrnTrueEndGInt IPDefGrup( JnameStrnGrowIconPValStrnTrueEndGInt JPDefGrup0 KnameStrn LiveResizePValStrnFalseEndGInt KPDefGrup, LnameStrnZoomIconPValStrnFalseEndGInt LPDefGrup( MnameStrn BalloonHelpPValStrnEndGInt MPDefGrup, NnameStrn MacProcIDPValStrn0EndGInt NPDefGrup0 OnameStrnMenuBarPValStrn -1102005162EndGInt OPDefGrup, PnameStrn PlacementPValStrn0EndGInt PPDefGrup( QnameStrnWidthPValStrn355EndGInt QPDefGrup( RnameStrnHeightPValStrn300EndGInt RPDefGrup( SnameStrnMinWidthPValStrn64EndGInt SPDefGrup, TnameStrn MinHeightPValStrn64EndGInt TPDefGrup, UnameStrnMaxWidthPValStrn32000EndGInt UPDefGrup0 VnameStrn MaxHeightPValStrn32000EndGInt VFDefGrup WNameStrnWindow1SizeInt SuprStrnWindowbNtrInt HInsGrup XEncoInt nameStrnKeyDownsorcGrup YstsrInt stscInt ndsrInt ndscInt EncoInt srclStrn*Function KeyDown(Key As String) As BooleansrclStrnsrclStrn End FunctionEndGInt YEndGInt XHInsGrup ZEncoInt nameStrnClosesorcGrup [stsrInt stscInt !ndsrInt ndscInt !EncoInt srclStrn Sub Close()srclStrn!WndProcHelpers.Unsubclass( self )srclStrnEnd SubEndGInt [EndGInt ZHInsGrup \EncoInt nameStrnOpensorcGrup ]stsrInt stscInt $ndsrInt ndscInt $EncoInt srclStrn Sub Open()srclStrn$WndProcHelpers.Subclass( self, App )srclStrnEnd SubEndGInt ]EndGInt \EndGInt WCBhvGrup@ ^NameStrnSizeInt SuprStrn StaticTextbNtrInt EndGInt ^CBhvGrup@ _NameStrnSizeInt SuprStrn StaticTextbNtrInt EndGInt _CBhvGrup@ `NameStrnSizeInt SuprStrn StaticTextbNtrInt EndGInt `CtrlGrup acclsStrn StaticTextnameStrn StaticTextPDefGrup8 bnameStrnNamePValStrn StaticText2EncoInt EndGInt bPDefGrup0 cnameStrnIndexPValStrn -2147483648EndGInt cPDefGrup0 dnameStrn TabPanelIndexPValStrn0EndGInt dPDefGrup( enameStrnVisiblePValStrnTrueEndGInt ePDefGrup$ fnameStrnLeftPValStrn20EndGInt fPDefGrup$ gnameStrnTopPValStrn14EndGInt gPDefGrup( hnameStrnWidthPValStrn315EndGInt hPDefGrup( inameStrnHeightPValStrn20EndGInt iPDefGrup, jnameStrn InitialParentPValStrnEndGInt jPDefGrup$ knameStrnHelpTagPValStrnEndGInt kPDefGrup( lnameStrn BalloonHelpPValStrnEndGInt lPDefGrup0 mnameStrnDisabledBalloonHelpPValStrnEndGInt mPDefGrup0 nnameStrnAutoDeactivatePValStrnTrueEndGInt nPDefGrup( onameStrnLockLeftPValStrnTrueEndGInt oPDefGrup( pnameStrnLockTopPValStrnTrueEndGInt pPDefGrup, qnameStrn LockRightPValStrnTrueEndGInt qPDefGrup0 rnameStrn LockBottomPValStrnFalseEndGInt rPDefGrup8 snameStrnTextFontPValStrnSystemEncoInt EndGInt sPDefGrup( tnameStrnTextSizePValStrn0EndGInt tPDefGrup( unameStrnBoldPValStrnFalseEndGInt uPDefGrup, vnameStrnItalicPValStrnFalseEndGInt vPDefGrup0 wnameStrn UnderlinePValStrnFalseEndGInt wPDefGruph xnameStrnTextPValStrn;Type anywhere on the window and the text will appear below:EncoInt EndGInt xPDefGrup, ynameStrn TextAlignPValStrn0EndGInt yPDefGrup, znameStrn TextColorPValStrn0EndGInt zPDefGrup0 {nameStrn MultiLinePValStrnFalseEndGInt {PDefGrup( |nameStrnEnabledPValStrnTrueEndGInt |PDefGrup( }nameStrn DataSourcePValStrnEndGInt }PDefGrup( ~nameStrn DataFieldPValStrnEndGInt ~CBixInt EndGInt aCtrlGrup cclsStrn StaticTextnameStrn StaticTextPDefGrup8 nameStrnNamePValStrn StaticText3EncoInt EndGInt PDefGrup0 nameStrnIndexPValStrn -2147483648EndGInt PDefGrup0 nameStrn TabPanelIndexPValStrn0EndGInt PDefGrup( nameStrnVisiblePValStrnTrueEndGInt PDefGrup$ nameStrnLeftPValStrn20EndGInt PDefGrup$ nameStrnTopPValStrn46EndGInt PDefGrup( nameStrnWidthPValStrn315EndGInt PDefGrup( nameStrnHeightPValStrn115EndGInt PDefGrup, nameStrn InitialParentPValStrnEndGInt PDefGrup$ nameStrnHelpTagPValStrnEndGInt PDefGrup( nameStrn BalloonHelpPValStrnEndGInt PDefGrup0 nameStrnDisabledBalloonHelpPValStrnEndGInt PDefGrup0 nameStrnAutoDeactivatePValStrnTrueEndGInt PDefGrup( nameStrnLockLeftPValStrnTrueEndGInt PDefGrup( nameStrnLockTopPValStrnTrueEndGInt PDefGrup, nameStrn LockRightPValStrnTrueEndGInt PDefGrup, nameStrn LockBottomPValStrnTrueEndGInt PDefGrup8 nameStrnTextFontPValStrnSystemEncoInt EndGInt PDefGrup( nameStrnTextSizePValStrn0EndGInt PDefGrup( nameStrnBoldPValStrnFalseEndGInt PDefGrup, nameStrnItalicPValStrnFalseEndGInt PDefGrup0 nameStrn UnderlinePValStrnFalseEndGInt PDefGrup nameStrnTextPValStrnEndGInt PDefGrup, nameStrn TextAlignPValStrn0EndGInt PDefGrup, nameStrn TextColorPValStrn0EndGInt PDefGrup, nameStrn MultiLinePValStrnTrueEndGInt PDefGrup( nameStrnEnabledPValStrnTrueEndGInt PDefGrup( nameStrn DataSourcePValStrnEndGInt PDefGrup( nameStrn DataFieldPValStrnEndGInt CBixInt EndGInt CtrlGrup cclsStrn StaticTextnameStrn StaticTextPDefGrup8 nameStrnNamePValStrn StaticText1EncoInt EndGInt PDefGrup0 nameStrnIndexPValStrn -2147483648EndGInt PDefGrup0 nameStrn TabPanelIndexPValStrn0EndGInt PDefGrup( nameStrnVisiblePValStrnTrueEndGInt PDefGrup$ nameStrnLeftPValStrn20EndGInt PDefGrup$ nameStrnTopPValStrn173EndGInt PDefGrup( nameStrnWidthPValStrn315EndGInt PDefGrup( nameStrnHeightPValStrn107EndGInt PDefGrup, nameStrn InitialParentPValStrnEndGInt PDefGrup$ nameStrnHelpTagPValStrnEndGInt PDefGrup( nameStrn BalloonHelpPValStrnEndGInt PDefGrup0 nameStrnDisabledBalloonHelpPValStrnEndGInt PDefGrup0 nameStrnAutoDeactivatePValStrnTrueEndGInt PDefGrup( nameStrnLockLeftPValStrnTrueEndGInt PDefGrup, nameStrnLockTopPValStrnFalseEndGInt PDefGrup, nameStrn LockRightPValStrnTrueEndGInt PDefGrup, nameStrn LockBottomPValStrnTrueEndGInt PDefGrup8 nameStrnTextFontPValStrnSystemEncoInt EndGInt PDefGrup( nameStrnTextSizePValStrn0EndGInt PDefGrup( nameStrnBoldPValStrnFalseEndGInt PDefGrup, nameStrnItalicPValStrnFalseEndGInt PDefGrup0 nameStrn UnderlinePValStrnFalseEndGInt PDefGrup, nameStrnTextPValStrnTry moving or resizing the window to see us constrain the window's bounds to the upper-left of the desktop. Also, the window can grow no larger than 400x400. Selecting menu choices will also display information about the WM_COMMAND message generated.EncoInt EndGInt PDefGrup, nameStrn TextAlignPValStrn0EndGInt PDefGrup, nameStrn TextColorPValStrn0EndGInt PDefGrup, nameStrn MultiLinePValStrnTrueEndGInt PDefGrup( nameStrnEnabledPValStrnTrueEndGInt PDefGrup( nameStrn DataSourcePValStrnEndGInt PDefGrup( nameStrn DataFieldPValStrnEndGInt CBixInt EndGInt PadnPadnX****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpMnuPV OrƋNameStrnMenuBar1ContInt rEdtRectdd,MItmGrup spmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrup spmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrup spmuInt nameStrnFileMenutextStrn&FileindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrup spmuInt nameStrnFileQuittextStrnE&xitindxInt scutStrnQbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrn QuitMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrup spmuInt nameStrnEditMenutextStrn&EditindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrup spmuInt nameStrnEditUndotextStrn&UndoindxInt scutStrnZbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrntextStrn-indxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrnEditCuttextStrnCu&tindxInt scutStrnXbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrnEditCopytextStrn&CopyindxInt scutStrnCbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrn EditPastetextStrn&PasteindxInt scutStrnVbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrn EditCleartextStrnClearindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrup spmuInt nameStrnTestMenutextStrnTestindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt MItmGrup spmuInt nameStrn TestTestingtextStrnTestingindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt MItmGrup spmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt EndGInt MItmGrup spmuInt nameStrntextStrnindxInt scutStrnbhlpStrndhlpStrnstylInt EncoInt flagInt maEnInt NameStrnSizeInt LSuprStrnMenuItembNtrInt EndGInt PadnPadn************************************************************************************************************************************BlokpObjPUWODmNameStrnAppContInt rEdtRect9(!eSptInt bPGpGrupP bPElGrup4 scKyInt rEdtRect9(!eSptInt EndGInt EndGInt bClsInt NameStrnAppSizeInt 4SuprStrn ApplicationbNtrInt MethGrup, EncoInt nameStrnWndProcparmStrn_hwnd As Integer, msg As Integer, wParam As Integer, lParam As Integer, ByRef handled As BooleanrsltStrnIntegerflagInt sorcGrupd stsrInt stscInt ndsrInt ndscInt EncoInt srclStrn|Function WndProc(hwnd As Integer, msg As Integer, wParam As Integer, lParam As Integer, ByRef handled As Boolean) As IntegersrclStrnConst WM_COMMAND = &h0111srclStrnConst WM_CHAR = &h0102srclStrnConst WM_SIZING = &h0214srclStrnConst WM_MOVING = &h0216srclStrnsrclStrn+// We want to handle a few messages just tosrclStrn// show that we can handle themsrclStrnselect case msgsrclStrncase WM_COMMANDsrclStrn=// We got a command. So let's print out the information. WesrclStrn;// do NOT want to say we handled this one because otherwisesrclStrn;// REALbasic won't have the chance to fire the command off.srclStrnHandleCommand( wParam, lParam )srclStrnhandled = falsesrclStrnreturn 0srclStrnsrclStrn case WM_CHARsrclStrnSub HandleSizingOrMoving(wParam as Integer, lParam as Integer)srclStrn6// The lParam is really a pointer to a RECT that tellssrclStrn5// us the current size of the window. We can modifiysrclStrn#// this so that Windows updates it.srclStrnsrclStrn// Get the rectsrclStrn"dim lpRect as new MemoryBlock( 4 )srclStrnlpRect.Long( 0 ) = lParamsrclStrndim rect as MemoryBlocksrclStrnrect = lpRect.Ptr( 0 )srclStrnsrclStrn9// Now let's make sure the window always shows up at 0, 0srclStrnrect.Long( 0 ) = 0srclStrnrect.Long( 4 ) = 0srclStrnsrclStrn4// And make sure it never gets bigger than 400 x 400srclStrn+rect.Long( 8 ) = Min( rect.Long( 8 ), 400 )srclStrn-rect.Long( 12 ) = Min( rect.Long( 12 ), 400 )srclStrnsrclStrnEnd SubEndGInt EndGInt MnuHGrup EncoInt nameStrn TestTestingsorcGrup stsrInt stscInt ndsrInt ndscInt EncoInt srclStrnFunction Action() As BooleansrclStrnMsgBox "Testing menu fired!"srclStrn End FunctionEndGInt EndGInt IntrStrnWndProcSubclassbApOInt PDefGrup0 nameStrnMenuBarPValStrn -1102005162EndGInt PadnPadnx************************************************************************************************************************BlokpObjP]WODmNameStrnWndProcHelpersContInt rEdtRect>G!eSptInt bPGpGrupP bPElGrup4 scKyInt rEdtRect>G!eSptInt EndGInt EndGInt bClsInt NameStrnWndProcHelpersSizeInt bNtrInt PropGrup EncoInt declStrnmOldWndProc as DictionaryflagInt !sorcGrup stsrInt stscInt ndsrInt ndscInt EncoInt ntlnStrnmOldWndProc as DictionaryntlnStrnntlnStrnEndGInt EndGInt PropGrup EncoInt declStrnmSubClass as DictionaryflagInt !sorcGrup| stsrInt stscInt ndsrInt ndscInt EncoInt ntlnStrnmSubClass as DictionaryntlnStrnntlnStrnEndGInt EndGInt MethGrup EncoInt nameStrnSubclassparmStrn&wnd as Window, proc as WndProcSubclassrsltStrnflagInt sorcGrupx stsrInt stscInt ndsrInt ndscInt EncoInt srclStrn4Sub Subclass(wnd as Window, proc as WndProcSubclass)srclStrn// Do a sanity checksrclStrn&if wnd = nil or proc = nil then returnsrclStrnsrclStrn5// Now make sure we have the wnd procs and subclassessrclStrn6if mOldWndProc = nil then mOldWndProc = new DictionarysrclStrn2if mSubClass = nil then mSubClass = new DictionarysrclStrnsrclStrn8// Check to see if we've already subclassed this window.srclStrn/if mOldWndProc.HasKey( wnd.Handle ) then returnsrclStrnsrclStrnF// Now we want to set the new window procedure. This call will returnsrclStrnC// the old window procedure, so we don't need to call GetWindowLongsrclStrnnDeclare Function SetWindowLongA Lib "User32" ( hwnd as Integer, index as Integer, newValue as Ptr ) as IntegersrclStrnsrclStrnConst GWL_WNDPROC = -4srclStrnXdim oldWndProc as Integer = SetWindowLongA( wnd.Handle, GWL_WNDPROC, AddressOf WndProc )srclStrnsrclStrn:// Now save the old window procedure into our list. We'llsrclStrn&// reference it by the window's handlesrclStrn,mOldWndProc.Value( wnd.Handle ) = oldWndProcsrclStrnsrclStrn@// We'll also save off the interface to call, again, referencingsrclStrn// it by the window handlesrclStrn$mSubClass.Value( wnd.Handle ) = procsrclStrnEnd SubEndGInt EndGInt MethGrup\ EncoInt nameStrn UnsubclassparmStrn wnd as WindowrsltStrnflagInt sorcGrup stsrInt stscInt ndsrInt ndscInt EncoInt srclStrnSub Unsubclass(wnd as Window)srclStrn// Sanity checksrclStrnif wnd = nil then returnsrclStrnsrclStrn/// Check to see if we've subclassed this windowsrclStrn3if not mOldWndProc.HasKey( wnd.Handle ) then returnsrclStrnsrclStrn&// Get the old window procedure handlesrclStrn;dim oldWndProc as Integer = mOldWndProc.Value( wnd.Handle )srclStrnsrclStrnA// We want to restore the old window procedure to the window. WesrclStrn+// don't care about the return value eithersrclStrnbDeclare Sub SetWindowLongA Lib "User32" ( hwnd as Integer, index as Integer, newValue as Integer )srclStrnsrclStrnConst GWL_WNDPROC = -4srclStrn5SetWindowLongA( wnd.Handle, GWL_WNDPROC, oldWndProc )srclStrnsrclStrn0// Now remove this window from our subclass listsrclStrn mOldWndProc.Remove( wnd.Handle )srclStrnmSubClass.Remove( wnd.Handle )srclStrnEnd SubEndGInt EndGInt MethGrup EncoInt nameStrnWndProcparmStrnEhwnd as Integer, msg as Integer, wParam as Integer, lParam as IntegerrsltStrnIntegerflagInt !sorcGrup stsrInt stscInt ndsrInt ndscInt EncoInt srclStrnbFunction WndProc(hwnd as Integer, msg as Integer, wParam as Integer, lParam as Integer) As IntegersrclStrnDeclare Function DefWindowProcA Lib "User32" ( hwnd as Integer, msg as Integer, wParam as Integer, lParam as Integer ) as IntegersrclStrnsrclStrnC// Do a sanity check to see if we've subclassed this window or not.srclStrn$if not mSubclass.HasKey( hwnd ) thensrclStrnH// Something's not right here, so just call the default window proceduresrclStrn2return DefWindowProcA( hwnd, msg, wParam, lParam )srclStrnend ifsrclStrnsrclStrnD// We know that we've got a subclass, so call it's window procedure.srclStrndim handled as BooleansrclStrn9dim subclass as WndProcSubclass = mSubclass.Value( hwnd )srclStrnKdim ret as Integer = subclass.WndProc( hwnd, msg, wParam, lParam, handled )srclStrnsrclStrn;// If the user handled the function, then we want to returnsrclStrn // with the value they passed ussrclStrnif handled then return retsrclStrnsrclStrnA// Otherwise we want to pass the function along to the old windowsrclStrn // procedure so it can handle itsrclStrnDeclare Function CallWindowProcA Lib "User32" ( proc as Integer, hwnd as Integer, msg as Integer, wParam as Integer, lParam as Integer ) as IntegersrclStrnsrclStrnNreturn CallWindowProcA( mOldWndProc.Value( hwnd ), hwnd, msg, wParam, lParam )srclStrn End FunctionEndGInt EndGInt IntrStrnPadnPadn********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************BlokpObjPcWODmNameStrnWndProcSubclassContInt rEdtRect0C!eSptInt bPGpGrupP bPElGrup4 scKyInt rEdtRect0C!eSptInt EndGInt EndGInt bClsInt NameStrnWndProcSubclassSizeInt bNtrInt MethGrup EncoInt nameStrnWndProcparmStrn_hwnd as Integer, msg as Integer, wParam as Integer, lParam as Integer, ByRef handled as BooleanrsltStrnIntegerflagInt sorcGrup stsrInt stscInt ndsrInt ndscInt EncoInt srclStrn|Function WndProc(hwnd as Integer, msg as Integer, wParam as Integer, lParam as Integer, ByRef handled as Boolean) As IntegersrclStrnsrclStrn End FunctionEndGInt EndGInt IntrStrnPadnPadn************************************************************************************************************************************************************************************************************************************************************************EOF!