Compartilhar via


Função SetWindowLongA (winuser.h)

Altera um atributo da janela especificada. A função também define o valor de 32 bits (longo) no deslocamento especificado na memória extra da janela.

Observação Essa função foi substituída pela função SetWindowLongPtr. Para escrever um código compatível com versões de 32 bits e 64 bits do Windows, use a função SetWindowLongPtr.
 

Sintaxe

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

Parâmetros

[in] hWnd

Tipo: HWND

Um identificador para a janela e, indiretamente, a classe à qual a janela pertence.

[in] nIndex

Tipo: int

O deslocamento baseado em zero para o valor a ser definido. Os valores válidos estão no intervalo zero até o número de bytes de memória de janela extra, menos o tamanho de um inteiro. Para definir qualquer outro valor, especifique um dos valores a seguir.

Valor Significado
GWL_EXSTYLE
-20
Define um novo estilo de janela estendido.
GWL_HINSTANCE
-6
Define um novo identificador de instância do aplicativo.
GWL_ID
-12
Define um novo identificador da janela filho. A janela não pode ser uma janela de nível superior.
GWL_STYLE
-16
Define um novo estilo de janela .
GWL_USERDATA
-21
Define os dados do usuário associados à janela. Esses dados são destinados ao uso pelo aplicativo que criou a janela. Seu valor é inicialmente zero.
GWL_WNDPROC
-4
Define um novo endereço para o procedimento de janela.

Você não poderá alterar esse atributo se a janela não pertencer ao mesmo processo que o thread de chamada.

 

Os valores a seguir também estão disponíveis quando o parâmetro hWnd identifica uma caixa de diálogo.

Valor Significado
DWL_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
Define o novo endereço do procedimento da caixa de diálogo.
DWL_MSGRESULT
0
Define o valor retornado de uma mensagem processada no procedimento da caixa de diálogo.
DWL_USER
DWLP_DLGPROC + sizeof(DLGPROC)
Define novas informações extras que são privadas para o aplicativo, como identificadores ou ponteiros.

[in] dwNewLong

Tipo: LONG

O valor de substituição.

Valor de retorno

Tipo: LONG

Se a função for bem-sucedida, o valor retornado será o valor anterior do inteiro de 32 bits especificado.

Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.

Se o valor anterior do inteiro de 32 bits especificado for zero e a função for bem-sucedida, o valor retornado será zero, mas a função não limpará as últimas informações de erro. Isso dificulta a determinação de êxito ou falha. Para lidar com isso, você deve limpar as últimas informações de erro chamando SetLastError com 0 antes de chamar SetWindowLong. Em seguida, a falha de função será indicada por um valor retornado igual a zero e um GetLastError resultado diferente de zero.

Observações

Determinados dados de janela são armazenados em cache, portanto, as alterações feitas usando SetWindowLong não entrarão em vigor até que você chame a função SetWindowPos. Especificamente, se você alterar qualquer um dos estilos de quadro, deverá chamar SetWindowPos com o sinalizador SWP_FRAMECHANGED para que o cache seja atualizado corretamente.

Se você usar SetWindowLong com o índice GWL_WNDPROC para substituir o procedimento de janela, o procedimento de janela deverá estar em conformidade com as diretrizes especificadas na descrição da função de retorno de chamada WindowProc.

Se você usar SetWindowLong com o índice DWL_MSGRESULT para definir o valor retornado de uma mensagem processada por um procedimento de caixa de diálogo, você deverá retornar verdadeiro diretamente posteriormente. Caso contrário, se você chamar qualquer função que resulte em seu procedimento de diálogo recebendo uma mensagem de janela, a mensagem de janela aninhada poderá substituir o valor retornado definido usando DWL_MSGRESULT.

Chamar SetWindowLong com o índice GWL_WNDPROC cria uma subclasse da classe de janela usada para criar a janela. Um aplicativo pode subclasse uma classe do sistema, mas não deve subclasse uma classe de janela criada por outro processo. A função SetWindowLong cria a subclasse da janela alterando o procedimento de janela associado a uma classe de janela específica, fazendo com que o sistema chame o novo procedimento de janela em vez do anterior. Um aplicativo deve passar mensagens não processadas pelo novo procedimento de janela para o procedimento de janela anterior chamando CallWindowProc. Isso permite que o aplicativo crie uma cadeia de procedimentos de janela.

Reserve memória de janela extra especificando um valor diferente de zero no membro cbWndExtra da estrutura de WNDCLASSEX usada com a função RegisterClassEx.

Você não deve chamar SetWindowLong com o índice GWL_HWNDPARENT para alterar o pai de uma janela filho. Em vez disso, use a função SetParent.

Se a janela tiver um estilo de classe de CS_CLASSDC ou CS_OWNDC, não defina os estilos de janela estendidos WS_EX_COMPOSITED ou WS_EX_LAYERED.

Chamar SetWindowLong para definir o estilo em uma barra de progresso redefinirá sua posição.

Exemplos

Para obter um exemplo, consulte Subclasse de uma janela.

Nota

O cabeçalho winuser.h define SetWindowLong como um alias que seleciona automaticamente a versão ANSI ou Unicode dessa função com base na definição da constante do pré-processador UNICODE. A combinação do uso do alias neutro de codificação com código que não é neutro em codificação pode levar a incompatibilidades que resultam em erros de compilação ou de runtime. Para obter mais informações, consulte Conventions for Function Prototypes.

Requisitos

Requisito Valor
de cliente com suporte mínimo Windows 2000 Professional [somente aplicativos da área de trabalho]
servidor com suporte mínimo Windows 2000 Server [somente aplicativos da área de trabalho]
da Plataforma de Destino Windows
cabeçalho winuser.h (inclua Windows.h)
biblioteca User32.lib
de DLL User32.dll
conjunto de API ext-ms-win-ntuser-windowclass-l1-1-0 (introduzido no Windows 8)

Consulte também

CallWindowProc

Conceitual

GetWindowLong

de referência de

RegisterClassEx

SetParent

setWindowLongPtr

WNDCLASSEX

classes de janela

WindowProc