Seite 2 von 4

Re: Klassennamen ändern

Verfasst: 04.08.2012 17:48
von ts-soft
Hier mal die korrigierte Version von edels Code. Seine Version funktioniert nämlich nur unter 32-Bit ohne Unicode.

Code: Alles auswählen

Import "window.lib"
   PB_Window_ProcessEvent(a,b,c,d)
 
  PB_Window_NonBlockResizeInit()
 
  PB_Window_Icon
  PB_Window_Cursor
  PB_Window_Objects 
  PB_Object_GetOrAllocateID(*Object,id) 
EndImport

Procedure NewOpenWindow(id,x,y,cx,cy,title.s,flags=#WS_VISIBLE|#WS_OVERLAPPEDWINDOW,parent=0)
  Protected wnd.wndclass
  Protected classname.s = "MY_OWN_CLASS"
  Protected *WinObj.integer
  Protected hWnd.i
  Protected rc.rect
 
 
  With wnd
    \style          = #CS_HREDRAW|#CS_VREDRAW
    \lpfnWndProc    = @PB_Window_ProcessEvent()
    \hInstance      = GetModuleHandle_(0)
    \hIcon          = PB_Window_Icon
    \hCursor        = PB_Window_Cursor
    \lpszClassName  = @classname
    \hbrBackground  = #COLOR_WINDOW
    \cbWndExtra     = 0
    \cbClsExtra     = 0
  EndWith
   
  If RegisterClass_(wnd)
   
    SetRect_(rc,0,0,cx,cy)
   
    AdjustWindowRectEx_(rc,flags,0,#WS_EX_WINDOWEDGE)
   
    If x = #PB_Ignore Or y = #PB_Ignore
      x = #CW_USEDEFAULT
      y = #CW_USEDEFAULT
    EndIf   
       
    PB_Window_NonBlockResizeInit()
   
    hWnd = CreateWindowEx_(#WS_EX_WINDOWEDGE,classname,title,flags,x,y,rc\right-rc\left,rc\bottom-rc\top,parent,0,GetModuleHandle_(0),0)
   
    If hWnd
      *WinObj   = PB_Object_GetOrAllocateID(PB_Window_Objects,id)
      *WinObj\i = hWnd 

      If id = #PB_Any
        SetProp_(hWnd,"Pb_WindowID",*WinObj+1)
      Else
        SetProp_(hWnd,"Pb_WindowID",id+1)
      EndIf
     
      UseGadgetList(hWnd)
     
    Else
      UnregisterClass_(GetModuleHandle_(0),classname)
    EndIf
   
  EndIf

  If id = #PB_Any
    id = *WinObj
  Else
    id = hWnd
  EndIf
 
  ProcedureReturn id
EndProcedure

Procedure Main()
 
  NewOpenWindow(0,#PB_Ignore,#PB_Ignore,200,200,"333") 
 
  ResizeWindow(0, #PB_Ignore, #PB_Ignore, 500, 500)
 
  ButtonGadget(0, 10, 10, 100, 30, "sdfsfd")
 
  Repeat
     event = WaitWindowEvent()
 
  Until event = #PB_Event_CloseWindow
 
EndProcedure:Main()

Re: Klassennamen ändern

Verfasst: 07.08.2012 23:48
von Frabbing
Eine bessere Methode zur Kennzeichnung von Fenstern ist SetWindowLongPtr/GetWindowLongPtr, indem du dort den Wert in GWLP_USERDATA setzt/ausliest. Ist nämlich genau dafür gedacht. :D

GELÖSCHT

Verfasst: 08.08.2012 07:27
von mirca
GELÖSCHT

Re: Klassennamen ändern

Verfasst: 08.08.2012 07:34
von ts-soft
Warum willst Du den FindWindow nutzen, wo das von MS nicht empfohlen wird und sehr unzuverlässig ist?

EnumWindows usw. sollte der bessere Weg sein :wink:

Re: Klassennamen ändern

Verfasst: 09.08.2012 10:55
von Frabbing
Richtig. Praktischerweise kannst du dort als zweiten Parameter deine gesuchte Kennzeichnung gleich mit an den Callback angeben: An application-defined value to be passed to the callback function. :D

Re: Klassennamen ändern

Verfasst: 09.08.2012 17:55
von edel
Meint ihr die Fenster von einem fremden Programm, oder soll es das eigene sein?

Fuer fremde Fenster wuerde ich auf GWLP_USERDATA verzichten, das Programm kann das Feld selber
benutzen. Wenn es das Eigene ist, kann man die Infos auch einfach in eine Variable speichern.
Afaik nutzt PB selber irgendwo GWLP_USERDATA.

Re: Klassennamen ändern

Verfasst: 23.11.2012 12:32
von Lambda
Ist es nun dort zu ändern: GWLP_USERDATA?

Ich möchte eigene Gadgets selbst benennen, abgesehen davon dass es mir unprofessionell erscheint, wenn dort "PB_" steht, soll es auch eine sinnvolle Benennung bekommen. Nicht nur Canvas, manche Gadgets setzen sich aus mehreren verschiedenen zusammen.

Re: Klassennamen ändern

Verfasst: 23.11.2012 15:43
von mk-soft
@ts-soft

PB_Window_NonBlockResizeInit() gibt es nicht mehr unter PB v5.00

Kann man mal gebrauchen

FF :wink:

Re: Klassennamen ändern

Verfasst: 26.11.2012 19:27
von edel
cOoki3druqs hat geschrieben:Ist es nun dort zu ändern: GWLP_USERDATA?

Ich möchte eigene Gadgets selbst benennen, abgesehen davon dass es mir unprofessionell erscheint, wenn dort "PB_" steht, soll es auch eine sinnvolle Benennung bekommen. Nicht nur Canvas, manche Gadgets setzen sich aus mehreren verschiedenen zusammen.
Erstelle dir doch echte Fenster/Gadget. Dann eruebrigt sich auch letzteres.

Re: Klassennamen ändern

Verfasst: 06.03.2013 18:46
von Lambda
Hatte Fred angeschrieben und er meinte es wäre möglich die Bezeichnungen in den Libraries zu ändern. Die Frage wäre natürlich erstmal wie. :D Beim durchforsten stoße ich zwar auf die Begriffe wie "Pure_Canvas" nur leider ändert sich nichts nachdem alle Vorkommnisse geändert wurden. Ist es damit nicht getan?

Finde es sollte nativ möglich sein! Das Canvas ist praktisch ein Rohling für neue Steuerelemente, welche dann auch eine logische Bezeichnung bekommen sollte.

Ein Laufzeit-Gepfusche ist natürlich keine Lösung da es für jedes System kompilierbar sein sollte.