c ++ - wxWidgets, wxListCtrl: Sådan forhindres automatisk størrelse af kolonne, når db-klik på divider

Indlæg af Hanne Mølgaard Plasc

Problem



[[Udarbejdet i slutningen]]


Jeg bliver altid fast på det samme problem, mens du skriver gui-programmer med wxWidgets.


Når du dobbeltklikker på dividereren i en wxListCtrl med rapporttype mellem kolonnerne, ændres kolonnen til venstre til den 'optimale' bredde.
Selvfølgelig er det i mange tilfælde en dejlig funktion, men jeg vil gerne kunne slå det af i nogle tilfælde.


Jeg kigger konstant gennem fejlrapporterne og informationsbloggerne fra wxWidgets-samfundet, og det er et spørgsmål, som ikke mange har spurgt allerede, så vidt jeg kan se.


Det eneste, jeg en gang fandt (kan ikke huske og finde linket længere) var et svar på en fejlrapport om, at klassen wxHeaderctrl faktisk ejer en begivenhed, der hedder EVT\_HEADER\_DCLICK(id, func).


Derefter kiggede jeg gennem dokumentationen og prøverne og der blev også nævnt, at wxHeaderCtrl på en eller anden måde blev brugt til listetrister og andre lister. Men jeg kan bare ikke finde nogen forbindelse mellem disse klasser og Jeg kunne stadig ikke finde en måde at forhindre autosizing af kolonnen ved dobbeltklik på dividereren ved at spille rundt med 'custom made classes' -tilgange.


Er der faktisk en måde at gøre dette på en 'wxWidgets' måde, eller skal jeg skifte til et andet værktøjssæt (eller ramme)?


Tak for din anbefaling på forhånd.


Flere oplysninger:



  • Platform: Windows 10

  • Sprog: C ++

  • Kompilator: mingw64 v7.3.0

  • Værktøjskasse: wxWidgets v3.0.4



Billede: før db-klik


Indtast billedbeskrivelse her [6]


Billede: efter db-klik


Indtast billedbeskrivelse her [7]


EDIT (29.04.2018 16:42 | MESZ)


Jeg fandt faktisk noget efter at have tænkt på VZs svar i andre underklasser, som bruger en adskilt model til at se tilgang (som jeg var vant til fra andre sprog eller værktøjer)


Jeg bruger nu en wxDataViewCtrl som en visning og en wxDataViewListStore som model.
I kontrolklassen kan jeg indstille specifikke flag for hver kolonne, der omfatter spørgsmålet om resizing og andre begivenheder.


Tak for at stimulere mine tanker :)

Bedste reference


Ændring af kolonnen ved dobbeltklik er den oprindelige opførsel af MSW-liste kontrol, og jeg tror ikke det er nemt at forhindre det i at ske for størrelser, der kan ændres, ved hjælp af wx API i øjeblikket.


Selvfølgelig, hvis varen ikke kan ændres i første omgang, så er der ikke noget problem. Men hvis du vil tillade brugeren at ændre størrelsen på det, men ikke at gøre det automatisk med dobbelt klik, skal du skrive din kode på en ganske unaturlig måde og håndtere wxEVT\_LIST\_COL\_DRAGGING hændelser, der sker efter [[wxEVT\_LIST\_COL\_END\_DRAG, da disse kunstige begivenheder kun genereres, når de dobbeltklikkes, og ikke når de trækker normalt, og derefter ændres kraftigt søjlen tilbage til dens oprindelige bredde. IMO det er for grimt og ikke det værd, men du bør kunne få det til at fungere, hvis du virkelig vil.