Artery Geschrieben 30. Dezember 2011 Teilen Geschrieben 30. Dezember 2011 (bearbeitet) Hey, Ich brauche die Größe sowie die Position von Steuerelementen. Ich habe folgendes ausprobiert: CRect rect; CWnd *pWnd = AfxGetApp()->GetMainWnd()->GetDlgItem(IDBC_VOCTRAIN); pWnd->GetWindowRect(&rect); ScreenToClient(&rect); Doch bei "ScreenToClient" gibts eine Zugriffsverletzung und zwar an dieser Stelle: _AFXWIN_INLINE void CWnd::GetWindowRect(LPRECT lpRect) const [COLOR="red"]{ ASSERT(::IsWindow(m_hWnd)); ::GetWindowRect(m_hWnd, lpRect); }[/COLOR] Ich verstehe nicht wieso, wäre schön wenn ihr mir weiterhelfen könntet! EDIT: Wieso bekomme ich auf fast alles eine Zugriffsverletzung wenn ich AfxGetApp()->GetMainWnd()->GetDlgItem(IDBC_VOCTRAIN)-> und hier dann versuche iwie an das rect ranzukommen? getDC geht nicht usw... MfG Artery Bearbeitet 30. Dezember 2011 von Artery Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 30. Dezember 2011 Teilen Geschrieben 30. Dezember 2011 Es kommt darauf an, wo dieser Code steht. Wenn an dieser Stelle das Fenster bzw Steuerelement noch gar nicht erstellt wurde, gibt dir GetMainWnd bzw. GetDlgItem NULL zurück. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 30. Dezember 2011 Autor Teilen Geschrieben 30. Dezember 2011 Also das ganze steht bei mir in der View cpp, ich habe nämlich eine SDI mit FormView. void CVokabeltrainer20enhancedView::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein, und/oder benutzen Sie den Standard. POINT coord; GetCursorPos(&coord); CRect rect; CWnd *pWnd = AfxGetApp()->GetMainWnd()->GetDlgItem(IDBC_VOCTRAIN); pWnd->GetWindowRect(&rect); //pWnd->GetClientRect(&rect); ScreenToClient(&rect); //optional step - see below //position: rect.left, rect.top //size: rect.Width(), rect.Height() if(coord.x >= rect.left && coord.x <= rect.left+rect.Width()) { exit(1); } CFormView::OnMouseMove(nFlags, point); } So sieht das Ganze in rohform aus und ich bekomme dann sofort nachm start ne Fehlermeldung bei: _AFXWIN_INLINE void CWnd::GetWindowRect(LPRECT lpRect) const [COLOR="red"]{ ASSERT(::IsWindow(m_hWnd)); ::GetWindowRect(m_hWnd, lpRect); }[/COLOR] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 31. Dezember 2011 Teilen Geschrieben 31. Dezember 2011 Und welchen Wert hat pWnd an dieser Stelle? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 31. Dezember 2011 Autor Teilen Geschrieben 31. Dezember 2011 Seltsamerweise steht in pWnd nach dieser Zeile CWnd *pWnd = AfxGetApp()->GetMainWnd()->GetDlgItem(IDBC_VOCTRAIN); nichts... Aber ich verstehe das einfach nicht.. Weil GetDlgItem gibt genau CWnd* zurück.. Ich bin so sher am verzweifeln, MFC ist so ein dreckiger ****** ganz ehrlich! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hexagon Geschrieben 31. Dezember 2011 Teilen Geschrieben 31. Dezember 2011 Moin. Sicher das "IDBC_VOCTRAIN" Richtig ist? Das schaut irgendwie komisch aus... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 1. Januar 2012 Autor Teilen Geschrieben 1. Januar 2012 Wieso schaut das komisch aus? Das BC steht bei mir für ButtonControl, damit man aus der ID auch heraus sehen kann um was es sich für ein Controltyp handelt und es richtig so, habe es EXTRA nochmal überprüft.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hexagon Geschrieben 2. Januar 2012 Teilen Geschrieben 2. Januar 2012 Moin. Sah halt nur etwas komisch aus, da ich das dann ehr als "IDC_BTN_VOCTRAIN" kenne. Was mir jetzt aber auffällt: Wieso gehst du von CVokabeltrainer20enhancedView über die CWinApp um an Steuerelement heranzukommen? Ich nehme mal an das IDBC_VOCTRAIN in dieser View steht oder? Dann kannst Du das doch einfach per GetDlgItem(IDBC_VOCTRAIN) bekommen. Und noch eine Frage: Wieso nutzt Du nicht DataMapping? Ich finde den Zugriff per Membervariable und UpdateData etwas einfacher. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 2. Januar 2012 Autor Teilen Geschrieben 2. Januar 2012 Ganz ehrlich ich komme nicht so gut damit klar und habe diesen Teil des Codes aus dem Internet... Meine Intention war es, die aktuelle Positon des Mauszeigers abzufragen und dann wollte ich gucken ob die Position des Mauszeigers innerhalb des Buttons ist (also er auf dem Button ist) Wenn wer eine bessere Idee hat das umzusetzen dann bitte Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Hexagon Geschrieben 3. Januar 2012 Teilen Geschrieben 3. Januar 2012 Ganz ehrlich ich komme nicht so gut damit klar und habe diesen Teil des Codes aus dem Internet... :pssst: Meine Intention war es, die aktuelle Positon des Mauszeigers abzufragen und dann wollte ich gucken ob die Position des Mauszeigers innerhalb des Buttons ist (also er auf dem Button ist) Um dann was zu machen? Wenn wer eine bessere Idee hat das umzusetzen dann bitte Es kommt eben darauf an WAS Du machen möchtest. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 3. Januar 2012 Autor Teilen Geschrieben 3. Januar 2012 Hab ich doch gesagt =O Also ich will folgendes: Wenn der Mauszeiger über einem Steuerelement ist, dass ihrgendetwas passiert Ich hatte etwas rumgesucht und wurde soweit fündig, dass es keine Meldung wie move_in oder move_on oder sowas gibt. Also wollte ich mir das Ganze selber basteln, in dem ich die Meldung Mouse_move benutze also immer wenn sich die Maus bewegt, frage ich die Koordinaten ab. Dann gleiche ich diese Koordinaten mit den Positionen von den Steuerelementen ab um herauszufinden, ob sich die Maus auf einem dieser Steuerelementen z.b. einem Button befindet! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. Januar 2012 Teilen Geschrieben 3. Januar 2012 Dann gleiche ich diese Koordinaten mit den Positionen von den Steuerelementen ab um herauszufinden, ob sich die Maus auf einem dieser Steuerelementen z.b. einem Button befindet! Das ist unnötig. Wenn sich die Maus über dem Button befindet, merkst du das schon allein daran, dass dann der Button die MouseMove-Nachrichten bekommt. Wenn du darüber informiert werden willst, wann der Mauszeiger ein Fenster verlässt, musst du TrackMouseEvent benutzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 3. Januar 2012 Autor Teilen Geschrieben 3. Januar 2012 Ähm moment, also ich hätte vorhin nicht button sagen sollen Also ich habe entweder ne Picture Control und ein Static text, wie weiß ich jetzt genau wann die maus auf ihnen dauf ist? =/ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 3. Januar 2012 Teilen Geschrieben 3. Januar 2012 Ob es ein Button oder Static ist, ist doch egal. Wenn nicht gerade Capture aktiv ist, bekommt das Fenster, über dem sich der Mauszeiger befindet, die Mausnachrichten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Artery Geschrieben 4. Januar 2012 Autor Teilen Geschrieben 4. Januar 2012 Ja moment ich verstehs grad nicht ganz, weil ich durch die Meldungen und so nicht 100prozent durchsteige. Also könntest du bitte explizit erklären WAS ich machen muss, damit ich weiß ob mein Mauszeiger auf meiner Picture Control ist! =) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Januar 2012 Teilen Geschrieben 4. Januar 2012 Mit dem MFC-Klassenassistenten eine Klasse von CStatic ableiten und darin WM_MOUSEMOVE behandelnZum Picture-Control eine Control-Variable vom Typ der neuen Klasse anlegenNotify-Property des Controls auf True setzen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 4. Januar 2012 Teilen Geschrieben 4. Januar 2012 prüfen ob dein picture control die mousemove nachricht bekommt. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.