Zum Inhalt springen

Buttonabfrage ohne Click 2ter Teil


Empfohlene Beiträge

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();

}

}

------------------------------------------------------------------------------------

Link zu diesem Kommentar
Auf anderen Seiten teilen

*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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...