Peršokti į turinį

Kaip gauti siuntėjo ("sender'io") poziciją (koordinates)? [Windows Form Application]


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2742 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Sveiki,

 

nesenai pradėjau mokytis WinForms ir bandau išsiaiškinti kaip reiktų gauti siuntėjo ("sender'io") (pelės) poziciją (koordinates). Bandžiau ieškoti MSDN, bet nieko, kas man būtų tinkama, neradau.

Štai mano bandymas, kuris, gaila, baigėsi error'u:

private: System::Void pictureBox1_MouseHover(System::Object^ sender, System::EventArgs^ e) {
    this->pictureBox1->Location = System::Drawing::Point(sender::Position.X - 5, sender::Position.Y - 5);
    MessageBox::Show("Keep away!", "Shoo", MessageBoxButtons::OK, MessageBoxIcon::Stop);
}

Taigi mano klausimas yra gana aiškus (nors taip manau): kaip reikia gauti siuntėjo poziciją (šiuo atveju, pelės). Paaiškinimai taip pat padėtų, dėkui.

 

Atsakymas

 

Kiek pamąstęs, radau kiek ilgesnio kelio, bet vis gi veikiantį variantą.

 

Pirmiausia, namespace'e sukuriu boolean'ą su false (neigiama) reikšme (ji pasikeis į true (teigiamą), kai pelė palies paveiksliuką). Tada sukuriu du naujus metodus: pirmą skirtą pelės XY gauti ir kodo vykdymui, kai pelė liečia paveiksliuką; antrą - nustatyti, ar pelė liečia paveiksliuką, ar ne.

private: System::Void picture_MouseMove(Object^ sender, System::Windows::Forms::MouseEventArgs^ e) {
    int VMouseX = e->X,
        VMouseY = e->Y;
    if (VMouseEntered) {
        VMouseEntered = false;
        this->picture->Location = System::Drawing::Point(VMouseX + 17, VMouseY + 17);
    }
}
 
private: System::Void picture_MouseEnter(System::Object^ sender, System::EventArgs^ e) {
    VMouseEntered = true;
}

Tada sukuriu du naujus EventHandler'ius paveiksliukui. Pirmasis EventHandler'is skirtas pelės judesių klausymuisi. Antrasis - nustatyti, ar pelė liečia paveiksliuką, ar ne.

this->picture->MouseMove += gcnew System::Windows::Forms::MouseEventHandler(this, &Form1::picture_MouseMove);
this->picture->MouseEnter += gcnew System::EventHandler(this, &Form1::picture_MouseEnter);

Viskas. Tikiuosi, jog kažkam pravers.

P.S: jei kam, dėl kažkokių keistų priežasčių, reikia klausimo ir atsakymo stackoverflow'e, štai jis: http://stackoverflow.com/questions/40427101/how-to-get-the-senders-position-coordinates-in-windows-form-application/40453992#40453992

Redaguota , nario a baffled moose
Nuoroda į komentarą
Dalintis per kitą puslapį

Šitam, neatsimenu kurioj dalį parodo tiksliai kaip gauti mouse coordinates:

https://www.youtube.com/watch?v=o8hPt8s_bwU

Jau buvau radęs pavyzdį su C#, bet kažko panašaus pritaikyti C++ neišėjo. Štai tas pavyzdys: http://stackoverflow.com/questions/8201286/get-cursor-position-with-respect-to-the-control-c-sharp

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 2742 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...