Koordinaten eines Bitmap in der Anwendung suchen
-
Ich werd mir das mal anschaun. Aber wenn ich ehrlich bin wollte ich mir das alles selbst coden, naja mehr oder weniger. Da ich grad bischen Zeit zum lernen hab, is des schon ok.
Ich wills eben mit Bitmaps versuchen.

-
Genau das hab ich ganz vergessen. Das Problem bei dieser OwnerDraw-Technik is, das ich die Buttons nicht per Resource-Editor anordnen kann.
Mann muss ja die Position immer "per Hand" angeben.
Mein Layout enthält aber so viele Elemente das es immer sehr lang dauert etwas üer Koordinaten zu plazieren.Daher greife ich gerne auf den Resource-Editor von VS zurück.
Dort hab ich mir nen leeren Dialog erstellt auf dem ich bequem und schnell meine Element anordnen kann ohne tausend mal die Position nachbessern zu müssen.Ausserdem kann es ja nicht so schwer sein die Koordinaten eines Controls bzw.
die eines Bitmaps zu bekommen.Allerdings muss ich auch zugeben das ich gestern zwei Stunden in google gesucht habe. Leider wurde ich nicht fündig.

Naja, sicher is nur mal das sowas auch mit Bitmaps geht. Und das wäre der von mir bevorzugte Lösungsweg.
-
OHPen schrieb:
Genau das hab ich ganz vergessen. Das Problem bei dieser OwnerDraw-Technik is, das ich die Buttons nicht per Resource-Editor anordnen kann.
doch kannst du.

hole dir den handle GetDlgItem(..) mach den btn ownerdraw SetWindowLong(..) und los gehtsOHPen schrieb:
Ausserdem kann es ja nicht so schwer sein die Koordinaten eines Controls bzw.
die eines Bitmaps zu bekommen.
Allerdings muss ich auch zugeben das ich gestern zwei Stunden in google gesucht habe. Leider wurde ich nicht fündig.
-
Okay, sorry für meine falsche Behauptung, aber ich dachte nicht das das geht.
Was den Link angeht danke, der schaut vielversprechend aus.
Nur wie gekomm ich nun aus dem Bitmap ein Rectange Object ?THX
-
Ähm vergesst den letzten Post, ich sollte genauer lesen.
Hat sich erledigt, danke
-
OHPen schrieb:
Ähm vergesst den letzten Post, ich sollte genauer lesen.
Hat sich erledigt, danke
schon gemacht

-
So, ich schon wieder...
LPRECT rb;und dann
GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),rb);funktioniert auch schön problemlos. Und wenn ich euch richtig verstanden habe
dann habe ich nun die Koordinaten und die Größe in diesem LPRECT namens rb.Das is alles schön und gut, aber WIE KRIEG ICH DIE DA RAUS in einzelne Variablen ?

Ich weiß ich stell dumme Fragen auch nur so lernt man.
Ich habs versucht mitrb.aber dieses Struct schein keine Attribute zu haben.
Kann einer weiterhelfen ?
-
Langsam muss ich mich über mich selbst ärgern.

rb->und dann gehts auch.
Bis bald.
-
wenn du dir die fragen selber beantwortest warum bin dann ich hier

-
OHPen ich hoffe du hast auch Speicher geholt.
Ansonsten hast du einen Wild-Pointer.
Tipp: RECT auf dem Stack anlegen.
-
Also Speicher hab ich keinen geholt ...
Bei mir sieht das im Moment so aus:
else if(Message==WM_MOUSEMOVE){ GetCursorPos(&p); ScreenToClient(hwnd,&p); GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),rb); if ((p.x > rb->left && p.x < rb->right) && (p.y > rb->top && p.y > rb->bottom)){ MessageBox(NULL,NULL,NULL,NULL); } }rb ist wie gesagt ein globles Struct:
// Positon of the Window POINT p; // RectangeStruct of the Bitmap LPRECT rb;genau wie auch meine Mausposition p.
Ich krieg nun aber ne unhandle exception.
Hat jemand nen Verbesserungsvorschlag ?PS: so wies aussieht gekommt er keine Werte in rb. Dort stürzt er nämlich ab wenn ich versuche die Werte in der IF anweisung auszulesen...
SO STOP
Ich habs nun so gemacht:
else if(Message==WM_MOUSEMOVE){ GetCursorPos(&p); ScreenToClient(hwnd,&p); GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),&rb); if ((p.x > rb.left && p.x < rb.right) && (p.y > rb.top && p.y > rb.bottom)){ MessageBox(NULL,NULL,NULL,NULL); } }jetzt verwende ich statt LPRECT für rb RECT.
Das Programm stürzt nun nicht mehr ab, das is ja schonmal was.
Allerdings seh ich keine MessageBox wenn ich auf mein Button fahre.
Naja wahrscheinlich noch ein Fehler in der Abfrage.Scheint kein Fehler in der Abfrage zu sein. Ich hab grad festgestellt das ich nachdem ich mir die Koordinaten per:
GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),&rb);hole, dort in allen Attributen 0 drin steht. Mach ich noch was falsch bei ???
-
LPRECT ist nur ein Zeiger auf ein RECT.
-
OK, aber dann müsste es doch nun gehn oder, da ich nun RECT verwende und dieses
Struct als Pointer übergebe...
-
wie schon gesagt benutz lieber RECT.
LPRECT rb GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),&rb)kann nicht gehen den du übergibts eine adresse von einem nicht akkolierten pointer. ich glaub kaum das getwindowrect(..) den speicher für dich dann bereit stellt.
so wäre es richtig
RECT rb GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),&rb)OHPen schrieb:
GetWindowRect(GetDlgItem(hwnd,IDB_BUTTON_NEW),&rb);hole, dort in allen Attributen 0 drin steht. Mach ich noch was falsch bei ???
rückgabewert von getwindowrect(..)
liefert getdlgitem(..) ein gültiges handle ?