RegisterClass(&wc)



  • Hey hab da im mom das Problem das mein Fenster gleich kaputt geht aber ads programm noch weiter besteht: hier der

    #include <windows.h>
    //#include "MainFrame.h"
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    const char szAppName[] = "Application";
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    					PSTR szCmdLine, int iCmdShow)
    {
    
    	MSG msg;
    	HWND hWnd;
    	WNDCLASS wc;
    
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    	wc.hInstance = hInstance;
    	wc.lpfnWndProc = WndProc;
    	wc.lpszClassName = szAppName;
    	wc.lpszMenuName = NULL;
    	wc.style = CS_HREDRAW | CS_VREDRAW;
    
    	RegisterClass(&wc);
    
    	if(!RegisterClass(&wc))
    	{
    		MessageBox(NULL,"unable RegisterClass", szAppName, MB_OK | MB_ICONERROR);
    		return 0;
    	}
    
    	hWnd = CreateWindow(NULL, szAppName, 
    						WS_OVERLAPPEDWINDOW,
    						CW_USEDEFAULT, CW_USEDEFAULT, // x und y Posi auf Monitor
    						CW_USEDEFAULT, CW_USEDEFAULT, // Fensterbreite (x und y)
    						NULL, NULL, 
    						hInstance, 
    						NULL);
    
    	ShowWindow(hWnd, iCmdShow);
    	UpdateWindow(hWnd);
    
    	while (GetMessage(&msg, NULL, 0, 0))
    	{
    		TranslateMessage(&msg);
    			if(!TranslateMessage(&msg))
    			{
    				MessageBox(NULL, "unable TranslateMessage", szAppName, MB_OK |MB_ICONERROR);
    				return 0;
    
    			} //end if
    
    		DispatchMessage(&msg);
    			if(!DispatchMessage(&msg))
    			{
    				MessageBox(NULL, "unable DispatchMessage", szAppName, MB_OK|MB_ICONERROR);
    				return 0;
    			} //end if
    			} //end while
    
    	return msg.wParam;
    } //end WinMain
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    	switch(message)
    	{
    	case WM_DESTROY:
    
    			PostQuitMessage(0);
    			return (0);
    
    	} //end switch(message)
    
    	return DefWindowProc(hWnd, message, wParam, lParam);
    } //end WndProc
    

    also es liegt daran das die WNDCLASS nciht registriert werden kann, aber ich hab keinen LPan warum und was ich flasch gemacht haben koennte.

    Danke schonmal



  • Stellst du diese Frage nun in jedem Forum, das du finden kannst?
    Siehe:
    http://www.winapi.net/forum/viewtopic.php?t=985&sid=994a05125f664c61caa8a3efa73fc05b

    Du kannst eine gleiche WNDCLASS nur einmal registrieren, du machst es jedoch zweimal und fragst erst bei der zweiten den Rückgabewert ab! -> kann nicht funktionieren!



  • also 1ten`s: ich habe das hier rein geschrieben, da ich auf dem Board n paar inkompetente Beiträge gelesen habe..

    2ten`s: ich mein ich trag ja shcon ne Brille, aber ich weiß echt nicht wo ich da die WNDCLASS 2mal registriert haben soll?

    das:

    if(!RegisterClass(&wc)) // <---- if not******
    	{
    		MessageBox(NULL,"unable RegisterClass", szAppName, MB_OK | MB_ICONERROR);
    		return 0;
    	}
    

    das is nur ne Abfrage , hat mit dem Registrieren selbst ncihts zutun weil da ein ! <-- davor ist.. *if not*

    ausserdem ändert es ncihts an der Tatsache das das Window nicht dargestellt wird aber der Prozess funktioniert/läuft.

    Gruss



  • Was ist dann das? 😕

    RegisterClass(&wc); <-- 1 mal
    
        if(!RegisterClass(&wc)) <-- 2mal
        { 
            MessageBox(NULL,"unable RegisterClass", szAppName, MB_OK | MB_ICONERROR); 
            return 0; 
        }
    

    Soweit ich zählen kann(siehe Code): 2 mal!

    Zudem: Wenn es nicht richtig registriert wird, hätte es etwas damit zu tun!



  • .Lukas schrieb:

    das is nur ne Abfrage , hat mit dem Registrieren selbst ncihts zutun weil da ein ! <-- davor ist.. *if not*

    Das ist ein Funktionsaufruf, egal was davor steht. Wenn du da nur eine Abfrage machen willst, musst du den Rückgabewert vom ersten Aufruf zwischenspeichern.



  • also 1ten`s: ich habe das hier rein geschrieben, da ich auf dem Board n paar inkompetente Beiträge gelesen habe..

    2ten`s: ich mein ich trag ja shcon ne Brille, aber ich weiß echt nicht wo ich da die WNDCLASS 2mal registriert haben soll?

    das:

    if(!RegisterClass(&wc)) // <---- if not******
    	{
    		MessageBox(NULL,"unable RegisterClass", szAppName, MB_OK | MB_ICONERROR);
    		return 0;
    	}
    

    das is nur ne Abfrage , hat mit dem Registrieren selbst ncihts zutun weil da ein ! <-- davor ist.. *if not*

    ausserdem ändert es ncihts an der Tatsache das das Window nicht dargestellt wird aber der Prozess funktioniert/läuft.

    Gruss



  • Der erste Parameter von CreateWindow muss der Klassenname sein. Bei dir steht da NULL.



  • danke, jetzt gehts



  • .Lukas schrieb:

    das is nur ne Abfrage , hat mit dem Registrieren selbst ncihts zutun weil da ein ! <-- davor ist.. *if not*

    Ich Troll mich weg, darüber solltest du Unbedingt nochmal Nachdenken, btw. Nachlesen, sonst wirst du beim "proggen" nicht weit kommen. Wenn die Funktion Aufgerufen wird, liefert Sie einen Rückgabewert, dieser wird mit if (!.. geprüft.
    Daher, du registrierst zweimal, du übersetzt zweimal die Message und schickst diese auch zweimal auf Reisen.

    ➡ Lernen ➡ dazu lernen ➡ Programmieren 👍
    Alles andere ist proggen 👎


Anmelden zum Antworten