Foro | | | | 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ónwindow 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 |
| | | | |
| | Unterthema: Listview-Customdraw con Subclassing: So geht's [...] producido. |
| | | | |
| | 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 ▲ |
| |
|
RespuestaThemeninformationenDieses Thema ha 2 subscriber: |