/*
**
*    MainModle.cpp
*    Types Win32 & infos sur type integral correspondant
*
*    Utilise une listBox avec ImageList
*    Des editBox avec icone
*
*    Yannick Laussanne, 21 jan. 2007 Marseille.
**
*/

#include "Application.h"
#define APP Application


//
// Proc閐ure dialog principal
//

BOOL CALLBACK AppDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch( uMsg )
    {
    case WM_INITDIALOG:
        APP::OnInitDialog((HINSTANCE)lParam, hDlg);
        return TRUE;

    case WM_CTLCOLORSTATIC:
        return((BOOL)APP::OnCtlColorStatic(hDlg, wParam, lParam));

    case WM_CTLCOLOREDIT:
        return((BOOL)APP::OnCtlColorEdit(hDlg, wParam, lParam));

    case WM_DRAWITEM:
        if( (UINT)wParam == IDC_LIST1 )
        {
            return(APP::OnDrawListItem((LPDRAWITEMSTRUCT)lParam));
        }
        break;

    case WM_MEASUREITEM:
        if( (UINT)wParam == IDC_LIST1 )
        {
            ((LPMEASUREITEMSTRUCT)lParam)->itemHeight = CX_BITMAP + 1;
            return TRUE;
        }
        break;

    case WM_COMMAND:
    {
        switch( LOWORD(wParam) )
        {
        case IDC_QUITTER:
            SendMessage(hDlg, WM_CLOSE, 0, 0);
            break;
    
        case IDC_BTN_AJOUT:
            APP::OnAddNewTypedef(hDlg);
            break;

        case IDC_LIST1:
            if( HIWORD(wParam) == LBN_SELCHANGE ) 
            {
                APP::SetSelItem((int)SendDlgItemMessage(hDlg, IDC_LIST1, LB_GETCURSEL, 0, 0));
                APP::OnSelChange(hDlg);
            }
            break;
        }
    }    break;

    case WM_CLOSE:
        APP::OnCleanUp();
        EndDialog(hDlg, 0);
        return TRUE;
    }

    return FALSE;
}

//
//    WinMain()
//

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    InitCommonControls();
    return((int)DialogBoxParam(hInst, (LPCTSTR)IDD_DIALOG1, 0, AppDlgProc, (LPARAM)hInst));
}