๐Ÿš€ go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: free.it.visual-basic
Article #156

Errore fatale con messaggio LVM_SETITEMSTATE su SysListView32

#156
From: Emilio
Date: Mon, 17 Mar 2008 21:12
85 lines
3518 bytes
Buonasera,

sto scrivendo un programma in Visual Basic 6 per controllarne un altro
scritto in Visual C++.
Il programma da controllare รจ composto da quattro oggetti di tipo
SysListView32.
Con il codice seguente posso recuperare gli handle dei quattro
controlli e su questi posso effettuare operazioni di aggiunta e
rimozione elementi. L'unico messaggio che non mi funziona รจ quello per
selzionare uno o tutti gli elementi della SysListView.
Infatti quando mando questo messaggio ricevo un errore fatale
dell'applicazione in Visual C++ con riferimento al file COMCTL32.OCX.
Ecco il codice:

Type LVITEM
    mask As Long
    iItem As Long
    iSubItem As Long
    state As Long
    stateMask As Long
    pszText As Long
    cchTextMax As Long
    iImage As Long
    lParam As Long
    iIndent As Long
End Type

Private Const LVM_FIRST = &H1000 '// Costanti messaggi per listview
Private Const LVM_SETITEMSTATE = (LVM_FIRST + 43)
Private Const LVIS_SELECTED = &H2
Private Const LVIF_STATE = &H8

Public hSysListView32(3) As Long 'handle delle varie SysListView32
Public SysListAttrib(3) As LVITEM

Sub TestButton()
    hFound = FindWindowEx(0, 0, vbNullString, "Visual C++ Program")

    If hFound > 0 Then
        result = EnumChildWindows(hFound, AddressOf EnumChildProc,
ByVal 0&)
    End If
End Sub

Public Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As
Long) As Long
    Dim sClass As String
    Dim ret&
    Dim totalItem As Integer
    Static i As Integer

    sClass = Space$(64)
    ret = GetClassName(hwnd, sClass, 64)

    If InStr(Left(sClass, ret), "SysListView32") Then

            hSysListView32(i) = hwnd

        i = i + 1
    End If

    EnumChildProc = 1
End Function

Sub Select() 'richiamata da un pulsante della form

    Dim x

    For x = 0 To 3

        SysListAttrib(x).mask = LVIF_STATE
        SysListAttrib(x).state = True
        SysListAttrib(x).stateMask = LVIS_SELECTED

            Call SendMessage(hSysListView32(x), LVM_SETITEMSTATE, -1,
SysListAttrib(x))
            Call UpdateWindow(hSysListView32(x))
    Next x

End Sub

Cosa ne pensate di questo comportamento? In pratica mi funziona tutto
tranne l'unico messaggio che veramente mi serve! :-)

Grazie, Emilio.
Technical Details
Message-ID: <8599b475-a6a1-4cad-855b-26a510ff8f91@c19g2000prf.googlegroups.com>
Path: arc1-ca.pugleaf.net!g2news1.google.com!postnews.google.com!c19g2000prf.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Google-Thread: f94ee,387bca264eed8524,start
X-Google-Attributes: gidf94ee,public,usenet
X-Google-Language: ITALIAN,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!postnews.google.com!c19g2000prf.googlegroups.com!not-for-mail
From: Emilio <emilio.dedominicis@gmail.com>
Newsgroups: free.it.visual-basic
Subject: Errore fatale con messaggio LVM_SETITEMSTATE su SysListView32
Date: Mon, 17 Mar 2008 14:12:09 -0700 (PDT)
Organization: http://groups.google.com
Lines: 85
Message-ID: <8599b475-a6a1-4cad-855b-26a510ff8f91@c19g2000prf.googlegroups.com>
NNTP-Posting-Host: 87.7.104.111
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
X-Trace: posting.google.com 1205788330 11804 127.0.0.1 (17 Mar 2008 21:12:10 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: Mon, 17 Mar 2008 21:12:10 +0000 (UTC)
Complaints-To: groups-abuse@google.com
Injection-Info: c19g2000prf.googlegroups.com; posting-host=87.7.104.111; 
 posting-account=WXMPEgoAAABrdwCQ6knaP7RA189fAD_e
User-Agent: G2/1.0
X-HTTP-UserAgent: Mozilla/5.0 (Windows; U; Windows NT 5.1; it; rv:1.8.1.12) 
 Gecko/20080201 Firefox/2.0.0.12,gzip(gfe),gzip(gfe)