vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
SEPA-Dateien erstellen inkl. IBAN-, BLZ-/Kontonummernprüfung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: TreeView über SendMessage auslesen - Nachtrag 
Autor: Maywood
Datum: 14.05.07 14:29

Laut der Headerdatei "Commctrl.h" gibt zwei verschiedene TVM_GETITEM Nachrichten:

#ifdef UNICODE
#define TVM_GETITEM TVM_GETITEMW
#else
#define TVM_GETITEM TVM_GETITEMA
#endif

Siehe dazu: http://www.thescripts.com/forum/thread621199.html (weiter unten)

Wenn man nun die Message TVM_GETITEMA (anstatt die Std. Unicode Msg TVM_GETITEMW) benutzt und den Code etwas modifiziert, funktioniert das ganze auch mit der COM TreeView-Komponente:
Option Strict On
Option Explicit On
 
Imports System.Runtime.InteropServices
 
Partial Public Class MainForm
 
    Public Const TV_FIRST As Integer = 4352
    Public Const TVSIL_NORMAL As Integer = 0
    Public Const TVSIL_STATE As Integer = 2
    Public Const TVM_SETIMAGELIST As Integer = TV_FIRST + 9
    Public Const TVM_GETNEXTITEM As Integer = TV_FIRST + 10
    Public Const TVIF_HANDLE As Integer = 16
    Public Const TVIF_STATE As Integer = 8
    Public Const TVIF_IMAGE As Integer = 2
    Public Const TVIS_STATEIMAGEMASK As Integer = 61440
    Public Const TVM_SETITEM As Integer = TV_FIRST + 13
    Public Const TVGN_ROOT As Integer = 0
    '// Public Const TVM_GETITEM As Integer = TV_FIRST + 62
    '// TVM_GETITEMA (TV_FIRST + 12)
    Public Const TVM_GETITEM As Integer = TV_FIRST + 12
    Public Const MY_MAXLVITEMTEXT As Integer = 127
    Private Const TVIF_TEXT As Int32 = &H1
 
    <StructLayout(LayoutKind.Sequential, Pack:=8, CharSet:=CharSet.Auto)> _
    Public Structure TVITEM
        Dim mask As Integer
        Dim hItem As IntPtr
        Dim state As Integer
        Dim stateMask As Integer
        Dim pszText As IntPtr
        Dim cchTextMax As Integer
        Dim iImage As Integer
        Dim iSelectedImage As Integer
        Dim cChildren As Integer
        Dim lParam As IntPtr
    End Structure
 
    <DllImport("user32.dll")> _
    Public Overloads Shared Function SendMessage _
        (ByVal hWnd As IntPtr, ByVal Msg As Integer, _
        ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    End Function
 
    <DllImport("User32.dll", CharSet:=CharSet.Auto)> _
    Public Overloads Shared Function SendMessage _
        (ByVal hWnd As IntPtr, ByVal msg As Integer, _
        ByVal wParam As Integer, ByRef lParam As TVITEM) As Integer
    End Function
 
    Private Declare Function LocalAlloc _
    Lib "kernel32.dll" (ByVal wFlags As Int32, ByVal wBytes As Int32) As Int32
 
    Public Sub New()
        ' The Me.InitializeComponent call is required for Windows Forms 
        ' designer support.
        Me.InitializeComponent()
        '
        ' TODO : Add constructor code after InitializeComponents
        '
    End Sub
 
    Sub FillTreeView()
        With Me.AxTreeView1
            .Nodes.Add(, "root", "root", "node0")
            .Nodes.Add(, "root", , "node1")
        End With
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button1.Click
        Dim tvi As New TVITEM
        Dim hWnd As IntPtr = New IntPtr(Me.AxTreeView1.hWnd) _
          'Me.TreeView1.Handle
        Dim pszText As IntPtr = IntPtr.Zero
        Dim buffer As String = Nothing
        Dim hRoot As IntPtr = IntPtr.op_Explicit(SendMessage(hWnd, _
          TVM_GETNEXTITEM, TVGN_ROOT, 0))
        tvi.hItem = hRoot
        tvi.state = 0
        SendMessage(hWnd, TVM_GETITEM, 0, tvi)
        pszText = New IntPtr(LocalAlloc(&H40, MY_MAXLVITEMTEXT))
        tvi.mask = TVIF_TEXT
        tvi.hItem = hRoot
        tvi.cchTextMax = MY_MAXLVITEMTEXT
        tvi.pszText = pszText
        SendMessage(hWnd, TVM_GETITEM, 0, tvi)
        '// buffer = Marshal.PtrToStringUni(tvi.pszText, MY_MAXLVITEMTEXT)
        buffer = Marshal.PtrToStringAnsi(tvi.pszText, MY_MAXLVITEMTEXT)
        Debug.WriteLine(buffer)
        MessageBox.Show(buffer)
    End Sub
 
    Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles MyBase.Load
        FillTreeView()
    End Sub
 
End Class
(frag mich aber bitte nicht warum das so ist )
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
TreeView über SendMessage auslesen2.821t.b.d08.05.07 16:01
Re: TreeView über SendMessage auslesen1.672Maywood10.05.07 17:09
Re: TreeView über SendMessage auslesen - Nachtrag1.632Maywood10.05.07 17:19
Re: TreeView über SendMessage auslesen - Nachtrag1.510t.b.d11.05.07 08:54
Re: TreeView über SendMessage auslesen - Nachtrag1.530t.b.d11.05.07 12:37
Re: TreeView über SendMessage auslesen - Nachtrag1.627Maywood14.05.07 08:46
Re: TreeView über SendMessage auslesen - Nachtrag2.572Maywood14.05.07 14:29
Re: TreeView über SendMessage auslesen - Nachtrag1.592t.b.d14.05.07 14:43

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel