Koordinaten eines Listview Items



  • So, ich hab eine Funktion, die mir die Koordinaten eines Listview Items zurückgeben soll.
    Komischerweise hab ich immer wenn ich dann die x oder y koordinate printfen will eine Zahl wie -858993472.0000 drinstehn, woran kann das liegen?? hier die Funktion:

    void GetItemPos(HWND hCurrentVisibleWnd, int iitem, POINT *itemp){
       LPVOID pMem;
        DWORD PID;
       HANDLE hProcess;
       DWORD cbWritten;
    
       GetWindowThreadProcessId(hCurrentVisibleWnd,&PID);
       printf("%x",PID);
    
       hProcess =OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE,NULL,PID);
       printf("\n%i",hProcess);   
    
       pMem =VirtualAllocEx(hProcess, NULL, 8, MEM_COMMIT, PAGE_READWRITE);
    
        SendMessage(hCurrentVisibleWnd, LVM_GETITEMPOSITION, (WPARAM)iitem, (LPARAM)pMem);
    
       ReadProcessMemory(hProcess, pMem, &itemp, 8, &cbWritten);
    
       VirtualFreeEx(hProcess,pMem,0,MEM_RELEASE);
       CloseHandle(hProcess);
    return;
    }
    

    So ruf ich sie auf:

    POINT itemp;
    float ix,iy;
    int iitem =0;
    GetItemPos(hCurrentVisibleWnd,iitem,&itemp);
    ix=(float)itemp.x;
    iy=(float)itemp.y;
    printf("\nx coord:%f  y coord%f",ix,iy);
    

    Hoffe ihr könnt mir hlefen.



  • gehört wohl eher ins winapi forum 😉

    und warum so kompliziert 😕

    POINT pt;
    
    ListView_GetItemPosition(hwnd, 0, &pt);
    

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/listview/macros/listview_getitemposition.asp



  • Dieser Thread wurde von Moderator/in Shade Of Mine aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ja hm stimmt is falsches forum. sry.
    ich habs vorher auch mit:

    POINT pt;
    
    ListView_GetItemPosition(hwnd, 0, &pt);
    

    versucht, aber da bekomm ich die gleiche verbuggte ausgabe. oder liegts vll nur an meinem printf?



  • Timberman schrieb:

    POINT itemp;
    float ix,iy;
    int iitem =0;
    GetItemPos(hCurrentVisibleWnd,iitem,&itemp);
    ix=(float)itemp.x;
    iy=(float)itemp.y;
    printf("\nx coord:%f  y coord%f",ix,iy);
    

    wieso brauchst du überhaupt float werte ?

    probier mal das

    POINT pt;
    ListView_GetItemPosition(hwnd, 0, &pt);
    printf("\n x:%d y%d", pt.x, pt.y);
    

    hast du einen gültigen fensterhandle ?



  • ich habs auch schonmal mit %d versucht, da bekomm ich dann als x z.b. -858993460 ausgegeben.
    Das Handle ist definitiv richtig, ich kann nämlich die Window Styles ändern.
    Ich weiss nicht ob es relevant ist, dass die ListView der Desktop ist, aber vll verhällt der sich ja anders?
    Ich brauch nicht zwingend floats, hab nur mit den typen bisschen rumgespielt, man kann ja nie wissen 😉



  • hab den fehler in der funktion gefunden *freu*
    es muss statt

    ReadProcessMemory(hProcess, pMem, &itemp, 8, &cbWritten);
    

    so heißen:

    ReadProcessMemory(hProcess, pMem, itemp, 8, &cbWritten);
    

Log in to reply