A soultion for the problem with the Tooltip could be to modify the Callback funtion of the StringGadget if it is inside a Mdi-Window (As the problem seems to be the Tooltip and not the Mdi-Window itself).
The window could be forced to be redrawn if a Tooltip windows was closed...
Code: Select all
Global oldCB
Procedure WinCallback(hWnd, uMsg, WParam, *LParam.NMHDR)
If uMsg = #WM_NOTIFY
If *lParam\code = #TTN_POP ; A Popup window was closed
If GetProp_(hWnd, "MDIWINDOW") <> 0 ; If StringGadget is in a MDI-Window...
RedrawWindow_(GetProp_(hWnd, "MDIWINDOW"), #Null, #Null, #RDW_INVALIDATE | #RDW_ERASE | #RDW_FRAME)
EndIf
EndIf
EndIf
ProcedureReturn CallFunctionFast(oldCB, hWnd,uMsg, WParam, *lParam)
EndProcedure
Define.i Wd, Sw, Md, Ev, Fi
Wd = OpenWindow(#PB_Any, 0, 0, 600, 400, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
If Not Wd = 0
SetWindowColor(Wd, RGB(255, 255, 255))
If CreateMenu(#PB_Any, WindowID(Wd))
OpenSubMenu("Window")
Md = MDIGadget(#PB_Any, 0, 0, 400, 300, 0, 0, #PB_MDI_AutoSize)
SetWindowLong_(GadgetID(Md), #GWL_STYLE, GetWindowLong_(GadgetID(md), #GWL_STYLE)|#WS_CLIPCHILDREN) ; <---- Added
If Not Md = 0
Sw = AddGadgetItem(Md, #PB_Any, "MDI-Test")
;Avoid Flickering inside the window
SetWindowLong_(WindowID(Sw), #GWL_STYLE, GetWindowLong_(WindowID(Sw), #GWL_STYLE)|#WS_CLIPCHILDREN) ; <---- Added
If Not Sw = 0
ResizeWindow(Sw, #PB_Ignore, #PB_Ignore, 400, 300)
SetWindowColor(Sw, RGB(255, 100, 100))
sg = StringGadget(#PB_Any, 20, 20, 100, 25, "", #PB_String_Numeric)
oldCB = SetWindowLong_(GadgetID(sg), #GWL_WNDPROC, @WinCallback()) ; <---- Added
SetProp_(GadgetID(sg), "MDIWINDOW", WindowID(Sw)) ; <---- Added
TextGadget(#PB_Any, 20, 45, 300, 25, "Please enter non-numeric values above!")
Repeat
Test = WaitWindowEvent(5000)
Select Test
Case #PB_Event_CloseWindow: Fi = 1
EndSelect
Until Fi = 1
EndIf
EndIf
EndIf
EndIf
End