Darstellung eines Windows Forms mit bestimmer Größe (some Errors)



  • Edit: Problem aus diesem Post veraltet. Neues Problem siehe unten.



  • du solltest mal gucken, ob du alle Klammern die du geöffnet hast, auch wieder geschlossen hast 😉



  • Andraste schrieb:

    Aber wenn ich das mache, bekomme ich sogar 16 Fehler ausgegeben. Woran liegts?

    Am Code.

    Die Anzahl der Fehler sagt übrigens nicht viel aus.

    Zeigst du jetzt den relevanten Teil des Codes? Oder muss sich jeder, der dir helfen will, das Buch kaufen und rumprobieren, welches Beispiel du gerade bearbeitest?



  • Hatte schon erwartet, dass die Frage nach dem Code kommt. Klar könnt ihr haben.
    Ich war mir nicht sicher ober der Callback mit in die int APIENTRY WinMain rein, oder außerhalb stehen muss.
    Bekomme mitlerweile viele Fehler wie "undeklarierter Bezeichner" wie in Z20 weiß aber einfach nich wie ichs richtig machen kann.
    Naja ... bin dankbar für jeden Hinweis, den ihr findet. Wieder mal Dank im Voraus 🙂

    #include "StdAfx.h"
    
    const int ultris_nettobreite = 360;
    const int ultris_nettohoehe  = 520;
    int ultris_bruttobreite;
    int ultris_bruttohoehe;
    HINSTANCE ultris_instance;
    HWND ultris_window;
    HMENU ultris_menu;
    
    int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                         LPSTR lpCmdLine, int nCmdShow)
    {
    	MSG msg;
    	HACCEL acc;
    	WNDCLASSEX wcx;
    	wcx.cbSize = sizeof( wcx);
    	wcx.lpszClassName = TEXT( "Ultris");
    	wcx.lpfnWndProc = ultris_windowhandler;
    	wcx.style = CS_VREDRAW | CS_HREDRAW;
    	wcx.hInstance = hInst;
    	wcx.hIcon = LoadIcon (hInst,MAKEINTRESOURCE(IDI_MAIN));
    	wcx.hIconSm = LoadIcon(hInst,MAKEINTRESOURCE(IDI_MAIN));
    	wcx.hCursor = LoadCursor(NULL,IDC_ARROW);
    	wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
    	wcx.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
    	wcx.cbClsExtra = 0;
    	wcx.cbWndExtra = 0;
    
    	if(!RegisterClassEx(&wcx))
    		return 0;
    	acc = LoadAccelerators(hInst,MAKEINTRESOURCE(IDR_ACCEL));
    	ultris_bruttohoehe = ultris_nettohoehe
    					+ 2*GetSystemMetrics(SM_CYSIZEFRAME)
    					+ GetSystemMetrics(SM_CYMENU)
    					+ GetSystemMetrics(SM_CYCAPTION);
    	ultris_bruttobreite = ultris_nettobreite
    					+ 2*GetSystemMetrics(SM_CXSIZEFRAME);
    	ultris_window = CreateWindowEx(0,TEXT("Ultris"),TEXT("Ultris"),
    						WS_OVERLAPPEDWINDOW & ~WS_MAXIMIZEBOX,
    						CW_USERDEFAULT,CW_USERDEFAULT,
    						ultris_bruttobreite,ultris_bruttohoehe,
    								NULL,NULL,hInst,NULL);
    	if(!ultris_window)
    		return 0;
    	MoveWindow(ultris_window,
    			(GetSystemMetrics(SM_CXSCREEN)-ultris_bruttobreite)/2,
    			(GetSystemMetrics(SM_CYSCREEN)-ultris_bruttohoehe)/2,
    				ultris_bruttobreite, ultris_bruttohoehe, TRUE);
    	ShowWindow(ultris_window,nCmdShow);
    	ultris_instance = hInst;
    	ultris_menu = GetMenu(ultris_window);
    	while(TRUE)
    	{
    		if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
    		{
    			if(GetMessage(&msg,NULL,0,0) == 0)
    				return 0; // Message ist WM_QUIT
    			if(TranslateAccelerator(ultris_window,acc,&msg) == 0)
    			{
    				TranslateMessage(&msg);
    				DispatchMessage(&msg);
    			}
    		}
    		else
    		{
    			// Hier können wir uns nun um das Spiel kümmern
    		}
    	}
    
    LRESULT CALLBACK ultris_windowhandler(HWND hWnd, UINT msg,
    								WPARAM wParam, LPARAM lParam)
    	{
    		switch(msg)
    		{
    		case WM_COMMAND:
    			switch(LOWORD(wParam))
    			{
    			case IDM_EXIT:
    				PostMessage(hWnd, WM_CLOSE, 0, 0);
    				return 0;
    			}
    			break;
    			case WM_GETMINMAXINFO:
    				((MINMAXINFO *)lParam)->ptMinTrackSize.x = ((MINMAXINFO) *)lParam)->ptMaxTrackSize.x = ultris_bruttobreite;
    				((MINMAXINFO *)lParam)->ptMinTrackSize.y = ((MINMAXINFO) *)lParam)->ptMaxTrackSize.y = ultris_bruttohoehe;
    				return 0;
    			case WM_DESTROY:
    				PostQuitMessage(0);
    				return 0;
    		}
    	return DefWindowProc (hWnd, msg, wParam, lParam);
    	}
    } // Ende der WinMain
    


  • Bei der Fehlermeldung im Zusammenhang mit vorkompilierten Headern kann es auch helfen, einmal "Erstellen -> Bereinigen -> Alles neu Erstellen" zu betätigen. Manchmal bleibt in de Header-Kompilaten irgendwelcher Scheiss hängen und der Compiler merkt nicht, dass was geändert wurde. Oder die orkompilierten Header gleich ganz abschalten.



  • Ja, hab ich schon gemacht 🙂 Aber wie sich mittlerweile herausgestellt hat, scheinen die Fehler an anderen Stellen zu liegen 😛



  • Nimm die Windowproc komplett raus aus der WinMain. Wer hat dir denn sowas erzählt?



  • wie gesagt ... der code (so wie er da steht) kommt aus nem tut 😕
    aber ok hab ihn rausgenommen

    jez bekomm ich noch folgende 8 fehler. könnte mir da auch wer bei helfen?

    c:\...\ultris.cpp(22) : error C2065: 'hInst' : nichtdeklarierter Bezeichner
    c:\...\ultris.cpp(22) : error C2440: '=' : 'int' kann nicht in 'struct HINSTANCE__ *' konvertiert werden
            Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    c:\...\ultris.cpp(23) : error C2065: 'IDI_MAIN' : nichtdeklarierter Bezeichner
    c:\...\ultris.cpp(27) : error C2065: 'IDR_MENU' : nichtdeklarierter Bezeichner
    c:\...\ultris.cpp(33) : error C2065: 'IDR_ACCEL' : nichtdeklarierter Bezeichner
    c:\...\ultris.cpp(42) : error C2065: 'CW_USERDEFAULT' : nichtdeklarierter Bezeichner
    c:\...\ultris.cpp(52) : error C2440: '=' : 'int' kann nicht in 'struct HINSTANCE__ *' konvertiert werden
            Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
    c:\...\ultris.cpp(74) : error C2601: 'ultris_windowhandler' : Lokale Funktionsdefinitionen sind unzulaessig
    

    EDIT: Wies scheint ist dieser Code von Grund auf widersprüchlich und falsch ^^ ich schau, ob ich was besseres find.



  • Andraste schrieb:

    c:\...\ultris.cpp(42) : error C2065: 'CW_USERDEFAULT' : nichtdeklarierter Bezeichner
    

    Ist zwar nur eine sehr kleine Hilfe aber:
    Das müsste soviel ich weiss CW_USEDEFAULT heissen, ohne R.



  • Ou ja ... ich hab das ganze jetzt auf einen Fehler reduzieren können xD

    ultris.cpp(74) : error C2601: 'ultris_windowhandler' : Lokale Funktionsdefinitionen sind unzulaessig
    

Anmelden zum Antworten