Español
Foro

GridBox & CUSTOMDRAW por SubClassing

 

Uwe
''Pascal''
Niemeier
Hi Personas!

Irgendwie tener Yo en el Moment una Brett vorm Kopf...

Yo möchte mi CUSTOMDRAW-Rutina para ListViews en XProfan11-SubClassing ajustar, komme aber así no está claro...
Anscheinend werdne el Werte para LvDraw#.DrawStage& no correcto gesetzt.

Hier el Code para el ProcAddr-Variante (Minimal-Demo):
KompilierenMarcaSeparación
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


Aunque va de el Ayuda no está claro hervor, qué passiert, si la SubClassProc por Volver verlassen se, wohin mientras que el angegebenen Werte übertragen y ser welche Papel Conjunto(WinProc,X)
en el Fall juega


Hoffe en Ayuda
Pascal
 
01.03.2009  
 



Unterthema: Listview-Customdraw con Subclassing: So geht's  [...]  producido.
 
22.05.2018  
 




Jens-Arne
Reumschüssel
Hier el Solución:
'Gridbox(=ListView)-CustomDraw-Ejemplo
 $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&
declarar _hGB%,_hBende%,_ende%

SUBCLASSPROC

    declarar b#,lParam&,ret&

    if &sWnd=%HWnd

        if %sMessage=~WM_NOTIFY

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

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

                if b#.dwDrawStage&=~CDDS_PREPAINT'igual se el Listview redibujar

                    ret&=~CDRF_NOTIFYITEMDRAW'Folgemessages anfordern

                elseif b#.dwDrawStage&=~CDDS_ITEMPREPAINT'igual se una Item suscrito

                    'b#.clrText&=$0000FFFF '@rgb(255,255,0) 'Textfarbe el Zelle ändern
                    'b#.clrTextBk&=$00FFFF00 '@rgb(0,255,255) 'Color de fondo el Zelle ändern
                    'ret&=~CDRF_NEWFONT 'ginge auch, entonces son todos Zeilen igual gefärbt, el nächste elseif-Abschnitt wäre entonces unnötig
                    ret&=~CDRF_NOTIFYSUBITEMDRAW'Folgemessages antes el Dibujar cada individual Subitems anfordern

                elseif (b#.dwDrawStage& & (~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM))=(~CDDS_ITEMPREPAINT | ~CDDS_SUBITEM)'igual se una Subitem suscrito

                    'b#.dwItemSpec&=Zeile
                    'b#.iSubItem&=Spalte
                    b#.clrText&=@rgb(255,255,b#.dwItemSpec&*13+b#.iSubItem&*30)'Textfarbe el Zelle ändern
                    b#.clrTextBk&=@rgb(0,200,b#.dwItemSpec&*13+b#.iSubItem&*30)'Color de fondo el Zelle ändern
                    ret&=~CDRF_NEWFONT

                endif

            endif

            disponer b#

            if ret&<>0

                @set("WINPROC",0)'muss ser, sonst va's no
                volver ret&'CustomDraw-spezifischen Valor 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 va's por desgracia, no
subclass %HWnd,1'no el GridBox subclassen, pero la ventana principal (dahin ir el 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

    if @clicked(_hBende%)

        _ende%=1

    endif

endwhile

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

Achtung: Wenn uno viele Objetos subclasst y el Gridbox muy groß es, debería el al Anfang el Subclassproc posición, porque sonst el Updaten el Gridbox erheblich verzögert voluntad kann - insbesondere, si uno cada Element cada Línea farblich verändern möchte, y no sólo jede Línea para se einheitlich.
 
XProfan X4 * Prf2Cpp * XPSE * JRPC3 * Win11 Pro 64bit * PC i7-7700K@4,2GHz, 32 GB RAM
PM: jreumsc@web.de
23.05.2018  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

4.549 Views

Untitledvor 0 min.
Matzbub vor 24 Tagen
Normann Strübli29.01.2023
RudiB.30.08.2022
Stringray05.01.2022
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie