ListControl und selektierte Werte

Petrow

Grünschnabel
Hallo,

Wie ist es möglich, dass ich Werte, die ein Benutzer aus einer Liste auswählt, auch wenn der Fokus wechselt markiert bleiben ? Zum Beispiel bei einem Klick auf einen Button müssten sie dann anstelle blau, grau markiert zu sehen sein, wie geht dies, dürfte eigentlich nur ein Flag sein, oder ?


mfg
Petrow
 
Ja, du kannst im Ressourceneditor (da, wo du die ListControl reinsetzt), im Eigenschaftenfenster "Auswahl immer anzeigen" als Stil angeben. Ist ganz gut zwischen vielen anderen Checkboxen versteckt.
 
Ok, das habe ich auch rausbekommen :)

Aber wie bekomme ich ein sogenannten "FullRowSelect" hin, wenn ich ein ListView (CListCtrl) benutze, also dass er die ganze Zeile markiert und nicht nur den vordersten Eintrag?
Geht das überhaupt?


mfG

MAN
 
Das musst du im Code machen, mit ModifyStyle() oder ModifyStyleEx(). Kann auch sein, dass es direkt beim Create geht.

Habe mal nachgesehen - es ist ein Extended Listview Style. Sollte also mit ModifyStyleEx() gehen. Der Style heisst LVS_EX_FULLROWSELECT.
 
Zuletzt bearbeitet:
Okay.... aber mit welchen Flags denn? Hab in der MSDN nachgeguckt, da gibts aber nur:

SWP_NOSIZE Retains the current size.
SWP_NOMOVE Retains the current position.
SWP_NOZORDER Retains the current Z order.
SWP_NOACTIVATE Does not activate the window.

gib mir mal ein Code Besipiel, wie du es machen würdest?
Initialisieren tu ich es einfach so:

Code:
CListCtrl* lvwCD;
lvwCD = ( CListCtrl* ) GetDlgItem( ctrLvwCD );  // "ctrLvwCD" ist meine ListViewID

und benutze dann halt lvwCD->Methoden


mfG

MAN
 
Ok, ja, das mit dem Flag hatte ich übersehen, sorry, aber die Methode braucht ja drei Parameter, was sind dabei die Parameter "dwRemove" und "dwAdd" ? Dafür wollte ich ein Beispiel :)

mfG

MAN
 
Add sind die Styles, die du dem Window dazugeben willst, Remove zum Entfernen.

ModifyStyleEx( 0, LVS_EX_FULLROWSELECT ); // adds fullrowselect
 
Hm... klappt leider nich:

Wenn ich ModifyStyleEx(...) benutze, passiert gar nix, wenn ich ModifyStyle(...) benutz, dann zeigt er mir meine SubItems nich mehr an! was nun?

hab das so gemacht:

Code:
CListCtrl* lvwCD;
lvwCD = ( CListCtrl* ) GetDlgItem( ctrLvwCD );
lvwCD->ModifyStyle( 0, LVS_EX_FULLROWSELECT );

muss ich vielleicht noch den dritten parameter angeben, oder sonst was redraw oder was weiß ich?


mfG

MAN
 
Da muss ich mal in meinen Sourcen wühlen. Das kann etwas dauern.
---
Ging schneller, als ich dachte. Ich habe es garnicht mit ModifyStyleEx() gemacht, sondern so:
Code:
  if ( _WIN32_IE >= 0x0300 )
  {
    m_ctlVarArrayList.SetExtendedStyle( LVS_EX_FULLROWSELECT );
  }
Das ist ein Schnipsel aus der zum Dialog gehörenden OnInitDialog()-Methode.
 
Zurück