Seite 1 von 1

ParentWindow nicht den Fokus klauen

Verfasst: 05.05.2012 20:09
von Lambda
Ich möchte ein Fenster in ein fremdes einsetzen ohne dem Parent den Fokus zu klauen sobald ein Gadget darauf aktiv ist. Kann man Parten und Child Fokus technisch gleichberechtig machen?

Re: ParentWindow nicht den Fokus klauen

Verfasst: 05.05.2012 20:24
von RSBasic
Und wenn du nach dem SetParent den Fokus erneut setzt und zwar auf das Fenster, welches den Fokus weiterhin besitzen soll?
Oder meinst du das Problem, wenn man auf das neue Unterfenster, welches setparent wurde, klickt, dass das Hauptfenster den Fokus verliert?
Also:

Code: Alles auswählen

EnableExplicit

Define EventID

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  If OpenWindow(1001,100,100,300,200,"Window",#PB_Window_BorderLess|#PB_Window_Invisible)
    TextGadget(1,10,10,100,20,"Text",0)
    
    SetWindowColor(1001,RGB(100,100,100))
    SetParent_(WindowID(1001),WindowID(0))
    HideWindow(1001,0)
   
  EndIf
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Meinst du dieses Problem?
Wenn ja, könntest ja so machen, damit der Fokus des Hauptfensters erhalten bleibt:

Code: Alles auswählen

EnableExplicit

Define EventID
Define oldStyle

If OpenWindow(0,0,0,500,400,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
 
  If OpenWindow(1001,100,100,300,200,"Window",#PB_Window_BorderLess|#PB_Window_Invisible)
    TextGadget(1,10,10,100,20,"Text",0)
    
    SetWindowColor(1001,RGB(100,100,100))
    SetParent_(WindowID(1001),WindowID(0))
    HideWindow(1001,0)
    
    oldStyle=GetWindowLongPtr_(WindowID(1001),#GWL_STYLE)
    SetWindowLongPtr_(WindowID(1001),#GWL_STYLE,oldStyle|#WS_CHILD &(~#WS_POPUP))
    SetWindowPos_(WindowID(1001), 0,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE|#SWP_NOZORDER|#SWP_FRAMECHANGED)
    SetActiveWindow(0)
   
  EndIf
 
  Repeat
    EventID=WaitWindowEvent()
    If EventID = #PB_Event_CloseWindow
      End
    EndIf
  ForEver
EndIf
Falls du das nicht meintest, dann bitte erneute Problembeschreibung. ;)

Re: ParentWindow nicht den Fokus klauen

Verfasst: 05.05.2012 20:57
von Lambda
Zweiteres! Danke :allright:

wobei, gehört dadurch das einzusetzende Fenster jetzt dem fremden Fenster? Die Event Verarbeitung läuft nehmlich in einem Thread einer DLL. (wobei eigentlich ja nur der Style geändert wird, sehe kein WND_PROC)

:lurk:

Re: ParentWindow nicht den Fokus klauen

Verfasst: 06.05.2012 02:47
von Lambda
Habe folgende Lösung. Zur gegebener Zeit #WM_NCATIVATE an das Fenster dessen TitleBar gezeichnet werden soll senden. wParam 1 für aktiv 0 für inaktiv. lParam bei geskinten Fenstern.

Code: Alles auswählen

SendMessage_ (hwnd, #WM_NCACTIVATE ,1,-1)