Mehrere WinProc



  • Hallo!
    Ich möchte von meinem Hauptfenster aus noch ein paar "nebenfenster" aufmachen. Is es möglich, dass diese "nebenfenster" eine eigene WinProc-funktion haben oder muss ich die ereignisse alle im hauptfenster bearbeiten (was mir noch einfallen würde wäre eine eigene funktion mit den selben parametern zu schreiben, welche jedes mal von der WinProc aufgerufen wird..)


  • Mod

    Nein! Grndsätzlich kannst Du beliebige Fensterklassen registrieren und jede kann Ihre eigene WndProc haben.
    Theoretisch kannst Du auich nachträglich Fenster subclassen und dadurch eigene/neue WndProc's zuordnen.



  • ich hab mich gespielt, brings aber nicht zusammen, dass ich 2 fenster aufmach...

    HWND createObjectEditor (HINSTANCE hInstance, HWND hwnd)
    {
    	WNDCLASSEX wc;
    	wc.cbSize        = sizeof(WNDCLASSEX);
        wc.style         = 0;
        wc.lpfnWndProc   = OEWndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszClassName = NAME_OE;
    
    	RegisterClassEx(&wc);
    
    	objekteditor=CreateWindowEx(
            WS_EX_CLIENTEDGE,
            NAME_OE,
            "ObjektEditor",
            WS_OVERLAPPEDWINDOW | WS_CHILD,
            CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768,
            hwnd, NULL, hInstance, NULL);
    
    	if(objekteditor == NULL)
    		MessageBox(NULL, NAME_OE, "ASDAS", MB_ICONEXCLAMATION | MB_OK);
    	ShowWindow (objekteditor, SW_HIDE);
    	return objekteditor;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        WNDCLASSEX wc;
        HWND hwnd;
        MSG Msg;
    
        wc.cbSize        = sizeof(WNDCLASSEX);
        wc.style         = 0;
        wc.lpfnWndProc   = WndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszClassName = "-----------";
    
        wc.hIcon  = LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON));
        wc.hIconSm  = (HICON)LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_MYICON), IMAGE_ICON, 16, 16, 0);
    
        if(!RegisterClassEx(&wc))
        {
            MessageBox(NULL, "Window Registration Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    	hInst=hInstance;
    
        hwnd = CreateWindowEx(
            WS_EX_CLIENTEDGE,
            "-----------------",
            "------------------------",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, 1024, 768,
            NULL, NULL, hInstance, NULL);
        if(hwnd == NULL)
        {
            MessageBox(NULL, "Window Creation Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    	//InitCommonControls();
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    	createObjectEditor(hInstance, hwnd);
    
        while(GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        return (int)Msg.wParam;
    }
    

    die MEssagebox mim namen kommt leider 😞

    bzw die namen nicht beachen, die wurden bearbeitet


Anmelden zum Antworten