Log-Fenster mit Eingabezeile als separates Toolwindow



  • Ja jetzt hast es näher erklärt, und?
    Ne Lösung für dein Problem mit der Kommunikation wurde dir doch genannt, oder was wilst du jetzt?

    schirrmie







  • Ok, aber erstens muss ich das zweite Window richtig erstellen. Leider klappt das nicht.

    cmd_win(HINSTANCE hinst, HWND hparent_, int x, int y, int w, int h) {
            WNDCLASSEX wc;
    	wc.lpszClassName = L"CommandWindowClassName";
    	wc.lpfnWndProc = CWP;
    	wc.style = CS_NOCLOSE;
    	wc.hInstance = hinst;
    	wc.hIcon = LoadIcon(0, IDI_APPLICATION);
    	wc.hIconSm = 0;
    	wc.hCursor = LoadCursor(0, IDC_ARROW);
    	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    	wc.lpszMenuName = 0;
    	wc.cbSize = sizeof(wc);
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	if(!RegisterClassEx(&wc)) {
    		MessageBox(0, L"Registration of the command window class failed", L"Error", MB_OK);
    		return;
    	}
    
    	RECT client;
    	client.bottom = 0;
    	client.left = 0;
    	client.right = w;
    	client.top = h;
    	AdjustWindowRectEx(&client, WS_OVERLAPPEDWINDOW, false, WS_EX_OVERLAPPEDWINDOW);
    	hwnd_ = CreateMDIWindow(
    		L"CommandWindowClassName", 
    		L"Command prompt", 
    		MDIS_ALLCHILDSTYLES | WS_EX_TOOLWINDOW, 
    		x, y, 
    		w, h, 
    		hparent_, 
    		hinst, 
    		0);
    	if (!hwnd_) {
    		MessageBox(0, L"Creation of the command window failed", L"Error", MB_OK); //hier stürzt das Programm ab
    		return; 
    	}
    }
    
    LRESULT CALLBACK CWP(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    	/*switch (uMsg) {									// Check for windows messages
    
    	was soll ich hier schreiebn?	
    	}*/
    	// Pass all unhandled messages to DefMDIChildProc
    	return DefMDIChildProc(hwnd, uMsg, wParam, lParam);
    }
    


  • LRESULT CALLBACK CWP(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
        /*switch (uMsg) {                                    // Check for windows messages
           
        was soll ich hier schreiebn?   
        }*/
        // Pass all unhandled messages to DefMDIChildProc
        return DefMDIChildProc(hwnd, uMsg, wParam, lParam);
    }
    

    Wie wär's denn mit sowas?

    boof fPromptFocussed;
    //...
    case WM_COMMAND:
    //...
        case WM_SETFOCUS:
            //...
            fPromptFocussed = trus;
            //... 
        case WM_ENTER :
            //...
            if(fPromptFocussed) {
                //...
                PostThreadMessage(...) // oae.
                //... 
            }
            //...
            fPromptFocussed = false;
    

    Grüsse

    *this



  • Gast++, ich fürchte, das sei nicht das größte Problem. Etwas ist falsch mit dem Kreieren. ⚠



  • Zdravko schrieb:

    Gast++, ich fürchte, das sei nicht das größte Problem. Etwas ist falsch mit dem Kreieren. ⚠

    Ist

    HWND hParent_
    

    denn schon valide wenn cmd_win gerufen wird?
    "Wer" ist denn hParent_ eigentlich?

    Grüsse

    *this



  • So sieht das HauptWindow:

    WNDCLASSEX wc;
    
    	wc.lpszClassName = classname;//bekannt
    
    	wc.lpfnWndProc = p;//bekannt
    
    	wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW;
    
    	wc.hInstance = hinstance_;//aus der WinMain
    
    	wc.hIcon = LoadIcon(0, IDI_APPLICATION);
    
    	wc.hIconSm = 0;
    
    	wc.hCursor = LoadCursor(0, IDC_ARROW);
    
    	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    
    	wc.lpszMenuName = 0;
    
    	wc.cbSize = sizeof(wc);
    
    	wc.cbClsExtra = 0;
    
    	wc.cbWndExtra = 0;
    
    	if(!RegisterClassEx(&wc)) {
    
    		MessageBox(0, L"Registration of the main window class failed", L"Error", MB_OK);
    
    		return;
    
    	}
    
    	RECT client;
    
    	client.bottom = 0;
    
    	client.left = 0;
    
    	client.right = w;//bekannt
    
    	client.top = h;//bekannt
    
    	AdjustWindowRectEx(&client, WS_OVERLAPPEDWINDOW, false, WS_EX_OVERLAPPEDWINDOW);
    
    	hParent_ = CreateWindowEx(
    
    		WS_EX_OVERLAPPEDWINDOW,
    
    		classname,					// name of window class 
    
    		title,						// title-bar string 
    
    		WS_OVERLAPPEDWINDOW,		// top-level window 
    
    		0,							// horizontal position 
    
    		0,							// vertical position 
    
    		client.right,				// width 
    
    		client.top,					// height 
    
    		0,							// no owner window 
    
    		0,							// use class menu 
    
    		hinstance_,					// handle to application instance 
    
    		0);							// no window-creation data
    


  • Kann mir jemand helfen? Besser wäre es, wenn die ganze Code neu geschrieben wird.



  • Zdravko schrieb:

    Besser wäre es, wenn die ganze Code neu geschrieben wird.

    Dann tu's doch...

    greetz, Swordfish



  • Swordfish schrieb:

    Zdravko schrieb:

    Besser wäre es, wenn die ganze Code neu geschrieben wird.

    Dann tu's doch...

    greetz, Swordfish

    Ok, dann tue ich es so. 😡



  • Zdravko schrieb:

    Swordfish schrieb:

    Zdravko schrieb:

    Besser wäre es, wenn die ganze Code neu geschrieben wird.

    Dann tu's doch...

    greetz, Swordfish

    Ok, dann tue ich es so. 😡

    ??? Weiss nicht was das bringen sollte; die Struktur der Codes ist imo korrekt. Fraglich ist nur wann die Fenster instanziiert werden und das lässt sich aus dem Code nich ersehen; wenn hInstance_ schon erzeugt ist ist's imo wirklich nur ein Problem mit dem Message-Dispatching.
    Breakpoint drauf setzen!

    Grüsse

    *this



  • Hmm, also erstens erstelle ich mit CreateWindowEx das Main Window. Dann erstelle ich mittels CreateMDIWindow das 2 Window. Dannach wird die Translate/Dispatch Sache durchgeführt! Wie schon gesagt - die Fehlermeldung ist beim:

    hwnd_ = CreateMDIWindow(
            L"CommandWindowClassName", 
            L"Command prompt", 
            MDIS_ALLCHILDSTYLES | WS_EX_TOOLWINDOW, 
            x, y, 
            w, h, 
            hparent_, 
            hinst, 
            0);
        if (!hwnd_) {
            MessageBox(0, L"Creation of the command window failed", L"Error", MB_OK); //hier stürzt das Programm ab
            return; 
        }
    


  • Zdravko schrieb:

    Hmm, also erstens erstelle ich mit CreateWindowEx das Main Window. Dann erstelle ich mittels CreateMDIWindow das 2 Window. Dannach wird die Translate/Dispatch Sache durchgeführt! Wie schon gesagt - die Fehlermeldung ist beim:

    hwnd_ = CreateMDIWindow(
            L"CommandWindowClassName", 
            L"Command prompt", 
            MDIS_ALLCHILDSTYLES | WS_EX_TOOLWINDOW, 
            x, y, 
            w, h, 
            hparent_, 
            hinst, 
            0);
        if (!hwnd_) {
            MessageBox(0, L"Creation of the command window failed", L"Error", MB_OK); //hier stürzt das Programm ab
            return; 
        }
    

    Momentchen bitte mal - wo ist denn Dein MDI CLient Fenster?
    Ich zähl da 2.

    - Den Hauptrahmen(parent = 0)
    - Das MDI Child

    3 sollten's aber sein; Du kannst afaik das MDI Child nicht einfach in den Hauptrahmen legen!

    Grüsse

    *this



  • Gast++ schrieb:

    Zdravko schrieb:

    Hmm, also erstens erstelle ich mit CreateWindowEx das Main Window. Dann erstelle ich mittels CreateMDIWindow das 2 Window. Dannach wird die Translate/Dispatch Sache durchgeführt! Wie schon gesagt - die Fehlermeldung ist beim:

    hwnd_ = CreateMDIWindow(
            L"CommandWindowClassName", 
            L"Command prompt", 
            MDIS_ALLCHILDSTYLES | WS_EX_TOOLWINDOW, 
            x, y, 
            w, h, 
            hparent_, 
            hinst, 
            0);
        if (!hwnd_) {
            MessageBox(0, L"Creation of the command window failed", L"Error", MB_OK); //hier stürzt das Programm ab
            return; 
        }
    

    Momentchen bitte mal - wo ist denn Dein MDI CLient Fenster?
    Ich zähl da 2.

    - Den Hauptrahmen(parent = 0)
    - Das MDI Child

    3 sollten's aber sein; Du kannst afaik das MDI Child nicht einfach in den Hauptrahmen legen!

    Was ich zitiert habe, ist genau das MDI Child.
    Also mein Vorgang:
    1. Erstellen des Hauptfensters
    2. Erstellen des MDI Client Fensters - hier ist das Problem.
    Warum?



  • "MDI Child" != "MDI Client" !!!

    Das muss agfaik so aussehen:

    Hauptfenster => "MDI Client" => "MDI Child"

    Du brauchst 3; nicht 2.
    😉

    Grüsse

    *this

    P.S.: Hast Du nen Petzold?



  • Ooops! Was ist das "MDI Client" ? Und wie erstelle ich so was?

    P.S. Was ist Petzold? 😕



  • Zdravko schrieb:

    Ooops! Was ist das "MDI Client" ? Und wie erstelle ich so was?
    P.S. Was ist Petzold? 😕

    Charles Petzold
    DER Autor DES Buches über Win32 Programmierung.

    Das hier
    http://www.joachimrohde.com/cms/xoops/modules/articles/article.php?id=90
    ist glaube ich eine nette Kurzeinführung in das Thema.

    Grüsse

    *this

    P.S.: Deshalb wars wichtig zu schauen wie und wo hParent_ usw erzeugt werden!



  • Okay, ich schaue mal nach...


Anmelden zum Antworten