Deutsch
Wünsche und Anregungen

Wunsch: Unterstützung von CUSTOMDRAW-Controls

 

Uwe
''Pascal''
Niemeier
Hi Leute, hallo Roland!

Hier noch eine Sache, die mir aus aktuellem Anlaß am Herzen liegt:
Es geht darum, daß Profans SubClassing nur begrenzt zur Verwendung von CUSTOMDRAW-Controls taugt.
(Roland hatte ja selbst schon darauf hingewiesen).
Hier nochmal der Vergleich ProcAddr/SubClass:
KompilierenMarkierenSeparieren
window 500,500
 $H Messages.ph
 $H Windows.ph
 $H commctrl.ph
declare LvDraw#
struct LvDraw= HwndFrom&,idFrom&,Code&,DrawStage&,Hdc&,Rect#(16),ItemSpec&,ItemState&,ItemLparam&,Text&,Textbk&,SubItem&
dim LvDraw#,LvDraw

proc ColorProc'--------------------------------------------------------

    parameters wnd&,msg&,wparam&,lparam&

    if msg&=~WM_NOTIFY

        LvDraw#=lparam&

        if (LvDraw#.Hwndfrom&=Lv&)*(LvDraw#.Code&=~NM_CUSTOMDRAW)

            case LvDraw#.DrawStage&=~CDDS_PREPAINT:    return ~CDRF_NOTIFYITEMDRAW
            case LvDraw#.DrawStage&=~CDDS_ITEMPREPAINT:return ~CDRF_NOTIFYSUBITEMDRAW

            if LvDraw#.DrawStage&=~CDDS_SUBITEM | ~CDDS_ITEMPREPAINT

                case LvDraw#.SubItem&=0:LvDraw#.Textbk&=rgb(255,200,200)
                case LvDraw#.SubItem&=1:LvDraw#.Textbk&=rgb(200,255,200)
                case LvDraw#.SubItem&=2:LvDraw#.Textbk&=rgb(200,200,255)

            endif

        endif

    endif

    return ~CallWindowProc(&WinProc,wnd&,msg&,wparam&,lparam&)

endproc'-------------------------------------------------------------

var Lv&=create("gridbox",%hwnd,"Spalte 0;0;100;Spalte 1;0;100;Spalte 2;0;100",0,20,20,400,300)

whileloop 0,50

    addstring(Lv&,"Test|Test|Test")

endwhile

set("FastMode",1)
~SetWindowLong(%hwnd,~GWL_WNDPROC,procaddr(ColorProc,4))
repaint

while 1

    waitinput

endwhile


KompilierenMarkierenSeparieren
window 500,500
 $H Messages.ph
 $H Windows.ph
 $H commctrl.ph
declare LvDraw#
struct LvDraw= HwndFrom&,idFrom&,Code&,DrawStage&,Hdc&,Rect#(16),ItemSpec&,ItemState&,ItemLparam&,Text&,Textbk&,SubItem&
dim LvDraw#,LvDraw

subclassproc'--------------------------------------------------------

    if subclassmessage(%hwnd,~WM_NOTIFY)

        LvDraw#=&slparam

        if (LvDraw#.Hwndfrom&=Lv&)*(LvDraw#.Code&=~NM_CUSTOMDRAW)

            set("winproc",0)
            case LvDraw#.DrawStage&=~CDDS_PREPAINT:    return ~CDRF_NOTIFYITEMDRAW
            case LvDraw#.DrawStage&=~CDDS_ITEMPREPAINT:return ~CDRF_NOTIFYSUBITEMDRAW

            if LvDraw#.DrawStage&=~CDDS_SUBITEM | ~CDDS_ITEMPREPAINT

                case LvDraw#.SubItem&=0:LvDraw#.Textbk&=rgb(255,200,200)
                case LvDraw#.SubItem&=1:LvDraw#.Textbk&=rgb(200,255,200)
                case LvDraw#.SubItem&=2:LvDraw#.Textbk&=rgb(200,200,255)

            endif

        endif

    endif

endproc'-------------------------------------------------------------

var Lv&=create("gridbox",%hwnd,"Spalte 0;0;100;Spalte 1;0;100;Spalte 2;0;100",0,20,20,400,300)

whileloop 0,50

    addstring(Lv&,"Test|Test|Test")

endwhile

subclass %hwnd,1

while 1

    waitinput

endwhile


Auffällig ist dabei, daß bei Version 2 das ListView farbig wird, wenn das Hauptfenster von Außen zum Neuzeichnen gezwungen wird.
Jeder Versuch, diesen Effekt im Programm selbst zu erzeugen, schlug fehl.
Nun frage ich mich, ob man den Befehl RePaint  vielleicht derart modifizieren könnte, daß dadurch die SubClassProc aufgerufen wird?
Möglicherweise über einen neuen Modus-Parameter?

BTW: Ich habe auch versucht, die SubClassProc zur Initialisierung des Controls als "normale" Windowprozedur einzusetzen (per &ScProc) , aber da gibt es neben dem spezifischen EndProc/Return-Verhalten wohl noch andere Unterschiede.

Oder gibt's noch andere Möglchkeiten?

SeeYou
Pascal
 
15.12.2010  
 



Hallo Uwe,

da die XProfan-Technik begrenzt ist hatte ich für solche Sachen die nProcs erfunden - damit funktioniert sowas alles fehlerfrei. Wers also "braucht" hat eine profane Möglichkeit und muss nicht z.B. auf Fremdsprachen zurückgreifen. So funktioniert auch die canvas-Include ( [...]  ) .

Was Roland machen könnte wäre eine sicheres ProcAddr für WNDPRocs - hierfür müsste er den Ablauf des XProfan-Programmes in einen vom UI-Thread unabhängigen eigenen Thread umlegen und der eigene Thread könnte dann vom UI-Thread "bemeldet" werden.

Ich weiß schon genau wie das funktionieren würde und wie man das programmieren müsste - wird aber ein kleiner Akt und Roland hat vlt. keine Zeit.
 
15.12.2010  
 




RGH
Hallo,
um an der Version X2 etwas zu drehen, ist es definitiv zu spät, denn sonst wird sie nie fertig.

Aber an anderer Stelle habe ich ja schon in Aussicht gestellt, dass es in absehbarer Zeit eine Verson .1 geben könnte (natürlich dann zum kostenlosen Dowenload für alle X2-Besitzer). Da könnte ich mich dann auch dieses Themas annehmen.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
16.12.2010  
 




Uwe
''Pascal''
Niemeier
Hi Leute!

@ Roland:


um an der Version X2 etwas zu drehen, ist es definitiv zu spät, denn sonst wird sie nie fertig.


Schon klar! Hauptsache, du schaust dann zu gegebener Zeit wieder hier vorbei

@iF:
Warum mußt du meine Vorschläge immer so verdrehen?
Ich wäre schon mit einem erweiterten RePaint zufrieden.
Oder mit einer Möglichkeit - wie schon mehrfach vorgeschlagen - die SubClassProc bei Bedarf als reguläre WindowProc einzusetzten, die unabhängig von Wartebefehlen arbeitet. Und wenn's auch auf eigene Gefahr ist

Wobei ich ja sowieso der Meinung bin, eine "fest verdrahtete" Proc wäre nicht das Gelbe vom Ei

SeeYou
Pascal
 
16.12.2010  
 



Sorry, wollte nichts verdrehen - war mir des Verdrehens nicht bewusst. ^^
 
16.12.2010  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

4.039 Betrachtungen

Unbenanntvor 0 min.
Rolf-Günther Kuhn19.12.2021
Sven Bader11.07.2021
Ernst30.04.2016
GDL02.09.2015
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Uwe ''Pascal'' Niemeier (2x)
iF (2x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie