대화 상자 초기화

WM_INITDIALOG 메시지를 처리 하는 동안 대화 상자와 내용물을 초기화 합니다. 가장 일반적인 작업이 현재 대화 상자 설정을 반영 하기 위해 컨트롤을 초기화 하는 것입니다. 또 다른 일반적인 작업 센터 또는 소유자 창 내 화면에 대화 상자입니다. 일부 대화 상자에 대 한 유용한 작업 기본 입력된 포커스를 받을 하는 대신 해당된 컨트롤에 입력된 포커스를 설정 하는 것.

다음 예제에서는 대화 상자 프로시저 대화 상자 가운데 고 WM_INITDIALOG 메시지를 처리 하는 동안 입력된 포커스를 설정 합니다. 대화 상자 가운데에 프로시저 소유자 창에 대 한 대화 상자 창 사각형을 검색 하 고 대화 상자에 대 한 새 위치를 계산 합니다. 프로시저에서 기본 입력된 포커스의 식별자를 확인 하려면 wParam 매개 변수를 검사 하는 입력된 포커스를 설정 하려면:

HWND hwndOwner; 
RECT rc, rcDlg, rcOwner; 
 
    WM_INITDIALOG 사례: / / 소유자 창 및 대화 상자 사각형. 
 
        만약 ((hwndOwner GetParent(hwndDlg)) = = NULL) {
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect hwndOwner, 앰프 (rcOwner); 
        GetWindowRect (hwndDlg, 및 rcDlg); 
        CopyRect (rc & rcOwner); 
 
         / / 소유자를 오프셋 하 고 대화 상자의 사각형 있도록 / 오른쪽 및 아래쪽 값을 나타냅니다 너비 / 및 / / 높이, 그리고 이번 주 오프셋 다음 취소를 다시 소유자 / / 대화 상자에 의해 차지 하는 공간. 
 
        OffsetRect (& rcDlg,-rcDlg.left,-rcDlg.top); 
        OffsetRect (rc, 및-rc.left,-rc.top); 
        OffsetRect (rc, 및-rcDlg.right,-rcDlg.bottom); 
 
         / / 새 위치는 나머지 절반의 합 / / 공간 및 소유자의 원래 위치. 
 
        SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / 크기 인수를 무시 SWP_NOSIZE); 
 
        경우 (wParam GetDlgCtrlID((HWND))! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            FALSE; 반환 
        } TRUE를 반환 합니다. 
 

위의 문에서 프로시저 대화 상자에 대 한 소유자 창 핸들을 검색 하려면 GetParent 함수를 사용 합니다. 이 함수는 대화 상자에 대 한 창 핸들 및 자식 창에 대 한 부모 창 핸들 소유자를 반환합니다. 응용 프로그램 없음 소유자가 대화 상자를 만들 수 있습니다, 때문에 프로시저에서 반환 된 핸들을 확인 하 고 필요한 경우에 데스크톱 창 핸들을 가져올 GetDesktopWindow 함수를 사용 하. 새 위치를 계산 후 프로시저 SetWindowPos 함수를 사용 하 여 이동 대화 상자의 소유자 창 맨 위에 남아 있도록 HWND_TOP 값을 지정 하는 대화 상자.

입력된 포커스를 설정 하기 전에 절차를 기본 입력된 포커스를 컨트롤 식별자를 확인 합니다. 시스템이 wParam 매개 변수에서 기본 입력된 포커스의 창 핸들을 전달합니다. GetDlgCtrlID 함수는 창 핸들에 의해 식별 된 컨트롤의 식별자를 반환 합니다. 식별자에는 올바른 식별자와 일치 하지 않으면, 프로시저는 SetFocus 함수를 사용 하 여 입력된 포커스를 설정 합니다. 원하는 컨트롤의 창 핸들을 검색 하는 데 필요한 GetDlgItem 함수.

 

Index