ParentWindow nicht den Fokus klauen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

ParentWindow nicht den Fokus klauen

Beitrag 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?
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: ParentWindow nicht den Fokus klauen

Beitrag 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. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: ParentWindow nicht den Fokus klauen

Beitrag 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:
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: ParentWindow nicht den Fokus klauen

Beitrag 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)
Antworten