Compartir a través de


Función SetWindowLongW (winuser.h)

Cambia un atributo de la ventana especificada. La función también establece el valor de 32 bits (long) en el desplazamiento especificado en la memoria de ventana adicional.

Nota Esta función se ha reemplazado por la función SetWindowLongPtr. Para escribir código compatible con versiones de 32 y 64 bits de Windows, use la función SetWindowLongPtr.
 

Sintaxis

LONG SetWindowLongW(
  [in] HWND hWnd,
  [in] int  nIndex,
  [in] LONG dwNewLong
);

Parámetros

[in] hWnd

Tipo: HWND

Identificador de la ventana y, indirectamente, de la clase a la que pertenece la ventana.

[in] nIndex

Tipo: int

Desplazamiento de base cero al valor que se va a establecer. Los valores válidos están en el intervalo cero a través del número de bytes de memoria de ventana adicional, menos el tamaño de un entero. Para establecer cualquier otro valor, especifique uno de los valores siguientes.

Valor Significado
GWL_EXSTYLE
-20
Establece un nuevo estilo de ventana extendido .
GWL_HINSTANCE
-6
Establece un nuevo identificador de instancia de aplicación.
GWL_ID
-12
Establece un nuevo identificador de la ventana secundaria. La ventana no puede ser una ventana de nivel superior.
GWL_STYLE
-16
Establece un nuevo estilo de ventana de .
GWL_USERDATA
-21
Establece los datos de usuario asociados a la ventana. Estos datos están diseñados para su uso por parte de la aplicación que creó la ventana. Su valor es inicialmente cero.
GWL_WNDPROC
-4
Establece una nueva dirección para el procedimiento de ventana.

No puede cambiar este atributo si la ventana no pertenece al mismo proceso que el subproceso que realiza la llamada.

 

Los siguientes valores también están disponibles cuando el parámetro hWnd identifica un cuadro de diálogo.

Valor Significado
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Establece la nueva dirección del procedimiento del cuadro de diálogo.
DWL_MSGRESULT
0
Establece el valor devuelto de un mensaje procesado en el procedimiento del cuadro de diálogo.
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Establece información adicional nueva que es privada para la aplicación, como identificadores o punteros.

[in] dwNewLong

Tipo: LONG

Valor de reemplazo.

Valor devuelto

Tipo: LONG

Si la función se ejecuta correctamente, el valor devuelto es el valor anterior del entero de 32 bits especificado.

Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.

Si el valor anterior del entero de 32 bits especificado es cero y la función se ejecuta correctamente, el valor devuelto es cero, pero la función no borra la última información de error. Esto dificulta la determinación del éxito o el error. Para solucionar este problema, debe borrar la última información de error llamando a SetLastError con 0 antes de llamar a SetWindowLong. A continuación, el error de función se indicará mediante un valor devuelto de cero y un GetLastError resultado distinto de cero.

Observaciones

Algunos datos de ventana se almacenan en caché, por lo que los cambios realizados mediante SetWindowLong no surtirán efecto hasta que llame a la función setWindowPos de . En concreto, si cambia cualquiera de los estilos de marco, debe llamar a SetWindowPos con la marca SWP_FRAMECHANGED para que la memoria caché se actualice correctamente.

Si usa setWindowLong con el índice de GWL_WNDPROC para reemplazar el procedimiento de ventana, el procedimiento de ventana debe cumplir las directrices especificadas en la descripción de la función de devolución de llamada WindowProc.

Si usa setWindowLong con el índice de DWL_MSGRESULT para establecer el valor devuelto de un mensaje procesado por un procedimiento de diálogo, debe devolver TRUE directamente después. De lo contrario, si llama a cualquier función que da como resultado que el procedimiento de diálogo reciba un mensaje de ventana, el mensaje de ventana anidado podría sobrescribir el valor devuelto establecido mediante DWL_MSGRESULT.

Al llamar a setWindowLong con el índice de GWL_WNDPROC, se crea una subclase de la clase de ventana que se usa para crear la ventana. Una aplicación puede subclase una clase del sistema, pero no debe subclase una clase de ventana creada por otro proceso. La función SetWindowLong crea la subclase de ventana cambiando el procedimiento de ventana asociado a una clase de ventana determinada, lo que hace que el sistema llame al nuevo procedimiento de ventana en lugar del anterior. Una aplicación debe pasar los mensajes no procesados por el nuevo procedimiento de ventana al procedimiento de ventana anterior llamando a CallWindowProc. Esto permite a la aplicación crear una cadena de procedimientos de ventana.

Reserve memoria de ventana adicional especificando un valor distinto de cero en el miembro cbWndExtra de la estructura WNDCLASSEX usada con la función RegisterClassEx.

No debe llamar a setWindowLong con el índice GWL_HWNDPARENT para cambiar el elemento primario de una ventana secundaria. En su lugar, use la función SetParent.

Si la ventana tiene un estilo de clase de CS_CLASSDC o CS_OWNDC, no establezca los estilos de ventana extendidos WS_EX_COMPOSITED o WS_EX_LAYERED.

Al llamar a SetWindowLong para establecer el estilo en una barra de progreso, se restablecerá su posición.

Ejemplos

Para obtener un ejemplo, vea Subclasing a Window.

Nota

El encabezado winuser.h define SetWindowLong como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows 2000 Professional [solo aplicaciones de escritorio]
servidor mínimo admitido Windows 2000 Server [solo aplicaciones de escritorio]
de la plataforma de destino de Windows
encabezado de winuser.h (incluya Windows.h)
biblioteca de User32.lib
DLL de User32.dll
conjunto de API de ext-ms-win-ntuser-windowclass-l1-1-0 (introducido en Windows 8)

Consulte también

CallWindowProc

conceptual de

GetWindowLong

de referencia de

RegisterClassEx

SetParent

setWindowLongPtr

WNDCLASSEX

clases de ventana de

WindowProc