Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 Subclassing: Messages verschluckt?
Autor: Jens-Arne Reumschüssel (---.dip0.t-ipconnect.de)
Datum:   30.12.18 16:44

Hallo,

warum wird in der Subclassproc nach settext für ein Textfeld keine ~WM_CTLCOLORSTATIC-Message an das Hauptfenster empfangen?

Mit Callback (also direktem Umbiegen der Hauptfensterprozedur) geht es.

Danke und guten Rutsch, Jens-Arne

Beispielcode:
 declare hT%,s$,hBrush%,OldWndProc&
 
 SUBCLASSPROC
   declare ret&
   ret&=0
   if &sWnd=%HWnd
     if %sMessage=312 '312=~WM_CTLCOLORSTATIC
       print "...WM_CTLCOLORSTATIC aufgetreten"
       if &sLParam=hT%
         @external("gdi32.dll","SetBkMode",&sWParam,1) '1=~TRANSPARENT
         @external("gdi32.dll","SetTextColor",&sWParam,@rgb(255,0,0))
         ret&=hBrush%
         @set("winproc",0)
       endif
     endif
   endif
   return ret&
 ENDPROC
 
 PROC CallBackProc
   parameters hWnd&,Message&,wParam&,lParam&
   if Message&=312 '312=~WM_CTLCOLORSTATIC
     print "...WM_CTLCOLORSTATIC aufgetreten"
     if lParam&=hT%
       @external("gdi32.dll","SetBkMode",wParam&,1) '1=~TRANSPARENT
       @external("gdi32.dll","SetTextColor",wParam&,@rgb(255,0,0))
       return hBrush%
     endif
   else
     return @external("user32.dll","CallWindowProcA",OldWndProc&,hWnd&,Message&,wParam&,lParam&)
   endif
 ENDPROC
 
 cls
 set("fastmode",1)
 hBrush%=@external("gdi32.dll","CreateSolidBrush",@rgb(0,255,0))
 
 locate 5,1
 print "mit Subclassing (Taste drücken)..."
 subclass %HWnd,1
 waitinput
 hT%:=@create("TEXT",%HWnd,"Test",10,10,300,20)
 waitinput
 settext hT%,"settext mit Subclassing"
 waitinput
 subclass %HWnd,0
 
 print
 print "mit Callback (Taste drücken)..."
 OldWndProc&=@external("user32.dll","GetWindowLongA",%hWnd,-4) '-4=~GWL_WNDPROC
 @external("user32.dll","SetWindowLongA",%hWnd,-4,@procaddr("CallBackProc",4)) '-4=~GWL_WNDPROC
 waitinput
 settext hT%,"settext mit Callback"
 waitinput
 @external("user32.dll","SetWindowLongA",%hWnd,-4,OldWndProc&)
 
 deleteobject hBrush%
 set("fastmode",0)
 print
 print "Programmende (Taste drücken)..."
 waitinput
 end
 




Nachricht bearbeitet (30.12.18 17:23)

 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 Subclassing: Messages verschluckt?  Neu
Jens-Arne Reumschüssel 30.12.18 16:44 
 Re: Subclassing: Messages verschluckt?  Neu
Karl-Jürgen Hilger 03.01.19 14:24 
 Re: Subclassing: Messages verschluckt?  Neu
Heinz Brill 03.01.19 18:00 
 Re: Subclassing: Messages verschluckt?  Neu
Karl-Jürgen Hilger 03.01.19 20:00 
 Re: Subclassing: Messages verschluckt?  Neu
Heinz Brill 03.01.19 21:11 
 Re: Subclassing: Messages verschluckt?  Neu
Karl-Jürgen Hilger 03.01.19 22:40 
 Re: Subclassing: Messages verschluckt?  Neu
Heinz Brill 04.01.19 07:24 
 Re: Subclassing: Messages verschluckt?  Neu
Karl-Jürgen Hilger 04.01.19 09:12 
 Re: Subclassing: Messages verschluckt?  Neu
Jens-Arne Reumschüssel 04.01.19 23:59 
 Re: Subclassing: Messages verschluckt?  Neu
Karl-Jürgen Hilger 05.01.19 12:31 
 Re: Subclassing: Messages verschluckt?  Neu
Heinz Brill 05.01.19 07:20 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org