Tengo una ventana con un borde sólido a su alrededor. ¿Cómo puedo eliminar el borde (todo el área no cliente) usando SetWindowLong y GetWindowLong?¿Quitar el borde de la ventana?
Respuesta
en C/C++
LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
lStyle &= ~(WS_CAPTION | WS_THICKFRAME | WS_MINIMIZE | WS_MAXIMIZE | WS_SYSMENU);
SetWindowLong(hwnd, GWL_STYLE, lStyle);
WS_CAPTION se define como (WS_BORDER | WS_DLGFRAME). Puede salirse con la suya eliminando solo estos dos estilos, ya que el menú maximizar y minimizar el sistema desaparecerá cuando desaparezca el título, pero también es mejor eliminarlos.
También es mejor eliminar los estilos de borde extendido.
LONG lExStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
lExStyle &= ~(WS_EX_DLGMODALFRAME | WS_EX_CLIENTEDGE | WS_EX_STATICEDGE);
SetWindowLong(hwnd, GWL_EXSTYLE, lExStyle);
Y, por último, para obtener su ventana para volver a dibujar con los estilos modificados, puede usar SetWindowPos.
SetWindowPos(hwnd, NULL, 0,0,0,0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_NOOWNERZORDER);
Los siguientes códigos de Delphi lo hace:
SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not WS_BORDER and not WS_SIZEBOX and not WS_DLGFRAME);
SetWindowPos(Handle, HWND_TOP, Left, Top, Width, Height, SWP_FRAMECHANGED);
Por supuesto, estas llamadas a la API tienen el mismo aspecto en todos los idiomas.
Esta línea de código a continuación elimina la frontera de cualquier ventana dada, y sólo queda su cliente:
SetWindowLong(hWnd /*The handle of the window to remove its borders*/, GWL_STYLE, WS_POPUP);
Puede utilizar WS_POPUPWINDOW
lugar en el tercer parámetro de SetWindowLong
función. También elimina los bordes de la ventana dada y también funciona, pero la diferencia es que también dibuja delineado rectángulo negro en todo el cliente restante de la ventana. El grosor de ese rectángulo es de 1 píxel. WS_POPUP
no dibuja ese rectángulo, en realidad no dibuja nada, solo elimina los bordes de la ventana.
Si usted está a punto de volver a los bordes de la ventana, antes de utilizar esa línea de código que he publicado anteriormente, llamar primero esa línea de código a continuación:
GetWindowLong(hWnd /*The handle of the window that you want to remove its borders and later return them back to it*/, GWL_STYLE);
pero por supuesto que esta función Retuns los estilos de la ventana, así que cree una nueva variable que mantendrá estos estilos, es decir, establezca esta variable en el valor de retorno de esa función.
continuación, utiliza SetWindowLong
como showen anteriormente para eliminar sus fronteras, y cuando se quiere más adelante para restaurar sus fronteras hacia atrás, simplemente recordar una vez más SetWindowLong
, los dos primeros parámetros son los mismos (CVent y GWL_STYLE), pero el tercer parámetro es los estilos de la ventana que regresó de GetWindowLong
. Si no desea llamar al GetWindowLong
, pero aún así devolver los bordes de la ventana, puede usar SetWindowLong
con los mismos primeros dos parámetros, y en el tercer parámetro, puede usar uno de los siguientes: WS_OVERLAPPED
y/o WS_OVERLAPPEDWINDOW
y/o WS_SIZEFRAME
.
NOTA: Si intenta mi respuesta, pero no funciona para usted, esto puede ser, debido a que las dos funciones SetWindowLong
y GetWindowLong
han sido sustituidos y no funciona para usted, y que debido a que son compatibles con solo32-bit versión de Windows. Probablemente está utilizando versión de 64 bits de Windows de, a continuación, utilizar SetWindowLongPtr
y GetWindowLongPtr
en cambio, que son compatibles con tanto32 bits y 64 bits versiones de Windows. MSDN informa sobre estas funciones en la sección Nota. Simplemente búscalos en ese sitio. Aquí están los enlaces a los mismos:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591(v=vs.85).aspx http://msdn.microsoft.com/en-us/library/windows/desktop/ms633584(v=vs.85).aspx
la esperanza de que todo esto responde a su pregunta.
Gracias por recordarnos de usar 'WS_POPUP', es un método único que funciona al crear ventanas sin bordes. – nekavally
- 1. Chrome: quitar el borde/decoración de la ventana
- 2. cómo quitar el borde entre el título de la ventana y el contenido
- 3. Quitar el borde del control WebBrowser
- 4. Swing JTextField cómo quitar el borde?
- 5. cómo quitar el borde negro alrededor de la imagen hipervinculada?
- 6. Quitar el borde alrededor del diagrama de Matlab
- 7. Quitar el borde de 1 píxel bajo UISearchBar
- 8. Cómo quitar el borde JFrame como dejar que una imagen toque el borde
- 9. Quitar el borde del botón personalizado Programatically Creado
- 10. ¿Quitar la ventana de la consola para Glut/FreeGlut/GLFW?
- 11. Xlib ¿Cómo funciona esto (quitar la decoración de la ventana)?
- 12. borde de ventana no redimensionable y posicionamiento
- 13. Quitar el separador de línea pero no el borde en un UITableView
- 14. Ventana emergente de WPF: ¿Cómo poner un borde alrededor de la ventana emergente?
- 15. ¿Quitar el borde de la línea inferior en la barra de pestañas? (Y cambie el color seleccionado)
- 16. Hacer doble clic en el evento en el borde de la ventana de WPF
- 17. Cómo quitar el borde 3d (hundido) del componente MDIClient en el formulario padre MDI?
- 18. Cómo eliminar la barra de título de una ventana pero mantener el borde
- 19. ¿Cómo puedo diseñar el borde y la barra de título de una ventana en WPF?
- 20. ios5: borrar el borde UIButton
- 21. quitar el paréntesis de la cadena de
- 22. Jquery quitar el elemento de la matriz
- 23. Eliminando el borde textarea en HTML
- 24. quitar la barra de direcciones en la ventana emergente con Javascript
- 25. Graphviz: ¿Cómo cambiar el color del borde
- 26. WPF/XAML: ¿Cómo dimensiono una ventana sin borde?
- 27. Cómo cambiar el color del borde de la forma C#?
- 28. Reservar el borde de la pantalla en Java
- 29. Eliminar el marco/ventana/borde de otro programa (el bit Aero) usando VB.NET
- 30. ¿Quitar el foco programmatically?
Esto no está actualizado –
@NathanGoings ¿Puede explicar por qué esto está desactualizado en su opinión y qué está actualizado? – RamboNo5
@ RamboNo5: SetWindowLong() ha sido reemplazado por la función SetWindowLongPtr() – dns