WM_SYSCOMMAND mensagem

Uma janela recebe essa mensagem quando o usuário escolhe um comando no menu Janela (anteriormente conhecido como sistema ou menu de controle) ou quando o usuário escolhe o botão maximizar, minimizar botão, botão restaurar ou fechar botão.

#define WM_SYSCOMMAND                   0x0112

Exemplo

 case WM_SYSCOMMAND:
        if (wParam == SC_CLOSE)
        {
            EndDialog (hDlg, TRUE);
            return(TRUE);
        }
        break;

Exemplo das Amostras do Windows Classic no GitHub.

Parâmetros

wParam

O tipo de comando do sistema solicitado. Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
SC_CLOSE
0xF060
Fecha a janela.
SC_CONTEXTHELP
0xF180
Altera o cursor para um ponto de interrogação com um ponteiro. Se o usuário clicar em um controle na caixa de diálogo, o controle receberá uma mensagem WM_HELP .
SC_DEFAULT
0xF160
Seleciona o item padrão; o usuário clicou duas vezes no menu da janela.
SC_HOTKEY
0xF150
Ativa a janela associada à tecla de acesso especificada pelo aplicativo. O parâmetro lParam identifica a janela a ser ativada.
SC_HSCROLL
0xF080
Rola horizontalmente.
SCF_ISSECURE
0x00000001
Indica se o protetor de tela é seguro.
SC_KEYMENU
0xF100
Recupera o menu da janela como resultado de um pressionamento de tecla. Para obter mais informações, consulte a seção Comentários.
SC_MAXIMIZE
0xF030
Maximiza a janela.
SC_MINIMIZE
0xF020
Minimiza a janela.
SC_MONITORPOWER
0xF170
Define o estado da exibição. Esse comando dá suporte a dispositivos que têm recursos de economia de energia, como um computador pessoal movido a bateria.
O parâmetro lParam pode ter os seguintes valores:
  • -1 (a tela está ativada)
  • 1 (a tela vai para baixo consumo de energia)
  • 2 (a exibição está sendo desligada)
SC_MOUSEMENU
0xF090
Recupera o menu da janela como resultado de um clique do mouse.
SC_MOVE
0xF010
Move a janela.
SC_NEXTWINDOW
0xF040
Move para a próxima janela.
SC_PREVWINDOW
0xF050
Move para a janela anterior.
SC_RESTORE
0xF120
Restaura a janela para sua posição e tamanho normais.
SC_SCREENSAVE
0xF140
Executa o aplicativo de proteção de tela especificado na seção [inicialização] do arquivo System.ini.
SC_SIZE
0xF000
Dimensiona a janela.
SC_TASKLIST
0xF130
Ativa o menu Iniciar .
SC_VSCROLL
0xF070
Rola verticalmente.

lParam

A palavra de baixa ordem especifica a posição horizontal do cursor, em coordenadas de tela, se um comando de menu de janela for escolhido com o mouse. Caso contrário, esse parâmetro não será usado.

A palavra de alta ordem especifica a posição vertical do cursor, em coordenadas de tela, se um comando de menu de janela for escolhido com o mouse. Esse parâmetro será 1 se o comando for escolhido usando um acelerador de sistema ou zero se estiver usando um mnemônico.

Valor retornado

Um aplicativo deverá retornar zero se processar essa mensagem.

Comentários

Para obter as coordenadas de posição nas coordenadas da tela, use o seguinte código:

xPos = GET_X_LPARAM(lParam);    // horizontal position 
yPos = GET_Y_LPARAM(lParam);    // vertical position

A função DefWindowProc executa a solicitação de menu de janela para as ações predefinidas especificadas na tabela anterior.

Em mensagens WM_SYSCOMMAND , os quatro bits de ordem baixa do parâmetro wParam são usados internamente pelo sistema. Para obter o resultado correto ao testar o valor de wParam, um aplicativo deve combinar o valor 0xFFF0 com o valor wParam usando o operador AND bit a bit.

Os itens de menu em um menu de janela podem ser modificados usando as funções GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem e SetMenuItemInfo . Os aplicativos que modificam o menu da janela devem processar mensagens WM_SYSCOMMAND .

Um aplicativo pode executar qualquer comando do sistema a qualquer momento passando uma mensagem de WM_SYSCOMMAND para DefWindowProc. Todas as mensagens WM_SYSCOMMAND não manipuladas pelo aplicativo devem ser passadas para DefWindowProc. Todos os valores de comando adicionados por um aplicativo devem ser processados pelo aplicativo e não podem ser passados para DefWindowProc.

Se a proteção por senha estiver habilitada pela política, a proteção de tela será iniciada independentemente do que um aplicativo faz com a notificação de SC_SCREENSAVE mesmo que não a passe para DefWindowProc.

As teclas aceleradoras definidas para escolher itens no menu da janela são convertidas em mensagens WM_SYSCOMMAND ; todos os outros pressionamentos de teclas de acelerador são convertidos em mensagens WM_COMMAND .

Se o wParam for SC_KEYMENU, lParam conterá o código de caractere da chave usada com a tecla ALT para exibir o menu pop-up. Por exemplo, pressionar ALT+F para exibir o pop-up Arquivo causará um WM_SYSCOMMAND com wParam igual a SC_KEYMENU e lParam igual a 'f'.

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Winuser.h (inclua Windows.h)

Confira também

Referência

Appendmenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

Getsystemmenu

Insertmenu

Modifymenu

WM_COMMAND

Conceitual

Aceleradores de teclado