kein Mausklick beim rcClient erkennbar?
-
hallo liebe coder,
ich habe mein dialogfenster und noch ein rcClient gebastelt,
auf dem ich zeichne... Nun möchte ich einen mausklick abfangen...
das funktioniert auch wunderbar, nur nicht innerhalb des rcClients...das wäre total schade, mein ansatz ist dieser
// Wenn linke Maustaste Losgelassen wird ( zur Ermittlung der Mausposition ) void CRegressionDlg::OnLButtonUp(UINT nFlags, CPoint point) { // Setzten des Mausklicks zur Überprüfung für Methode DrawChoosedPointFromMouse() in CGraph m_ctrlGraph.mouseClicked(); }vielen dank im voraus...
-
Was ist denn ein rcClient?
-
also...
in CGraph wird in CRect gezeichnet...
ich habe mir in meinem Dialogfenster ein rc gebastelt...CPaintDC dc(this); // device context for painting // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein. // CWnd::OnPaint() soll zum Zeichnen von Meldungen nicht aufgerufen werden. // Region fuer das clipping CRgn region ; CRect rcClient ; // Retangle Abmaße laden GetClientRect(&rcClient);ein mausklick wird im Dialogfenster erkannt, jedoch nicht im rcClient,
dass ich mir erstellt habe... dort befindet sich nämlich mein koordinatensystem...danke für die hilfe...
-
Zu welcher Klasse gehört denn die OnPaint-Methode aus deinem 2. Posting? Zu CRegressionDlg?
Wenn ja, dann hast du mit GetClientRect die Abmessungen dieses Dialogs gespeichert. Wenn OnLButtonUp ausgelöst wird, hat der Benutzer irgendwo auf den Dialog geklickt, also logischerweise auch in den Bereich, den du in rcClient festgehalten hast. Um das festzustellen, ist aber kein rcClient nötig.
rcClient ist eigentlich zu nichts gut. Ist dir klar, dass du diese Variable in OnPaint lokal erzeugst, so dass sie am Ende der Funktion ihre Gültigkeit verliert? Du kannst sie nicht in einer anderen Funktion wie z.B. mouseClicked() verwenden, falls du das vorhast.
Was genau ist das Ziel deines Projekts? Du möchtest ein kleines Zeichenprogramm schreiben, oder?
Falls du wissen willst, wohin genau der Benutzer geklickt hat (um dort zu zeichnen) und welche Taste noch zusätzlich gedrückt ist (z.B. Shift), dann musst du die Parameter von OnLButtonUp auswerten (nFlags, point).
-
Am besten du zeigst auch mal den Code, in dem gezeichnet wird.
-
ich habe ein kleines regressionsprogramm geschrieben, dass eine grafische ausgabe hat...
sinn und zweck dieser aufgabe war es, den dialogteil getrennt vom grafikteil zu halten! also CResgressionDlg.cpp von CGraph.cpp ...
nur in CGraph wird gezeichnet
beispiel:
void CGraph::OnPaint() { if ( !m_nXY || !m_xy ) { CWnd::OnPaint(); return; } CPaintDC dc(this); // device context for painting // TODO: Fügen Sie hier Ihren Meldungsbehandlungscode ein. // CWnd::OnPaint() soll zum Zeichnen von Meldungen nicht aufgerufen werden. // Region fuer das clipping CRgn region ; CRect rcClient ; // Retangle Abmaße laden GetClientRect(&rcClient); ... ... }und weiterhin:
// Roten Stift waehlen dc.SelectObject(penRed); // Regionsbestimmung region.CreateRectRgn ( (int) m_clientDP.offsetX + m_clientDP.border , // x1 (int) m_clientDP.offsetX + m_clientDP.border , // y1 (int) (rcClient.Width() - (m_clientDP.offsetX + m_clientDP.border)) ,// x2 (int) (rcClient.Height() - (m_clientDP.offsetX + m_clientDP.border)) // y2 ); // Region Geltend machen dc.SelectClipRgn (®ion);der Mausklick wird wie gesagt erkannt und ich kann seine position auch bestimmen. jedoch reagiert das handling der CRegressionDlg nicht, wenn ich mich mit der maus über der region befinde...
vielen dank,
-
Schau mal darein.
http://msdn2.microsoft.com/en-us/library/ms646262(VS.85).aspx
-
er reagiert immer noch nicht...

bzw springt er beim debuggen nicht in den marker,
den ich gesetzt habe...in RegressionDlg.h
public: afx_msg void SetCapture();und folglich in RegressionDlg.cpp
void CRegressionDlg::SetCapture() { m_ctrlGraph.mouseClicked(); }ich habe es bewusst in RegressionDlg getan, weil im dialogfenster das messagehandling stattfindet. ich habe noch CDialog, aber daran sollte ich nicht herumspielen, hat man mir gesagt...
verstehe ich da was falsch? (falscher code?)
-
ich erhalte von beiden klassen die option "SetCapture" als Methode anzuweden...
jedoch beschwert er sich, dass diese Methode nicht in der jeweiligen headerdatei deklariert wurde...also kann es zu keinem systemaufruf kommen, stimmts?
auch unter ON_WM_XXX habe ich nichts dergleichen gefunden....HIIILLLLFE....
-
eigentlich habe ich mir gedachte, dass du SetCapture() ohne Deklaration.
In OnLButtonUp CRegressionDlg packst. Stürzt dein Programm ab? Falls ja, an welche Stelle?
-
nein... abstürzen tut es nicht....
SetCapture() lohnt sich nicht in In OnLButtonUp CRegressionDlg zu packen,
da ja OnLButtonUp nicht innerhalb meines CRect reagiert...die mausposition zu bestimmen, dass ist kein problem...
das kann ich sogar in jeder klasse abrufen...einen mausklick zu erkennen ist auch kein problem...
jedoch funktioniert es nicht mehr, wenn ich mich mit der maus über dem definiertem CRect befinde...
-
es gab derart leider keine ähnlichen lösungen im forum gefunden,
deshalb muss ich nochmal anfragen ob jemand einen weiteren hinweis hat...hiessen dank...