창 서브클래싱

하위 창의 인스턴스, SetWindowLong 함수를 호출 하 고 GWL_WNDPROC 플래그와 하위 프로시저에 대 한 포인터 하위 창 핸들을 지정 합니다. SetWindowLong 원래 창 프로시저;에 포인터를 반환합니다. 이 포인터를 사용 하 여 원래 프로시저에 메시지를 전달할 수 있습니다. 하위 창 프로시저 CallWindowProc 함수를 사용 하 여 원래 창 프로시저를 호출 해야 합니다.

다음 예제에서는 어떻게 서브 클래스 편집의 인스턴스 제어 대화 상자에서. 하위 창 프로시저 편집 컨트롤에서 컨트롤에 입력된 포커스가 때마다 enter와 tab 키를 포함 하 여 모든 키보드 입력을 받을 수 있도록.

WNDPROC wpOrigEditProc; 
 
LRESULT APIENTRY EditBoxProc (
    HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit; 
 
    switch(uMsg) {WM_INITDIALOG 경우: / / 편집 컨트롤에 대 한 핸들을 검색 합니다. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / 서브 클래스 편집 제어. 
            wpOrigEditProc = (WNDPROC) SetWindowLong (hwndEdit, GWL_WNDPROC, EditSubclassProc (LONG)); 
            / / / / 초기화 절차를 계속 합니다. 
            / / TRUE를 반환 합니다. 
 
        WM_DESTROY 사례: / / 서브 클래스 편집 컨트롤에서 제거 합니다. 
            SetWindowLong (hwndEdit, GWL_WNDPROC, (LONG) wpOrigEditProc); 
            / / / / 정리 절차를 계속 합니다. 
            / / 휴식; 
    } FALSE; 반환 
        UNREFERENCED_PARAMETER(lParam); 
} / / 하위 프로시저 LRESULT APIENTRY EditSubclassProc (
    HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {경우 (uMsg = WM_GETDLGCODE) DLGC_WANTALLKEYS; 반환 
 
    반환 CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 
 

 

Index