Opengl erstellen mehrer Fenster
-
Hi@all
Ich will in einen Programm beliebig viele Fenster initalisieren
Für jedes Fenster erzeuge ich mit Createthread einen neuen Thread
Dieser ruft eine funktion:DWORD WINAPI CAVLTree_OpenGl::make_winapp(LPVOID dummy) { HINSTANCE hi = 0; char string[] = "Avl Tree OpenGl Ausgabe"; /* started WinApplikation */ //MEMORY_BASIC_INFORMATION mbi; //CAVLTree_OpenGl * pthis = ((CAVLTree_OpenGl*)dummy); //VirtualQuery( (PVOID)(make_winapp),&mbi,sizeof(mbi)); //hi = (HINSTANCE)mbi.AllocationBase; pthis->WinMain(hi, main_HInc, string, SW_MAXIMIZE); CloseHandle(pthis->m_hnd); pthis->m_hnd = NULL; return 0; } WPARAM WINAPI CAVLTree_OpenGl::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){ WNDCLASSEX windowClass; // Variable meiner Wnd Klasse MSG msg; // message bool done = false; // flag fr message loop(wenn app fertig(WM_QUIT) // MEMORY_BASIC_INFORMATION mbi; // VirtualQuery(this->WinMain,&mbi,sizeof(mbi)); // hInstance = (HINSTANCE)mbi.AllocationBase; /* ATTRIBUTE DER windowClass */ windowClass.cbSize = sizeof(WNDCLASSEX); // gr�se der WND struktur windowClass.style = CS_VREDRAW | CS_HREDRAW; // Neuzeichnen windowClass.lpfnWndProc = (WNDPROC)WndProc; // Funktions Zeiger definieren windowClass.cbClsExtra = 0; // keine Extra Bytes windowClass.cbWndExtra = 0; windowClass.hInstance = hInstance; // hInstance dieser Applikation denken!!!!!! windowClass.hIcon = LoadIcon(0, IDI_APPLICATION);// standard icon windowClass.hCursor = LoadCursor(0, IDC_ARROW); // standard WND Cursor laden windowClass.hbrBackground = 0; // kein Hintergrund brush windowClass.lpszMenuName = 0; // kein Men windowClass.lpszClassName = "Meine Klasse!"; // Name der WND Klasse windowClass.hIconSm = LoadIcon(0, IDI_WINLOGO); // kleines icon // registriere diese Klasse (gib adr. an windows) // ACHTUNG nur fir WNDCLASSEX nicht fr die alte WNDCLASS if (!RegisterClassEx(&windowClass)) return 0; /* ERSTELLEN DES FENSTERS */ m_hwnd = CreateWindowEx(NULL, "Meine Klasse!", "Avl Baum Opengl Ausgabe", WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_SYSMENU | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, 100, 100, // xy Koordinaten 400, 400, // h�e, breite NULL, // Anhaltspunkt to parent NULL, // Anhaltspunkt zum menue hInstance, // applikations instance NULL); // keine extra parameter /* wurde Fenster ohne Probleme erstellt */ if (!m_hwnd) return 0; done = false; /* Message Loop und rendering */ while (GetMessage(&msg,m_hwnd,0,0)) { TranslateMessage(&msg); // bersetze msg DispatchMessage(&msg); // msg abfertigen und Windows schicke render(); } return msg.wParam; }
if (!RegisterClassEx(&windowClass)) wenn ich ein weiter fenster initalisieren will bekomme ich 0 zurück
Brauc Ich für jedes fenster einen andere hInstanc und eine ander WndProc ??
-
spjoe schrieb:
if (!RegisterClassEx(&windowClass)) wenn ich ein weiter fenster initalisieren will bekomme ich 0 zurück
Brauc Ich für jedes fenster einen andere hInstanc und eine ander WndProc ??
Nein! Du darfst bei Win32 nur 1x pro Prozess RegisterClassEx(&windowClass) mit dem selben Namen(windowClass.lpszClassName) aufrufen. Da du ja pro Fenster in der Fenster Klasse nichts veränderst, musst du nur RegisterClassEx nur einmal aufrufen und kannst dann so viele Fenster damit erzeugen, wie du willst!!!
-
Vielen dank jetz funzt alles