Grundverständnis Frage zwecks WinApi



  • Hallo,

    ich habe mich nun in diesem Forum angemeldet um hoffentlich schnell etwas Hilfe zu dem recht komplexen Thema WinApi zu bekommen. Es geht um Eventhandling und Zeichnen von Linien und Formen. Wir lernen dies an der Hochschule, dennoch fehlt mir das immernoch das Grundverständnis, irgendwie wurde dies nicht richtig erklärt. Vielleicht kann mir jemand meine Fragen zu dem nachfolgenden Quellcode beantworten.

    #include <windows.h>
    #include <string>
    #include "Data.h"
    #include "math.h"
    
    #using <mscorlib.dll>
    #using <System.dll>
    #using <System.Windows.Forms.dll>
    #using <System.Drawing.dll>
    
    using namespace System::Windows::Forms;
    using namespace System::Drawing;
    using namespace System::Text;
    using namespace System;
    
    ref class Diagramm : public Form
    {
    	// Variablen ...
    
    public:
    	Diagramm(void)
    	{
                    // Hauptprogramm ...
    	}
    
    	void Form_Scroll(Object^ Sender, ScrollEventArgs^ e)
    	{
    		Invalidate();
    	}
    
    	void Form_MouseDown(Object^ Sender, MouseEventArgs^ e)
    	{
    		// Do something
                    Invalidate();
    	}
    
    	void Form_KeyPress(Object^ pSender, KeyPressEventArgs^ e)
    	{
    		// Do something
    		Invalidate();
    	}
    
    	void Form_Paint(Object^ pSender, PaintEventArgs^ e)
    	{
    		// Daten zeichnen ... 
    	}
    };
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
    	Application::Run(gcnew Diagramm());
    	return 0;
    }
    

    So hier nun meine Fragen 🙂

    1. Warum wird beim Aufruf von Invalidate() automatisch Form_Paint(...) aufgerufen??

    2. Sind die Funktionen Form_KeyPress usw. vorgegeben / ein Standard ???

    Grüße, Jan



  • Die C-API von Windows, gemischt mit C++/CLI, sieht echt gruselig aus. Könnt ihr an der Hochschule nicht WinAPI (C) _oder_ C++/CLI lernen? Das macht mMn keinen Sinn.

    Zum Thema:

    1. Invalidate() bewirkt, dass bestimmte Flächen auf dem Fenster ungültig geworden sind, d.h., dass nie neu gezeichnet werden müssen. Wenn z.B. ein Fenster über einem anderen liegt und du es nun langsam wegziehst, müssen genau diese nun sichtbaren Flächen gezeichnet werden. Folglich wird WM_PAINT gesendet bzw. irgendein Paint-Event gesetzt.

    2. Nein, diese Funktionen müssen irgendwo mit den entsprechenden Events assoziiert sein. Von C++/CLI oder allgemein .NET hab ich aber kaum Ahnung.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum WinAPI in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ok. Danke dir. Dachte mir schon, dass dieses Prinzip ein Durcheinander ist. Ich nehme es jetzt für die Klausur einfach mal so an wie es der Prof möchte und werde mir für später dann ein gutes Buch besorgen.

    Grüße Jan



  • User2301 schrieb:

    Ok. Danke dir. Dachte mir schon, dass dieses Prinzip ein Durcheinander ist. Ich nehme es jetzt für die Klausur einfach mal so an wie es der Prof möchte und werde mir für später dann ein gutes Buch besorgen.

    Grüße Jan

    Und entsorge den Prof wenn Du kannst.


Anmelden zum Antworten