SetWindowRgn; Abgerundetes Rechteck



  • GetWindowRect(hwnd, &window);
    two = CreateRoundRectRgn(window.left, window.top, window.right, window.bottom, 100, 100);
    SetWindowRgn(hwnd, two, TRUE);
    

    So, oder so ähnlich kommt bei mir ein Kreis heraus..

    Nur ich hätte gerne ein abgerundetes Rechteck..
    Hat dafür jemand einen Code dafür :/?



  • Die letzten beiden Parameter bestimmen, wie stark die Ecken abgerundet werden sollen. Verwende mal kleinere Werte wie 10, 10 😉 .



  • Es kann auch sein, dass die Werte von window.left, window.top falsch sind, da die Region relativ zur linken oberen Ecke des Fensters berechnet wird ( nicht des Clientbereichs ).

    Folgender Code funktioniert bei mir:

    RECT rcWindow;
    GetWindowRect( hWnd, &rcWindow );
    OffsetRect( &rcWindow, -rcWindow.left, -rcWindow.top );
    HRGN rgnRound = CreateRoundRectRgn( rcWindow.left, rcWindow.top, rcWindow.right, rcWindow.bottom, 40, 40 );
    SetWindowRgn( hWnd, rgnRound, TRUE );
    


  • Ohh..
    Danke euch beiden,
    ähm, muss der letzte Parameter eigentlich TRUE oder FALSE sein?..



  • Schau doch einfach in die MSDN, Itachi.

    bRedraw
    [in] Specifies whether the system redraws the window after setting the window region. If bRedraw is TRUE, the system does so; otherwise, it does not.

    Typically, you set bRedraw to TRUE if the window is visible.

    --------------------------
    tenchou ‾ω‾



  • Was komisch ist:
    bei mir wird der Border ungleichmäßig "abgerundet";

    b_Transp = CreateWindow( "BUTTON", "", WS_OVERLAPPED | WS_CHILD| WS_VISIBLE | WS_DLGFRAME, 10, 10, 330, 60, myWnd, (HMENU)b_m_Transp, ((LPCREATESTRUCT)lParam)->hInstance, NULL );
    			if( b_Transp )
    			{
    				GetWindowRect( b_Transp, &rgnWnd );
    				OffsetRect( &rgnWnd, -rgnWnd.left, -rgnWnd.top ); 
    				if( NULL != (myRgn = CreateRoundRectRgn( rgnWnd.left, rgnWnd.top, rgnWnd.right, rgnWnd.bottom, 20, 20 ) ) )
    					SetWindowRgn( b_Transp, myRgn, TRUE );
    				else
    					printf( "%d\n", GetLastError() );
    
    			}
    

    Ausserdem wird nur der Border ausgeblendet, das Fenster nicht, dachte so könnte ich das auch Ausblenden, ist aber nicht weiter schlimm...

    Hat jemand ne erklärung für dieses Problemchen?


Anmelden zum Antworten