2009-07-23 3 views
0

In einer Win32-Anwendung Ich habe einen Dialog mit einer Liste Steuerung, die die Dialogvorlage definiert:Wie wird ein Listensteuerelement als ausgewählt markiert?

CONTROL "",IDC_LIST_Attributes,"SysListView32",LVS_REPORT | 
    LVS_SINGLESEL | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,36,246,110 

In der Laufzeit ich den Griff zu dieser Kontrolle abrufen und verschiedene Operationen mit ihm durchführen - entfernen Sie alle Artikel, Artikel hinzufügen usw. Es funktioniert gut.

Das Problem ist, dass ich ein Element nicht programmgesteuert als ausgewählt markieren kann. Ich verwende den folgenden Code für das:

LVITEM lvItem; 
lvItem.stateMask = stateMask; 
lvItem.state = state; 
SendMessage(windowHandle, LVM_SETITEMSTATE, indexToSelect, (LPARAM)&lvItem); 

dieser Code ausgeführt wird und keine Änderungen passieren in die Liste Kontrolle. wenn ich Gegenstände mit der Maus anklicke, sind sie richtig ausgewählt. Was vermisse ich?

Antwort

1

Haben Sie versucht ListView_SetItemState Macro?

Aus dem MSDN-Link:

Artikel nur, wenn hat die Listenansicht Steuerelement den Fokus als ausgewähltes zeigen oder der LVS_SHOWSELALWAYS Stil verwendet wird.

Another Link dass meine Hilfe.

+0

Versucht gerade jetzt - das gleiche Problem. Tatsächlich expandiert es sogar in gleichwertigen Quellcode. – sharptooth

+0

Nun, mit dem Stil-Set wurde es besser - die Auswahlleiste zumindest beibehalten. Aber als ich die aktuelle Auswahl (LVM_GETSELECTIONMARK) abgerufen habe, gab es CB_ERR (keine Auswahl) zurück. Also ändere ich den Status des Elements und sende LVM_SETSELECTIONMARK. Jetzt funktioniert es wie benötigt. – sharptooth