Sinus-Signal in einer MFC Anwendung ausgeben



  • Hi Leute!

    Ich habe ein dringendes Problem: Wie kann ich in einer MFC-Anwendung ein Sinussignal anzeigen? Ich habs zwar schon versucht, aber mein Compiler schreibt immer den fatal error c1083 an (Cannot open included file: 'graphics.h': No such file or directory).

    Hab die MFC exe Anwendung erstellt, dialogfeldbasierend, sonst alles nach Vorgaben. Habs auch ohne MFC ganz normal im VC++ probiert (Projekt und alles erstellt), aber er schreibt mir trotzdem immer noch denselben Fehler an. Fehler hab ich nicht nur daheim, sondern auch in der Schule.

    Kann mir jemand ne Anleitung oder nen Tipp zur Fehlerbehebung geben? Wäre echt dringend. Danke schon mal im Vorraus.

    lg
    Woelkchen

    P.S.: Wenn jemand kurz Zeit hat, kann er sich bei mir unter woelkchenx@gmx.at oder ICQ #53359384 melden. DANKE!!!



  • Ähm, weiß nicht, ob ich das gut verständlich ausgedrückt hab: Ich muss das Sinussignal graphisch ausgeben, also sozusagen zeichnen lassen. Wer auch dazu, nicht nur zu meinem Fehler, Hilfe hat, bin für alle Hinweise dankbar!



  • ... daß ich vorher gerade zwei Nachrichten geschrieben hab und jetzt die dritte, hab mich jetzt extra angemeldet, um die Nachrichten editieren zu können, falls ich etwas vergessen habe.

    Was komisch ist: Ich hab in jedem Buch und auf jeder Seite nur Beispiele mit der Library gefunden. Aber wieso ist die graphics.h dann keine Standardlib?



  • kannst es in etwa in der art machen
    ungetestet so

    CWnd *wp;
    CDC *pDC;
    int y,height; // in height musst du die höhe deines zeichenfensters in pixeln reinpacken
    wp = GetDlgItem(IDC_STATIC_...); //oder this wenn du direkt auf den dialog zeichen willst
    pDC = wp->GetDC();
    
    //hier mit pDC->SetPixel in ner schleife die sinuswerte zeichen
    //den y wert bekomst du so:  y=height-(height*(wert-von)/(bis-von));
    //von und bis sind die werte auf die du y skalierst, wert ist halt der wert den deine zu zeichnende funktion an der stelle x( die wird durch deinen schleifenzähler repräsentiert) 
    
    wp->ReleaseDC(pDC);
    


  • Hm, mein Fenster sollte ca. 300 Pixel auf x und 100 auf y haben. Wie mach ich das mit den Sinuswerten? Blöderweise muss ich das Signal nämlich selbst generieren. Reicht es, wenn ich es in einer for-schleife etwa so mache:

    for (a=0, a++, a<=360)
    {
    sin = sin(a);
    }

    Wie zeichne ich dann am besten das Pixel? Am besten jeden Punkt einzeln in der for-Schleife, oder?

    Hast du zufällig ICQ oder sowas und 5 Mins Zeit?



  • ich habs dir schnell mal zusammengeklickt

    mach dir einfach einen dialog auf den packst du so ein staticfeld
    das teil nennst du dann IDC_STATIC_DIAGRAMM...

    dann packst du noch einen button drauf und packst dann diese methode für den button rein... fertig...

    void CSinusmalenDlg::OnButton1(){
    
    	CWnd *wp;
    	CDC *pDC;
    	CRect Rect;
    	double y,von,bis;
    	int i,width,height;
    	von=-1.2;
    	bis=+1.2;
    
    	wp = GetDlgItem(IDC_STATIC_DIAGRAMM);
    	pDC = wp->GetDC();
    	wp->GetWindowRect(&Rect);
    	width=abs(Rect.TopLeft().x-Rect.BottomRight().x);
    	height=abs(Rect.TopLeft().y-Rect.BottomRight().y);
    
    	for(i=0;i<width;++i){
    		double wert=sin(i*3.14/180);	
    		if(bis>=wert && von<=wert){
    			y=height-(height*(wert-von)/(bis-von));
    			pDC->SetPixel(i,(int)y,RGB(255,0,0));
    
    		}	
    
    	}
    
    	wp->ReleaseDC(pDC);
    
    }
    


  • UUUUUUUUUUUUh yeah baby! *success*

    Tausend Dank!!! Hey, ich bin dir dafür echt was schuldig 😉 Wenn dir etwas einfällt, wie ich mich revanchieren kann, dann meld dich bei mir (egal ob Süssigkeiten, Einladung wenn ich mal in Berlin bin, MP3s, Filme ;))

    Danke nochmal und schönen Abend noch an den Retter!!!



  • also bei mir kommt der Fehler

    error C2065: 'sin' : nichtdeklarierter Bezeichner

    hilfe! 😞



  • Dann solltest du eventuell den richtigen Header (<cmath>) einbinden, damit der Compiler die Sinusfunktion findet.



  • Woelkchen schrieb:

    Hm, mein Fenster sollte ca. 300 Pixel auf x und 100 auf y haben. Wie mach ich das mit den Sinuswerten? Blöderweise muss ich das Signal nämlich selbst generieren. Reicht es, wenn ich es in einer for-schleife etwa so mache:

    for (a=0, a++, a<=360)
    {
    sin = sin(a);
    }

    Wie zeichne ich dann am besten das Pixel? Am besten jeden Punkt einzeln in der for-Schleife, oder?

    Hast du zufällig ICQ oder sowas und 5 Mins Zeit?

    Sollte mich wundern wenn das geht... Die Sinusfunktion verlangt rein rechentechnisch den Winkel in Radiand und nicht in Grad. Programmiertechnisch kann das sicher so hinhaun.... :xmas2:



  • uups :xmas1:


Anmelden zum Antworten