Você cria uma caixa de diálogo sem janela restrita usando CreateDialog função, especificando o identificador ou nome de um recurso de modelo de caixa de diálogo e o endereço do procedimento de caixa de diálogo. CreateDialog carrega o modelo cria a caixa de diálogo e, opcionalmente, exibe-lo. Seu aplicativo é responsável por recuperar e distribuir mensagens de entrada de usuário para o procedimento caixa de diálogo.
No exemplo a seguir, o aplicativo exibe uma caixa de diálogo sem janela restrita — se ele não estiver sendo exibido — quando o usuário escolhe um comando de ir para um menu de aplicativo. A caixa de diálogo contém um Controlarar de editar, uma caixa de seleção e botões OK e Cancelar. O modelo de caixa de diálogo é um recurso no arquivo executável do aplicativo e o identificador de recurso DLG_GOTO. O usuário insere um número de linha no Controlarar de editar e verifica a caixa de seleção para especificar que o número de linha é relativo para a linha atual. Os identificadores de Controlarar são ID_LINE, ID_ABSREL, IDOK e IDCANCEL.
As instruções na primeira parte do exemplo de criar a caixa de diálogo sem janela restrita. Estas declarações, no procedimento de janela para a janela principal do aplicativo, criam a caixa de diálogo quando o procedimento janela recebe uma WM_COMMAND mensagem com o identificador de comando do IDM_GOTO, mas somente se a variável global hwndGoto já não contém um válido identificador. A segunda parte do exemplo é o loop de mensagem principal do aplicativo. O loop inclui o IsDialogMessage função para garantir que o usuário pode usar a interface de teclado de caixa de diálogo na caixa de diálogo sem janela restrita. A terceira parte do exemplo é o procedimento de caixa de diálogo. O procedimento recupera o conteúdo da caixa de seleção e Controlarar de Editar quando o usuário escolhe o botão OK. O procedimento destrói a caixa diálogo quando o usuário escolhe o botão Cancelar.
HwndGoto HWND = NULL; / / janela identificador da caixa de diálogo.
.
.
casos WM_COMMAND: alternar (LOWORD(wParam)) {case IDM_GOTO: if (!IsWindow(hwndGoto)) {hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE(DLG_GOTO), hwnd, GoToProc (DLGPROC));
ShowWindow (hwndGoto, SW_SHOW);
}
break;
} retornar 0 L
Em declarações anteriores, CreateDialog é chamado somente se hwndGoto faz não contém um válido identificador janela. Isso garante que o aplicativo não exibe duas caixas de diálogo ao mesmo tempo. Para oferecer suporte a esse método de verificação, o procedimento caixa de diálogo deve definir hwndGoto como NULL quando ele destrói a caixa de diálogo.
O loop de mensagem para um aplicativo consiste as seguintes instruções:
while (GetMessage (amp; msg, NULL, NULL, NULL)) {se (!IsWindow(hwndGoto) | | !IsDialogMessage (hwndGoto & msg)) {TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
O loop verifica a validade do identificador de janela para a caixa de diálogo e apenas chama o IsDialogMessage função se o identificador é válido. IsDialogMessage processa somente a mensagem se ele pertence a caixa de diálogo. Caso contrário, retorna FALSE e o loop envia a mensagem para a janela apropriada.
As instruções a seguir definem o procedimento de caixa de diálogo:
int iLine; / / recebe a linha número BOOL fRelative; / / recebe o status da caixa de seleção chamada de retorno BOOL GoToProc (hwndDlg HWND, UINT mensagem, WP&ARAM wParam, LPARAM lParam) {BOOL fError;
comutador (mensagem) {case WM_INITDIALOG: CheckDlgButton (hwndDlg, ID_ABSREL, fRelative);
retornar TRUE;
casos WM_COMMAND: alternar (LOWORD(wParam)) {case IDOK: fRelative = IsDlgButtonChecked (hwndDlg, ID_ABSREL);
iLine = GetDlgItemInt (hwndDlg, ID_LINE, amp; fError, fRelative);
se (fError) {MessageBox (hwndDlg, SZINVALIDNUMBER, SZGOTOERR, MB_OK);
SendDlgItemMessage (hwndDlg, ID_LINE, EM_SETSEL, 0,-1 L);
} else / / notificar a janela de proprietário para transportar / / o comando.
retornar TRUE;
caso IDCANCEL: DestroyWindow(hwndDlg);
hwndGoto = NULL;
retornar TRUE;
}} return FALSE;
}
Em declarações anteriores, o procedimento processa o WM_INITDIALOG e WM_COMMAND mensagens. Durante o WM_INITDIALOG processamento, o procedimento inicializa a caixa de seleção, passando o valor atual da variável global fRelative para CheckDlgButton. O procedimento retorna TRUE para direcionar o sistema para definir o foco de entrada padrão.
Durante o processamento de WM_COMMAND, o procedimento fecha a caixa de diálogo somente se o usuário escolhe o botão Cancelar — ou seja, o botão com o identificador IDCANCEL. O procedimento deve chamar DestroyWindow para fechar uma caixa de diálogo sem janela restrita. Observe que o procedimento também define a variável hwndGoto para NULL para garantir que outras instruções que dependem dessa variável funcionem corretamente.
Se o usuário escolhe o botão OK, o procedimento recupera o estado atual da caixa de seleção e atribui à variável fRelative . Ele usa a variável para recuperar o número de linha do Controlarar de Editarar. GetDlgItemInt converte o texto no Controlarar de Editarar em um número inteiro. O valor fRelative determina se a função interpreta o número como um valor assinado ou não assinado. Se o texto do Controlarar de editar não é um número válido, GetDlgItemInt define o valor da variável fError para diferente de zero. O procedimento verifica esse valor para determinar se deve exibir uma mensagem de erro ou executar o comando. No caso de um erro, o procedimento caixa diálogo envia uma mensagem para o Controlarar de editar, direcionando-o para selecionar o texto no Controlarar para que o usuário pode facilmente substituí-lo. Se GetDlgItemInt não retornar um erro, o procedimento pode executar o comando solicitado propriamente dito ou enviar uma mensagem para a janela do proprietário, direcionando-o para executar o comando.