2010-03-08 38 views

Respuesta

46

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); 
+1

Esto no está actualizado –

+3

@NathanGoings ¿Puede explicar por qué esto está desactualizado en su opinión y qué está actualizado? – RamboNo5

+8

@ RamboNo5: SetWindowLong() ha sido reemplazado por la función SetWindowLongPtr() – dns

8

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.

5

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.

+1

Gracias por recordarnos de usar 'WS_POPUP', es un método único que funciona al crear ventanas sin bordes. – nekavally

Cuestiones relacionadas