SetWindowCallback in einer DLL aufrufen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Die Help ist auch viel zu alt. Dei Subclassfunktionen gibt es erst nativ ab XP.
Mit der Lib aus PBOSL sollte es, zumindest, auf allen NT Versionen laufen.
http://msdn.microsoft.com/library/defau ... bclass.asp
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Code: Alles auswählen

Enumeration
  #window
EndEnumeration

;##################################################################
;#                                                                 
;#                                                                 
;#                                                                 
;##################################################################

Procedure _subclass_cb_(hWnd,uMsg,wParam,lParam,uId,uData)
  
  If uMsg = #WM_ERASEBKGND
    Debug "#WM_ERASEBKGND"
  ElseIf uMsg = #WM_PAINT
    Debug "#WM_PAINT"
  ElseIf uMsg = #WM_ACTIVATE
    Debug "#WM_ACTIVATE"
  ElseIf uMsg = #WM_SIZE
    Debug "#WM_SIZE"
  EndIf
  
  ProcedureReturn DefSubclassProc(hWnd,uMsg,wParam,lParam)
EndProcedure

;##################################################################
;#                                                                 
;#                                                                 
;#                                                                 
;##################################################################

Procedure Main()
	
  hWnd = OpenWindow(#window,#PB_Ignore,#PB_Ignore,120,70,"leer",#WS_SYSMENU|#WS_SIZEBOX)

  SetWindowSubclass(hWnd,@_subclass_cb_(),#window,0) 

  Repeat
    event = WaitWindowEvent()
    
  Until event = #PB_Event_CloseWindow
  
	
EndProcedure:Main()

DefSubclassProc ruft automatisch den alten Callback auf.
Weitere Informationen findest du in der Hilfe von PBOSL.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Vielen herzlichen Dank für deine Mühe ! ! ! ! ! ! ! !
Dein Beispiel funktioniert, aber nur so lange das Fenster im selben Progi ist.
Wenn SetWindowSubclass in der DLL aufgerufen wird ist die
PB -Ereignisschleife im aufrufenden Programm zerstört.

Oder liegt es daran, dass ich SetWindowSubclass und DefSubclassProc
über eine CallFunction aufgerufen habe ?

PB kennt kein SetWindowSubclass_ bzw. DefSubclassProc_ !
Musste die "comctl32.dll" einbinden.

Liebe Grüße

Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Oder liegt es daran, dass ich SetWindowSubclass und DefSubclassProc
über eine CallFunction aufgerufen habe ?

PB kennt kein SetWindowSubclass_ bzw. DefSubclassProc_ !
Musste die "comctl32.dll" einbinden.
Habe soeben entdeckt, dass es seit 08-Apr-2007 eine neue PBOSL Library
gibt ! Damit hat sich das eine Thema erledigt !

Entschuldigung !

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

legion hat geschrieben: Habe soeben entdeckt, dass es seit 08-Apr-2007 eine neue PBOSL Library
gibt ! Damit hat sich das eine Thema erledigt !

Entschuldigung !

Lg. Legion
ts-soft hat geschrieben:Du kannst SetWindowSubclass() aus PBOSL verwenden, für das Callback in
der DLL, bzw. den Source findeste im Tipps & Tricks Forum (Autor: Edel)
Einfach mal die Beispiele von PBOSL Examples ansehen.
Ich glaube ich spare mir in Zukunft die Antworten, wenn sie sowieso nicht
oder nur halbherzig gelesen werden :freak:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag von legion »

Ich glaube ich spare mir in Zukunft die Antworten, wenn sie sowieso nicht oder nur halbherzig gelesen werden
Ich kann deinen Unmut nicht verstehen !
Ich habe festgestellt, dass SetWindowSubclass bzw. DefSubclassProc bei mir nicht funktioniert und habe das gepostet.

Später hab ich bemerkt, dass ich eine alte Version von der PBOSL Library installiert habe und das es seit 08-Apr-2007 eine neue gibt mit der das funktioniert. Also hab ich mich für das erste "unnötige" Posting entschuldigt.

Weshalb sollte ich deswegen deine Unterstützung nur halbherzig gelesen haben? Ich glaub, du hast da was falsch verstanden.
Ich bin für jede Hilfe dankbar !

Lg. Legion
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Antworten