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?