2tes Fenster???



  • Hallo allereseits!
    Da ich erst vor kurzem mit der Winapi programmierung begonnen habe, habe ich eine Frage die ihr mir hoffentlich beantworten könnts.
    Ich habe ein 2Fenster mit dem Ressourcen Editor erstellt.
    Nun habe ich in das Hauptfenster einen Button(ebnfalls über Ressourcen Editor) eingefügt!
    Jetzt würde ich gerne, dass das 2Fenster aufgeht wenn der Button geklickt wurde!

    BOOL CALLBACK MainProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
    {
       switch(Message)
       {
          case WM_COMMAND: 
    	switch(LOWORD(wParam))//Was haben wir geklickt??
    	{
    		case Testbutton:
                               //Hier würde ich gerne mein Fenster aufrufen
            }
    
      }
    }
    

    Falls es wichtig ist:
    Ich habe im 2ten Fenster nur einen Button welches das Fenster wieder schließt!

    Ich DANKE euch schon im Vorraus!

    P.s: Ich habe bereits im Forum gesucht aber nichts gefunden was mir helfen würde!



  • Was ist jetzt Dein Problem?

    Wenn ich dich richtig verstanden habe, fehlt Dir das:

    Zum Öffnen des Fensters

    hChild = CreateWindow bzw. CreateWindowEx..
    

    Zum schließen:

    DestroyWindow(hChild)
    

    Allerdings braucht das ChildWindow auch eine Callback-Funktion, in dem die Nachrichten des Buttons verarbeitet werden.



  • Ich weiß nicht wie ich das neue Fenster aufrufe...

    Ich schaue mir jetzt die 2 Befehle an...

    Hast du vll auch ein kleines BSP wo diese 2 Befehle verwendet werden?





  • Was ich da aber nicht ganz herauslesen konnte wie rufe ich das Fenster auf was ich bereits mit dem Ressourcen Editor erstellt habe??
    Da steht nur wie ich ein neues Fenster erstellen kann..

    Ich würde aber gerne nur das Fenster aufrufen was ich bereits erstellt habe...



  • Zum Umgang mit Ressourcen: ➡ http://pronix.linuxdelta.de/C/win32/win32_5.shtml

    Das Beispiel steht für modale Dialoge (mit "DialogBox()... EndDialog()). Moduslose Dialoge rufst Du mit CreateDialog() auf und gibst die Fenster-ID in den Parametern an. Beendet wird der dann mit DestroyWindow().



  • Hmmm...Danke aber da steht nichts von neuem Fenster aufrufen??
    Weist du wie es funkt??Es wäre sehr Hilfreich wenn du mir den Befehl sagen würdest...



  • WINAPI nooooobie schrieb:

    Hmmm...Danke aber da steht nichts von neuem Fenster aufrufen??
    Weist du wie es funkt??Es wäre sehr Hilfreich wenn du mir den Befehl sagen würdest...

    Wenn Du eine Fensterklasse neu erstellst (mit Ressourcen-Editor oder als Standard-Fenster), brauchst Du immer eine Callback-Funktion dazu. Die Befehle dazu sind CreateWindow, CreateWindowEx, CreateDialog oder DialogBox. Die letzten bei den nutzen intern auch die CreateWindowEx-Funktion.

    Borland-Hilfe schrieb:

    The CreateDialog macro creates a modeless dialog box from a dialog box
    template resource. The CreateDialog macro uses the CreateDialogParam function.

    HWND CreateDialog(

    HINSTANCE hInstance, // handle to application instance
    LPCTSTR lpTemplate, // identifies dialog box template name
    HWND hWndParent, // handle to owner window
    DLGPROC lpDialogFunc // pointer to dialog box procedure
    );

    Parameters

    hInstance
    Identifies an instance of the module whose executable file contains the dialog box template.

    lpTemplate
    Identifies the dialog box template. This parameter is either the pointer to a
    null-terminated character string that specifies the name of the dialog box
    template or an integer value that specifies the resource identifier of the
    dialog box template. If the parameter specifies a resource identifier, its
    high-order word must be zero and its low-order word must contain the identifier.
    You can use the MAKEINTRESOURCE macro to create this value.

    hWndParent
    Identifies the window that owns the dialog box.

    lpDialogFunc
    Points to the dialog box procedure. For more information about the dialog box procedure, see DialogProc.

    Jeder Dialog und jeder Button ist nichts anderes als ein Fenster und wird auch so aufgerufen. Schau Dir die Window-Styles an.



  • Habe das jetzt so gemacht aber es funktioniert nicht!

    Callback vom Neuen Fenster:

    BOOL CALLBACK Test(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    
        switch (message)
    	{
         case WM_INITDIALOG:
    		{
    			return TRUE;
    		}
        }
    }
    
    case Testbutton:
    CreateDialog(hInstance,MAKEINTRESOURCE(IDD_TesDialog),hwnd,Test);
    

    Wieso das?



  • "funktioniert nicht" gibts hier nicht.
    ohne präzisierung des fehlers gehts nicht.

    da fehlt zudem ein

    return FALSE;
    


  • Naja ich klicke zwar auf den Button aber es erscheint kein neues Fenster...



  • Hoi,

    1. Bist Du Dir sicher, dass Dein Button auch mit der symbolischen ID 'Testbutton' versehen ist?
    2. Welchen Wert bzw. wie initialisierst/definierst Du 'hInstance'?
    3. Deine Dialog-Funktion 'Test' ist falsch, siehe MSDN bzw. Hinweis von Xantus.



  • ZU:

    1. Ja bin mir sicher habe es nochmals kontrolliert!
    2. HINSTANCE hInstance;
      3)hwndGoto = CreateDialog(hinst,
      MAKEINTRESOURCE(DLG_GOTO),
      hwnd, (DLGPROC) GoToProc);
      ShowWindow(hwndGoto, SW_SHOW); ==>Habe es auch so probiert!Kommt aber trotzdem kein Fenster!


  • lol, also hat hInstance keinen definierten Anfangswert 😃 - gute Arbeit^^, bzw. wieso definierst Du 'hInstance' und verwendest 'hinst' 😕 ...vllt. mal die etwas 'gründlicher' posten.
    Lass den Cast "(DLGPROC)" weg. Wenn Du die Funktion richtig definiert hast, ist der Cast auch nicht nötig. Das verdeckt nur Fehler.

    Hast Du die Definition Deiner 'Test'-Funktion (oder mittlerweile wohl 'GoToProc'-Funktion) überarbeitet?



  • Doch hat es eh HINSTANCE hInstance=NULL;

    Inwiefern überarbeitet?



  • WINAPI nooooobie schrieb:

    Doch hat es eh HINSTANCE hInstance=NULL;

    Na *das* hast Du in Deinem vorherigen Post aber nicht geschrieben. Außerdem brauchst Du ja den Handle des Moduls in dem die Resource liegt, meistens das aktuelle Modul (dann verwende zur Initialisierung einfach GetModuleHandle(NULL) ).

    WINAPI nooooobie schrieb:

    Inwiefern überarbeitet?

    Überarbeitet in so fern, dass das:

    WINAPI nooooobie schrieb:

    Callback vom Neuen Fenster:

    BOOL CALLBACK Test(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    
        switch (message)
    	{
         case WM_INITDIALOG:
    		{
    			return TRUE;
    		}
        }
    }
    

    falsch ist.



  • Falls du das return FALSE meinst..
    Habe ich bereits ausgebessert...



  • Aber er kommt noch immer kein Fenster..



  • Man check den Rückgabewert, check GETLASTERROR, GETLASTERROR



  • @T2.0

    Sorry keiner wurde als Meister geboren...wenn du schon dann kannst es ja sicher auch zambringen das es läuft und hier posten...


Anmelden zum Antworten