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