Français
Forum

GridBox & CUSTOMDRAW per SubClassing

 

Uwe
''Pascal''
Niemeier
Hi gens!

Irgendwie hab je im Moment un Brett vorm tête...

je voudrais mon CUSTOMDRAW-Routine pour ListViews sur XProfan11-SubClassing ajuster, viens mais avec cela pas bien sûr...
Anscheinend werdne qui Werte pour LvDraw#.DrawStage& pas richtig gesetzt.

ici qui Code pour qui ProcAddr-variante (Minimal-Demo):
KompilierenMarqueSéparation
window 10,10-200,200
 $H Messages.ph
 $H Windows.ph
 $H Commctrl.ph

proc HdlgLvColorProc----------------------------HdlgLvColorProc-------------------------

    parameters wnd&,msg&,wparam&,lparam&
    case msg&<>~WM_NOTIFY:return ~CallWindowProc(HdlgProc&,wnd&,msg&,wparam&,lparam&)
    LvDraw#=Lparam&
    case LvDraw#.Hwndfrom& <> Lv&:return ~DefWindowProc(wnd&,msg&,wparam&,lparam&)
    case LvDraw#.Code&<>~NM_CUSTOMDRAW:return ~DefWindowProc(wnd&,msg&,wparam&,lparam&)
    case LvDraw#.DrawStage& = ~CDDS_PREPAINT :return ~CDRF_NOTIFYITEMDRAW
    case LvDraw#.DrawStage& = ~CDDS_ITEMPREPAINT:return ~CDRF_NOTIFYSUBITEMDRAW

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

        LvDraw#.Textbk&=rgb(25,255,255)

    endif

    return ~CDRF_DODEFAULT
    endproc---------------------------------------------------------------------------------
    var Lv&=create(gridbox,%hwnd,Test,0,10,10,150,100)
    addstring(Lv&,Test)
    declare LvDraw#
    struct LvDraw= HwndFrom&,idFrom&,Code&,DrawStage&,Hdc&,Rect#(16),ItemSpec&,ItemState&,ItemLparam&,Text&,Textbk&,SubItem&
    dim LvDraw#,LvDraw
    Set(FastMode,1)
    var HdlgProc&=~SetWindowLong(%hwnd,~GWL_WNDPROC,procaddr(HdlgLvColorProc,4) )
    ~RedrawWindow(Lv&,0,0,$485)

    while 1

        waitinput

    endwhile


Allerdings allez aus qui Aider pas bien sûr hervor, quoi passiert, si le SubClassProc per Retour sortir de wird, òu qui dabei angegebenen Werte übertragen volonté et quelle rôle Set(WinProc,X)
dans dem le cas écoutes


Hoffe sur Aider
Pascal
 
01.03.2009  
 



Unterthema: Listview-Customdraw avec Subclassing: So geht's  [...]  erzeugt.
 
22.05.2018  
 




Jens-Arne
Reumschüssel
ici qui Solution:
'Gridbox(=ListView)-CustomDraw-Beispiel
 $H windows.ph
 $H messages.ph
 $H commctrl.ph
STRUCT NMHDR=hwndFrom&,idFrom&,code&
STRUCT NMCUSTOMDRAW=NMHDR,dwDrawStage&,hdc&,rcLeft&,rcTop&,rcRight&,rcBottom&,dwItemSpec&,uItemState&,lItemlParam&
STRUCT NMLVCUSTOMDRAW=NMCUSTOMDRAW,clrText&,clrTextBk&,iSubItem&,dwItemType&,clrFace&,iIconEffect&,iIconPhase&,iPartId&,iStateId&,rcTextLeft&,rcTextTop&,rcTextRight&,rcTextBottom&,uAlign&
declare _hGB%,_hBende%,_ende%

SUBCLASSPROC

    declare b#,lParam&,ret&

    si &sWnd=%HWnd

        si %sMessage=~WM_NOTIFY

            lParam&=&sLParam
            dim b#,NMLVCUSTOMDRAW
            b#=lParam&

            si (b#.hwndFrom&=_hGB%) and (b#.code&=~NM_CUSTOMDRAW)

                si b#.dwDrawStage&=~CDDS_PREPAINT'juste wird cela Listview récente gezeichnet

                    ret&=~CDRF_NOTIFYITEMDRAW'Folgemessages anfordern

                elseif b#.dwDrawStage&=~CDDS_ITEMPREPAINT'juste wird un Item gezeichnet

                    'b#.clrText&=$0000FFFF '@rgb(255,255,0) 'Textfarbe qui cellule changement
                    'b#.clrTextBk&=$00FFFF00 '@rgb(0,255,255) 'Hintergrundfarbe qui cellule changement
                    'ret&=~CDRF_NEWFONT 'ginge aussi, ensuite sommes alle Zeilen juste teinté, qui prochain elseif-paragraphe wäre ensuite unnötig
                    ret&=~CDRF_NOTIFYSUBITEMDRAW'Folgemessages avant dem Zeichnen chaque individuel Subitems anfordern

                elseif (b#.dwDrawStage& & (~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM))=(~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM)'juste wird un Subitem gezeichnet

                    'b#.dwItemSpec&=Zeile
                    'b#.iSubItem&=Spalte
                    b#.clrText&=@rgb(255,255,b#.dwItemSpec&*13+b#.iSubItem&*30)'Textfarbe qui cellule changement
                    b#.clrTextBk&=@rgb(0,200,b#.dwItemSpec&*13+b#.iSubItem&*30)'Hintergrundfarbe qui cellule changement
                    ret&=~CDRF_NEWFONT

                endif

            endif

            dispose b#

            si ret&<>0

                @set("WINPROC",0)'muss son, sonst allez's pas
                return ret&'CustomDraw-spezifischen Wert zurückgeben

            endif

        endif

    endif

ENDPROC'SUBCLASSPROC

'***** Hauptprogramm
cls
_hGB%=@create("GRIDBOX",%HWnd,"Spalte 1;0;100;Spalte 2;0;100;Spalte 3;0;100;Spalte 4;0;100;Spalte 5;0;100;Spalte 6;0;100",0,0,0,@width(%HWnd),(@height(%HWnd)-40))
_hBende%=@create("BUTTON",%HWnd,"Ende",((@width(%HWnd)\2)-35),(@height(%HWnd)-30),70,20)
@set("FASTMODE",1)'sonst allez's malheureusement pas
subclass %HWnd,1'pas qui GridBox subclassen, mais cela Hauptfenster (dahin aller qui WM_NOTIFY-Messages)
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
@addstring(_hGB%,"Test|TestTest|TestTestTest|Test|TestTest|TestTestTest")
_ende%=0

whilenot _ende%

    waitinput

    si @clicked(_hBende%)

        _ende%=1

    endif

endwhile

subclass %HWnd,0
@set("FASTMODE",0)
end

attention: si on viele Objekte subclasst et qui Gridbox très grand ist, sollte cela am Anfang qui Subclassproc stehen, weil sonst cela Updaten qui Gridbox erheblich différé volonté peux - insbesondere, si on chaque Element chacun la ligne farblich verändern voudrais, et pas seulement chacun la ligne pour sich unique.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
23.05.2018  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

4.639 Views

Untitledvor 0 min.
Matzbub01.11.2024
Normann Strübli29.01.2023
RudiB.30.08.2022
Stringray05.01.2022
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie