Enviar uma mensagem

A função SendMessage é usada para enviar uma mensagem diretamente para um procedimento janela. SendMessage chama um procedimento de janela e espera que esse procedimento processar a mensagem e retornar um resultado.

Uma mensagem pode ser enviada para qualquer janela no sistema; Tudo que é necessário é um identificador de janela. O sistema usa o identificador para determinar qual o procedimento janela deve receber a mensagem.

Antes de processar uma mensagem que pode ter sido enviada de outro thread, um procedimento de janela primeiro deve chamar a função InSendMessage . Se essa função retorna TRUE, o procedimento janela deve chamar ReplyMessage antes de qualquer função que faz com que o thread a ceder o controle, como mostrado no exemplo a seguir.

caso WM_USER + 5: se (InSendMessage()) ReplyMessage(TRUE); 
 
    DialogBox (hInst, "MyDialogBox", hwndMain, MyDlgProc (DLGPROC)); 
    quebra 

 

Um número de mensagens pode ser enviado para controles em uma caixa de diálogo. Essas mensagens de controlo definir a aparência, comportamento e conteúdo de controles ou recuperar informações sobre controles. Por exemplo, a CB_ADDSTRING mensagem pode adicionar uma Cadeia de caracteres para uma caixa de combinação, e a mensagem BM_SETCHECK pode definir o estado de Marcar de um botão de opção ou caixa de seleção.

Use o SendDlgItemMessage função para enviar uma mensagem para um Controlarar, especificando o identificador do Controlarar e o identificador de janela de caixa de diálogo que contém o Controlarar. O seguinte exemplo, tirado de um procedimento de caixa de diálogo, copia uma Cadeia de caracteres do Controlarar de Editarar de uma caixa de combinação para sua caixa de lista. O exemplo usa o SendDlgItemMessage para enviar uma mensagem CB_ADDSTRING para a caixa de combinação.

HWND hwndCombo; 
int cTxtLen; 
PSTR pszMem; 
 
comutador (uMsg) {case WM_COMMAND: alternar (LOWORD(wParam)) {case IDD_ADDCBITEM: / / obter o identificador da caixa de combinação e o / / comprimento da Cadeia de caracteres na Editar Controlar / / da caixa de combinação. 
 
                hwndCombo = GetDlgItem (hwndDlg, IDD_COMBO); 
                cTxtLen = GetWindowTextLength(hwndCombo); 
 
                / / Alocar memória para o seqüência de caracteres e cópia / / a Cadeia de caracteres para a memória. 
 
                pszMem = (PSTR) VirtualAlloc((LPVOID) NULL, (DWORD) (cTxtLen + 1), MEM_COMMIT, PAGE_READWRITE); 
                GetWindowText (hwndCombo, pszMem, cTxtLen + 1); 
 
                / / Adicionar Cadeia de caracteres para a caixa de lista da / / combinação caixa e remover a Cadeia de caracteres da / / editar Controlarar de caixa de combinação. 
 
                se (* pszMem! = NULL) {SendDlgItemMessage (hwndDlg, IDD_COMBO, CB_ADDSTRING, 0, (DWORD) (pszMem (LPSTR))); 
                    SetWindowText (hwndCombo, (LPSTR) NULL); 
                } / / A memória livre e retornar. 
 
                VirtualFree (pszMem, 0, MEM_RELEASE); 
                retornar TRUE; 
            / / / / Processo de outros comandos da caixa de diálogo. 
            / /} / / / / Processo de outras mensagens de caixa de diálogo. 
    // 
 
} 

 

Index