kein Mausklick beim rcClient erkennbar?



  • 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 (&region);
    

    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,





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


Anmelden zum Antworten