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.
//
}