#include "precomp.h"
#pragma hdrstop

extern HWND hWndShell;

/* LONG APIENTRY LDefSetupDlgProc(HWND hDlg, UINT wMsg, WORD wParam,
 *                                LPARAM lParam);
 *
 * Function acts as setup's DefDialogProc(). We use this to process Help and
 * Exit button usage so that we don't have to put code into each of our dialog
 * procs to do this. The way it works is we filter all the dialog message for
 * WM_COMMAND - IDC_H/ID_EXIT messages, these we process right here. The rest
 * of the messages are passed on to DefDialogProc().
 *
 * ENTRY: hDlg   - Handle to dialog box who received the focus.
 *        wMsg    - Message.
 *        wParam - Message dependent.
 *        lParam - Message dependent.
 *
 * EXIT:
 *
 */

INT_PTR APIENTRY
LDefSetupDlgProc(
    HWND   hDlg,
    UINT   wMsg,
    WPARAM wParam,
    LPARAM lParam
    )

{
    switch(wMsg) {

    case WM_KEYDOWN:

        switch(wParam) {

        case VK_F1:

            SendMessage(
                hDlg,
                WM_COMMAND,
                MAKELONG(IDC_H, BN_CLICKED),
                lParam
                );

            return ( 0L );

        case VK_F3:

            SendMessage(
                hDlg,
                WM_COMMAND,
                MAKELONG(IDC_X, BN_CLICKED),
                lParam
                );

            return ( 0L );

        default:

            break;
        }

        break;


    case WM_COMMAND:

        switch (LOWORD(wParam)) {

        case IDC_H:

            PostMessage(
                hWndShell,
                WM_COMMAND,
                MAKELONG(ID_HELPBUTTON, BN_CLICKED),
                0L
                );

            return( 0L );


        default:

            break;
        }

    default:

        break;


    }

    return( DefDlgProc( hDlg, wMsg, wParam, lParam ) );

}


BOOL
DlgDefClassInit(
    IN HANDLE hInst,
    IN BOOL   Init
    )

{
    WNDCLASS wc;

    if(Init) {

        /*  Register setup's own personal dialog class. We do this so that we
        *  can have generic help and exit buttons on all the setup dialogs
        *  that need them.
        */

        wc.hCursor       = LoadCursor(NULL,IDC_ARROW);
        wc.hIcon         = NULL;
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = CLS_MYDLGS;
        wc.hbrBackground = NULL;
        wc.hInstance     = hInst;
        wc.style         = CS_DBLCLKS | CS_SAVEBITS | CS_BYTEALIGNWINDOW | CS_GLOBALCLASS;
        wc.lpfnWndProc   = LDefSetupDlgProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = DLGWINDOWEXTRA;

        return ( RegisterClass(&wc) );

    } else {

        return(UnregisterClass(CLS_MYDLGS,hInst));
    }
}