Hinstance



  • Ist es möglich eine hinstance aus einer Methode aus einer klasse zu bekommen die nicht statisch ist?

    MEMORY_BASIC_INFORMATION mbi;
            VirtualQuery(this->NewWindow,&mbi,sizeof(mbi));
    	hInstance = (HINSTANCE)mbi.AllocationBase;
    

    geht nicht

    thx



  • ich weis nicht genau was du machst aber so vielleicht

    HINSTANCE hInstance = (HINSTANCE)GetModuleHandle(NULL);
    

    http://msdn.microsoft.com/library/en-us/dllproc/base/getmodulehandle.asp



  • Hilft mir leider nicht brauch wirklich die Hinstance einer bestimmten funktion;
    Das Problem ist das die Funktion keine Globale funktion ist sondern eine Methode einer Klasse. make_winapp ist static! Oder kann mir jemand sagen wie ich mehrer Wnds RegisterClassEx(&windowClass)) registrieren kann? Ich meine pro Fenster ein Thread wären

    void CAVLTree_OpenGl::_init_window(){
    
    	m_hnd = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)make_winapp, this, 0, NULL);
    }
    
    DWORD WINAPI CAVLTree_OpenGl::make_winapp(LPVOID dummy) {
    	HINSTANCE hi = 0;
    	char string[] = "Avl Tree OpenGl Ausgabe";
    
    	CAVLTree_OpenGl * pthis = ((CAVLTree_OpenGl*)dummy);
    
    	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));//Dss geht Nicht
    //	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; //BEKOMME beim erstellen eines 2 Fensters 0 Zurück!!!!
    
    	/* 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;
    }
    

Anmelden zum Antworten