Problem mit Popup-Fenstern



  • Hi,
    wenn ich ein Popup-Fenster erstelle und dann draufklicke, kann ich ein paar Sekunden nicht mehr klicken bzw. beim Klicken tut sich nichts. Bei normalen Fenstern ist das nicht so.

    Hier ist mal der Code:

    #undef UNICODE
    #define _WIN32_WINNT 0x0500
    
    #include <windows.h>
    
    // Variablen
    HWND mainwindow;
    
    // MessageHandler
    LRESULT _stdcall MessageHandler( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
    {
    	switch( uMsg )
    	{
    		case WM_CLOSE:
    			exit( 0 );
    			break;
    	}
    
    	return DefWindowProc( hWnd, uMsg, wParam, lParam );
    }
    
    int CreateMainWindow( )
    {
    	HINSTANCE instance = GetModuleHandle( 0 );
    
    	// Window-Klasse
    	WNDCLASSEX wndClass = { 0 };
    	wndClass.cbSize = sizeof( wndClass );
    	wndClass.style = 0;
    	wndClass.lpfnWndProc = MessageHandler;
    	wndClass.cbClsExtra = 0;
    	wndClass.cbWndExtra = 0;
    	wndClass.hInstance = instance;
    	wndClass.hIcon = 0;
    	wndClass.hCursor = LoadCursor( 0, IDC_ARROW );
    	wndClass.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
    	wndClass.lpszMenuName = 0;
    	wndClass.lpszClassName = "MeineFensterKlasse";
    	wndClass.hIconSm = 0;
    
    	RegisterClassEx( &wndClass );
    
    	// Window
    	unsigned long style = WS_POPUP;
    
    	RECT area;
    	SystemParametersInfo( SPI_GETWORKAREA, 0, &area, 0 );
    
    	mainwindow = CreateWindowEx( WS_EX_LAYERED, "MeineFensterKlasse", "MeinFenster", style, 
    		area.right-280-20, area.bottom-300-20, 280, 300, 0, 0, instance, 0 );
    
    		SetLayeredWindowAttributes( mainwindow, 0, 192, LWA_ALPHA );
    
    		ShowWindow( mainwindow, true );
    
    	return 0;
    }
    
    // Main-Funktion
    int _stdcall WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    {
    	// Hauptfenster erstellen
    	CreateMainWindow( );
    
    	// Hauptschleife
    	MSG msg = { 0 };
    
    	while( msg.message != WM_QUIT )
    	{
    		MsgWaitForMultipleObjects( 0, 0, 0, INFINITE, QS_ALLINPUT );
    
    		while( PeekMessage( &msg, mainwindow, 0, 0, PM_REMOVE ) )
    		{
    			TranslateMessage( &msg );
    			DispatchMessage( &msg );
    		}
    	}
    
    	return 0;
    }
    


  • Wie sollen wir wissen, was in Deinem Popup vorgeht, wenn Du nur den Code für das Hauptfenster postest?



  • Popupfenster = Hauptfenster
    Ich habe Popupfenster geschrieben, weil es mit WS_POPUP erstellt wurde.



  • (OT: Hmm, hat MsgWaitForMultipleObjects()+PeekMessage() irgendwelche Vorteile gegenüber einfach GetMessage() ?)



  • @geeky, jetzt wo du's sagst ... eigentlich nicht. Zumindest sind mir noch keine aufgefallen.


Anmelden zum Antworten