Koordinaten eines Bitmap in der Anwendung suchen



  • Ä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 mit

    rb.
    

    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 ?


Anmelden zum Antworten