Edit-Childs werden nicht angezeigt?



  • Moin,

    ich habe ein (noch) einfaches programm mit einigen edit-childs geschrieben.

    meine edits werden aber nicht angezeigt, zur sicherheit habe ich ein button-child eingefügt - der funktioniert.

    Da ich meinen fehler nicht finde, wollte ich einen von euch bitten, sich das mal anzusehen.

    Euer ItsNotYou

    P.S.: ich habe hier mal ein paar defines, funktionen usw. rausgekürzt - es gibt keine formalen fehler beim kompilieren.

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <process.h>
    
    [...]
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
    {
    	HWND hWnd;
    	MSG msg;
    	WNDCLASS wc;
    
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
    	wc.lpfnWndProc = WndProc;
    	wc.lpszClassName = szAppName;
    	wc.hInstance = hInstance;
    	wc.lpszMenuName = NULL;
    	wc.style = CS_HREDRAW | CS_VREDRAW;
    
    	if(!RegisterClass(&wc))
    	{
    		FehlerKritisch("Klasse kann nicht registriert werden");
    	}
    
    	hWnd = CreateWindow(szAppName, szAppName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    
    	if(!hWnd)
    	{
    		FehlerKritisch("Fenster kann nicht erstellt werden");
    	}
    
    	ShowWindow(hWnd, iCmdShow);
    	UpdateWindow(hWnd);
    
    	while(GetMessage(&msg, NULL, 0, 0))
    	{
    		TranslateMessage(&msg);
    		DispatchMessage(&msg);
    	}
    
    	return msg.wParam;
    }
    
    //---------------------------------------------------------------
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	static HWND hChatFenster;
    	static HWND hAktion;
    	static HWND hAnwesend;
    	static HWND hEingabe;
    	static HWND hSenden;
    
    	switch(message)
    	{
    	case WM_CREATE:
    		{
    			hChatFenster = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    			if(!hChatFenster)
    			{
    				Fehler("hChatFenster nicht erstellt", hWnd);
    			}
    
    			hAktion = CreateWindow("edit", NULL, WS_CHILD | WS_VISIBLE /*| ES_SINGLELINE*/, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    			hAnwesend = CreateWindow("edit", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    			hEingabe = CreateWindowEx(WS_EX_CLIENTEDGE, "edit", NULL, WS_CHILD | WS_VISIBLE /*| ES_SINGLELINE*/, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    			hSenden = CreateWindow("button", "Senden", WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, hWnd, NULL, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
    
    			return(0);
    		}
    	case WM_SIZE:
    		{
    			MoveWindow(hChatFenster, 5, 5, (2/3) * (LOWORD(lParam)) - 15, (HIWORD(lParam)) - 40, TRUE);
    			MoveWindow(hAktion, (2/3) * (LOWORD(lParam)) + 10, 5, (1/3) * (LOWORD(lParam)) - 15, 25, TRUE);
    			MoveWindow(hAnwesend, (2/3) * (LOWORD(lParam)) + 10, 35, (1/3) * (LOWORD(lParam)) - 15, (HIWORD(lParam)) - 40, TRUE);
    			MoveWindow(hEingabe, 5, (HIWORD(lParam)) - 30, (2/3) * (LOWORD(lParam)) - 75, 25, TRUE);
    			MoveWindow(hSenden, 5, (HIWORD(lParam)) - 30, 60, 25, TRUE);
    
    			return(0);
    		}
    	case WM_DESTROY:
    		{
    			PostQuitMessage(0);
    			return(0);
    		}
    	}
    
    	return DefWindowProc(hWnd, message, wParam, lParam);
    }
    
    //---------------------------------------------------------------
    
    void FehlerKritisch(char Fehlermeldung[100])
    {
    	char Fehler[300];
    
    	wsprintf(Fehler, "%s hat folgenden Fehler festgestellt und muss beendet werden:\n\n%s", szAppName, Fehlermeldung);
    
    	MessageBox(NULL, Fehler, "Kritischer Fehler", MB_ICONERROR | MB_OK);
    
    	exit(-1);
    }
    
    //---------------------------------------------------------------
    
    void Fehler(char Fehlermeldung[100], HWND hWnd)
    {
    	char Fehler[300];
    
    	wsprintf(Fehler, "%s hat einen schweren Fehler entdeckt:\n\n%s\n\nWenn sie %s nicht beenden können\nunter Umstände weitere Fehler entstehen.\n\n%s beenden?", szAppName, Fehlermeldung, szAppName, szAppName);
    
    	int iAntwort = MessageBox(NULL, Fehler, "Schwerer Fehler", MB_ICONERROR | MB_YESNO);
    
    	if(iAntwort == IDYES)
    	{
    		//beenden
    	}
    	else if(iAntwort == IDNO)
    	{
    		return;
    	}
    	else
    	{
    		//beenden
    	}
    
    	//beenden
    
    	return;
    }
    


  • hi,
    Ansich kann ich auf die stelle auch kein Fehler finden! Aber vielleicht läuft irgendwas mit deinem WM_SIZE schief versuch doch mal gleich bei CreateWindow die größe mit anzugeben! Hat das überhaupt einen grund warumg du das so machst?
    MfG schirrmie



  • schirrmie schrieb:

    Hat das überhaupt einen grund warumg du das so machst?

    ja, klar.. so macht man das, wenn man auf eine grössenänderung des fensters reagieren will.. sieht ein bisschen doof aus, wenn das child immer gleich gross bleibt.. 😉



  • (2/3) wird, da du mit int Werten arbeitest offensichtlich zu 0, also solltest du bei der Berechnung z.B. erst mit double-Werten arbeiten und erst dann in int casten. Oder so:

    2*(LOWORD(lParam))/3
    

Anmelden zum Antworten