Hilfe bei Kinderfenster



  • Ich möchte bei meinem Fenster ein zweites Fenster(Childwindow) aufrufen bzw schließen können, bloß komme ich leider nicht weiter bitte um Hilfe 🙂

    case WM_KEYDOWN:
    		switch (wParam) {
    		case VK_ESCAPE:
    			if (f_menu angezeigt ) {
    				DestroyWindow(f_menu);
    				UpdateWindow(hwnd);
    			}
    			else ShowWindow(f_menu, SW_SHOW);
    			UpdateWindow(f_menu);
    			break;
    		default:
    			break;
    		}
    		return 0;
    

    Danke im Voraus!



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum WinAPI verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • 1. Ist WinAPI
    2. Wenn f_menu erstellt wurde (CreateWindow/CreateDialog) und nicht modal ist bzw. sich nicht modal verhalten soll, dann darfst du es nicht zerstören, sondern mit ShowWindow nur ein- und ausblenden. Eine Statusvariable ist nicht nötig, dafür gibt es IsWindowVisible .

    case VK_ESCAPE:
      if (IsWindowVisible(f_menu))
        ShowWindow(f_menu, SW_HIDE);
      else
        ShowWindow(f_menu, SW_SHOW);
      break;
    


  • Danke, wenn man es weis easy 😃

    EDIT: Kann ev jemand ein gutes deutsches Tutorial für Nachrichtenverarbeitung zwischen 2 Prozessen inerhalb eines Programmes empfehlen also zb:

    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);  SENDET Nachricht N_BEFEHL mit Parametern
    LRESULT CALLBACK WndProc2(HWND, UINT, WPARAM, LPARAM); EMPFÄNGT und liest aus
    


  • Das mit den Nachrichten habe ich hinbekommen.
    Nächste Problem: Ich habe ein HWND der Klasse Textbox diese ist ES_MULTILINE, diese Textbox ist meine "Console" hier lasse ich meine Ergebnisse pro Zeile ausgeben. Da ich den Text nicht immer Leeren möchte sondern mit anhängen habe ich folgendes versucht: SetWindowText(tb_edit, buffer + "Hallo \t\n"); im buffer habe ich vorher GetWindowText eingelesen hier mal den ganzen Codeabschnitt:

    char *buffer = NULL;
    			int i;
    			i = GetWindowTextLength(tb_edit);
    			buffer = new char[i];
    			GetWindowText(tb_edit, buffer, i + 1);
    			SetWindowText(tb_edit, buffer + "Hallo \t\n");
    			UpdateWindow(tb_edit);
    

    Der Compiler sagt: der Ausdruck muss einen ganzzahligen Enumerationstyp oder einen Enumerationstyp ohne Bereichseinschränkung aufweisen

    habe anschließend versucht:

    char *buffer = NULL;
    			int i; string text,textneu = "Test";
    			i = GetWindowTextLength(tb_edit);
    			buffer = new char[i];
    			GetWindowText(tb_edit, buffer, i + 1); 
    			text = buffer + textneu; 
    			SetWindowText(tb_edit, text);
    			UpdateWindow(tb_edit);
    

    selber Fehler. Bitte um Hilfe :)ev auch eine Spmplere lsng.

    Edit: wollte schonmal weiter machen, die lsg mit dem ESC hat geklappt, allerdings sobald ich die Textbox oder den Button im Menu anklicke klappt dies nicht mehr, auch wenn ich das Hauptfenster anschließend auswähle.