Laden...

Desktop Icon Position setzen immer 1 Pixel zuviel...

Erstellt von one of two vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.349 Views
O
one of two Themenstarter:in
85 Beiträge seit 2008
vor 15 Jahren
Desktop Icon Position setzen immer 1 Pixel zuviel...

Hi,

ich setze mit Hilfe von:



SendMessage(DesktopHandle, LVM_SETITEMPOSITION,
                icon.Index, posX + (posY << 16));


Die Position eines Desktop Icons. Das funktioniert ganz gut, aber wenn man das ca. 15 mal hintereinander macht, dann fällt auf, dass das Icon nach oben rausrutscht, d.h. das es immer 1 Pixel nach oben geht. Was ist fehlerhaft an dem Aufruf?

Danke

one of two

"Wir sind die Borg. Sie werden assimiliert werden. Deaktivieren Sie Ihre Schutzschilde und ergeben Sie sich. Wir werden ihre biologischen und technologischen Charakteristika den unsrigen hinzufügen. Ihre Kultur wird sich anpassen und uns dienen. Widerstand ist zwecklos!"

3.511 Beiträge seit 2005
vor 15 Jahren

Zum zusammenbauen des lParams verwende ich immer


public static IntPtr MakeLParam(int wLow, int wHigh)
{
  return (IntPtr)((wHigh << 16) | (wLow & 0xffff));
}

posY ist auch immer gleich?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

O
one of two Themenstarter:in
85 Beiträge seit 2008
vor 15 Jahren

japp, posY ist immer gleich. Werd mal deine Methode testen...

EDIT: Mensch, toll, deine MakeLParam scheint zu funzen, THX 😃
Aber damit ich nicht nur einfach CoppyPaste, kannste mir die mal erklären?

Danke
one of two

"Wir sind die Borg. Sie werden assimiliert werden. Deaktivieren Sie Ihre Schutzschilde und ergeben Sie sich. Wir werden ihre biologischen und technologischen Charakteristika den unsrigen hinzufügen. Ihre Kultur wird sich anpassen und uns dienen. Widerstand ist zwecklos!"

P
67 Beiträge seit 2008
vor 15 Jahren

Naja... hast du denn die letzten 16 Bit von posX auf 0 gesetzt (Oder erst garnicht verschoben)? Weil Addieren im Binär-System ist eine XOR-Operation mit Übertrag.
Was du gemacht hast:

01101011+ // nehmen wir an, das hier wäre posX
00011010  // das hier posY
 üüüü ü   // Steht für Übertrag von '1'
---------
10000101

Was du wolltest:

01100000 ODER
00001010
-----------
01101010

Religionskriege sind Konflikte zwischen erwachsenen Menschen, bei denen es darum geht, wer den cooleren, imaginaeren Freund hat