Fenster aus Dialoganwendung öffnen ???



  • Hallo,

    ich habe zu der folgenden Frage schon die Suchfunktion bemüht und nichts passendes gefunden. Die meisten Fragen hier sind wohl doch etwas spezieller...

    Mit C++ kenne ich mich einigermaßen aus, das MS Developer Studio und Windows-Programmierunn gehen mir teilweise aber ziemlich auf den Keks 😃

    Naja, nun zur (einfachen) Frage:

    Ich verwende den Anwendungsassistenten, um ein neues Projekt zu beginnen und habe eine MDI Anwendung geschrieben. Die funktioniert ganz prima, aber nach einigen Änderungen, wäre es eigentlich viel sinvoller, eine Dialoganwendung zu schreiben, aus der z.B. nach dem clicken eines Buttons, ein Fenster geöffnet wird. In diesen Fenster erscheint Text zur Ausgabe von Messwerten.

    Wenn ich also meine Anwendung habe mit folgender Funtion:

    void OnButtonClick()
    {
    //hier möchte ich ein Fenster erstellen...
    }
    

    Mit welcher Funktion erzeuge ich genau so ein Fenster, wie es zuvor die MDI-Anwendung getan hat? Einen neuen Dialog zu erstellen wäre kein Problem, aber ich möchte eben ein hübsches Fenster haben.

    Danke und Gruß.



  • Hi,

    Ich nehme mal an, dass deine OnButtonClick() Funktion eine Methode deiner Dialogklasse ist 😉

    Du gehst, wenn du ein neues Fenster erstellen willst genauso vor wie sonst auch:
    - deine eigene Klasse von der entsprechenden Fensterklasse ableiten (z.B. von CFrameWnd)
    - Create und Show aufrufen

    Wenn du ein "MDI-Fenster" erstellen willst, kannst du auch einfach den Code, den der Assistent in InitInstance automatisch erstellt, in die Funktion kopieren (nicht den ganzen 😃 , nur den für das Fenster relevanten).

    Grüße Rapha



  • So, ich hab mal folgendes Beispiel aus dem Petzold übernommen:

    Es ist eine Dialoganwendung mit einem Button "Button1".
    Wenn ich auf den clicke, wird folgende Funktion ausgeführt:

    void CTestKonsoleDlg::OnButton1() 
    {
    	HWND hwnd;
    	HINSTANCE hInstance; //=???
    	static TCHAR szAppName[] = TEXT("Hello");
    	hwnd = CreateWindow(szAppName,
    		TEXT("BLABLA"),
    		WS_OVERLAPPEDWINDOW,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		CW_USEDEFAULT,
    		NULL,
    		NULL,
    		hInstance,
    		NULL);
    	::ShowWindow(hwnd, SW_SHOW);
    	::UpdateWindow(hwnd);
    }
    

    Die Funktionen ShowWindow und UpdateWindow gibt es in mehreren Varianten, je nachdem, ob man sich in einer Klasse befindet, die von CWnd abgeleitet ist oder nicht. Die Dialogklasse ist von CWnd abgeleitet, also braucht ShowWindow eigentlich nur einen Parameter und UpdateWindow gar keinen.
    Was ich nicht verstehe ist, wie ich hInstance initialisieren muss und ob ich das Fenster registrieren muss!? Was fehlt also noch im Code, damit sich beim clicken des Buttons ein Fenster öffnet?

    Gruß und Danke.


Anmelden zum Antworten