Babybaer Geschrieben 22. Mai 2002 Geschrieben 22. Mai 2002 Hallo, an die mit der Glaskugel. Mein Problem hatte ich schon mal beschrieben " Button abfrage ohne Click", nun das ich die Button abfragen kann funktioniert ,in dem ich die Cursorpos abgefragt habe(siehe unten) doch durch diese Methode lassen sich die Button aber nicht mehr mit der Maus anklicken, das sollte aber schon noch möglich sein. Gibt es den keine Funktion die mir die Resource-Nummer oder so was eindeutiges zurückgibt? (für die MFC aber) Bin dankbar für alles, mir gehen langsam die Ideen aus. :confused: ---Code-------------------------------------------------------------------------- void CCd3Dlg::Test(CPoint point) { CRect rc; GetClientRect(&rc); if(rc.PtInRect(point)) { if(point.x>10&&point.x<85&&point.y>10&&point.y<35)//Cursorabfrag eingrenzen { //tue das } SetCapture(); } else if(!rc.PtInRect(point)) { //tue das ReleaseCapture(); } } ------------------------------------------------------------------------------------ Zitieren
Goos Geschrieben 22. Mai 2002 Geschrieben 22. Mai 2002 *Glaskugelanschau* .....meine Kugel sagt mir folgendes.......Du hast keine Klasse fuer deine Buttons geschrieben (und das ist nicht gut so ) du bekommst wohl dein MouseMove ueber deinen MainDlg. Durch das SetCapture() geht aber nun alles an Mouseaktivitaeten an deinen MainDlg und somit wuerd ich sagen kannst du keine Buttons druecken :OD ....die Glaskugel erlischt... Bye Goos Zitieren
Smoggy Geschrieben 22. Mai 2002 Geschrieben 22. Mai 2002 In der oben genannte Klasse wird das gliche behandelt, nur eben mit einem Static. Wenn man über das Static(den Button) fährt, ändert sich der Cursor, klickt man ihn an, öffnet sich ne HP. Da ein static genau wie ein Button auch nur ein Fenster ist, solltest du die funktionsweise eigentlich leicht auf dein Prog übertragen können. Such einfach mal nach "Paul Dilascia CStaticLink" und wuschel dich dann durch. ist eigentlich sehr einfach. Und ne neue Klasse ist auch nicht von nöten. (Hatte das Damals in einem FormView und einem Dialog verwirklicht) Greez Zitieren
Crush Geschrieben 25. Mai 2002 Geschrieben 25. Mai 2002 Hallo Babybaer! Sorry, tut mir leid, daß das so lange ging, aber weil meine Neffen zu Besuch waren hat´s leider länger gedauert... keine Zeit ... weißt Du ja. Deshalb konnte ich mich erst jetzt ransetzen. Hier die Lösung: POINT pnt; GetCursorPos(&pnt); int dlgID=WindowFromPoint(pnt)->GetDlgCtrlID(); Mit der ID kann man dann ordentlich arbeiten. Alle Standard-Fenster vom System (virtuelle Funktionen wie der OK oder Exit-Button) starten mit 1 und sind von da an durchnummeriert. Eigens erstellte Elemente starten bei 1000 .. kann man aber auch von Hand in der Resource abändern. 0=nicht zum Dialog zugehöriges Fenster. Es ist also nicht unbedingt notwendig überall eigene Klassen abzuleiten. Zitieren
Crush Geschrieben 27. Mai 2002 Geschrieben 27. Mai 2002 Man kann aber auch die Message-Queue selber filtern, indem man im public: der Klasse vom Dialog virtual BOOL PreTranslateMessage(MSG* pMsg); und in der .cpp BOOL CTest8Dlg::PreTranslateMessage(MSG* pMsg) { MSG mymsg=*pMsg; if (mymsg.message==WM_MOUSEMOVE) { int dlgID=WindowFromPoint(mymsg.pt)->GetDlgCtrlID(); TRACE("%d %d %d\n",dlgID,mymsg.pt.x,mymsg.pt.y); } return CDialog::PreTranslateMessage(pMsg); } Den Trace sieht man dann in der Aufrufliste vom Debugger (mach ich halt gerne so) Das schöne ist, man kann alle Messages vom Dialog abfangen, filtern und dann alles damit anstellen (ähnlich wie einen MessageProc Hook). Zitieren
Babybaer Geschrieben 27. Mai 2002 Autor Geschrieben 27. Mai 2002 Das ist genau so wie ich es mir vorgestellt habe, PERFEKT. Dank auch an die, die es versucht haben. Zitieren
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.