Inicializando a caixa de diálogo

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.

Index