BOOL DisplayResource()

in tools/ExeView/res.cpp [158:311]


BOOL DisplayResource ( PEXEINFO pExeInfo, PRESTYPE prt, PRESINFO pri )
{
    int      nErr = 0;
    RESPACKET rp;
    LPRESPACKET lprp = &rp;

    if (!LoadResourcePacket(pExeInfo, prt, pri, lprp))
        return FALSE;

    if (prt->wType & 0x8000)
    {
        switch (prt->wType & 0x7fff)
        {
            case NAMETABLE:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(NameTableProc, ghInst );
                nErr = !DialogBoxParam( ghInst, "NAMETABLE_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case GROUP_ICON:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(IconGroupProc, ghInst );

                // Re-use the NAMETABLE_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "NAMETABLE_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case GROUP_CURSOR:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(CursorGroupProc, ghInst );

                // Re-use the NAMETABLE_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "NAMETABLE_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case (int)RT_ACCELERATOR:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(AccelTableProc, ghInst );

                // Re-use the NAMETABLE_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "NAMETABLE_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case (int)RT_STRING:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(StringTableProc, ghInst );

                // Re-use the NAMETABLE_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "NAMETABLE_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case (int)RT_FONTDIR:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(FontDirProc, ghInst );

                // Re-use the NAMETABLE_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "NAMETABLE_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case (int)RT_ICON:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(ShowIconProc, ghInst );

                // Re-use the GRAPHIC_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "GRAPHIC_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case (int)RT_CURSOR:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(ShowCursorProc, ghInst );

                // Re-use the GRAPHIC_DLG with a different DlgProc
                nErr = !DialogBoxParam( ghInst, "GRAPHIC_DLG", ghWndMain, lpProc,
                    (LPARAM)lprp );
                FreeProcInstance( lpProc );
            }
            break;

            case (int)RT_MENU:
                ShowMenu( lprp );
            break;

            case (int)RT_BITMAP:
                ShowBitmap( lprp );
            break;

            case (int)RT_DIALOG:
            {
                DLGPROC lpProc;

                lpProc = MakeProcInstance(ShowDialogProc, ghInst );

                // NOTE: 16bit dialogs will not display at all on 32/64 bit Windows.  Just saying...

                nErr = DialogBoxIndirect(ghInst, (LPCDLGTEMPLATE)lprp->lpMem, ghWndMain,lpProc);
                FreeProcInstance( lpProc );
                if (nErr!=-1)
                    nErr = 0;
            }
            break;

            default:
                nErr = TRUE;
            break;
        }
        if (!nErr)
        {
            FreeResourcePacket(lprp);
            return TRUE;
        }
    }

    MessageBox(ghWndMain,"Unable to display resource!","EXEVIEW",MB_OK);
    FreeResourcePacket(lprp);
    return FALSE;

} //*** DisplayResource