Você inicializar a caixa de diálogo e seu conteúdo ao processar a mensagem WM_INITDIALOG . A tarefa mais comum é inicializar os controles para refletir as atual configurações de caixa de diálogo. Outra tarefa comum é para o centro de uma caixa de diálogo na tela ou dentro de sua janela do proprietário. É uma tarefa útil para algumas caixas de diálogo Definir o foco de entrada para um determinado controle em vez de aceitar o foco de entrada padrão.
No exemplo a seguir, o procedimento caixa diálogo centra-se a caixa de diálogo e define o foco de entrada ao processar a mensagem WM_INITDIALOG. Para centralizar a caixa de diálogo, o procedimento recupera os retângulos de janela para a caixa de diálogo e a janela do proprietário e calcula uma nova posição da caixa de diálogo. Para definir o foco de entrada, o procedimento verifica o wParam parâmetro para determinar o identificador do foco de entrada padrão:
HWND hwndOwner;
RECT rc, rcDlg, rcOwner;
caso WM_INITDIALOG: / / obter o proprietário retângulos de caixa de janela e caixa de diálogo.
se ((hwndOwner = GetParent(hwndDlg)) = = NULL) {
hwndOwner = GetDesktopWindow();
}
GetWindowRect (hwndOwner, amp; rcOwner);
GetWindowRect (hwndDlg, & rcDlg);
CopyRect (rc, & rcOwner);
/ / Compensar o proprietário e retângulos de caixa de diálogo para que / / direito e inferior os valores representam a largura e / / altura e, em seguida, deslocamento do proprietário novamente para descartar / / espaço retomado pela caixa de diálogo.
OffsetRect (& rcDlg,-rcDlg.left, - rcDlg.top);
OffsetRect (& rc,-rc.left, - rc.top);
OffsetRect (& rc,-rcDlg.right, - rcDlg.bottom);
/ / A nova posição é a soma da metade restante / / espaço e o proprietário original do posição.
SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / ignora tamanho argumentos SWP_NOSIZE);
se (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME));
retornar FALSE;
} retornar TRUE
Em declarações anteriores, o procedimento usa a GetParent função para recuperar o identificador de janela de proprietário para uma caixa de diálogo. A função retorna o proprietário do identificador de janela para caixas de diálogo e o identificador de janela de pai para filho windows. Porque um aplicativo pode criar uma caixa de diálogo que não tem dono, o procedimento verifica o identificador retornado e usa a função GetDesktopWindow para recuperar o identificador de janela área de trabalho, se necessário. Depois de calcular a nova posição, o procedimento usa o SetWindowPos função para mover a caixa de diálogo, especificar o valor HWND_TOP para garantir que a caixa de diálogo permanece no topo da janela do proprietário.
Antes de definir o foco de entrada, o procedimento verifica o identificador de controle do foco de entrada padrão. O sistema passa o identificador de janela do foco de entrada padrão na wParam parâmetro. A função GetDlgCtrlID retorna o identificador para o Controlarar identificado pelo identificador de janela. Se o identificador não coincide com o identificador correto, o procedimento usa o SetFocus função para definir o foco de entrada. O GetDlgItem função é necessária para recuperar o identificador de janela do controle desejado.