Re: Anyway to COMPRESS RESOURCES???
 
You don't really need GDI+.
I have a bunch of JPGs in a projects resources, and I load them using a 
class called CResourceStream, and CImage.
CImage Image;
CResourceStream stream(NULL,MAKEINTRESOURCE(IDR_JPGIMAGE),_T("JPG"));
Image.Load(&stream);
Here is CResourceStream
class CResourceStream :   public IStream
{
public:
    BYTE *m_pArray;
    DWORD m_dwRead;
    DWORD m_dwLength;
    CResourceStream(HINSTANCE hInst, LPCTSTR name, LPCTSTR type)
    {
    m_pArray = 0;
    m_dwRead = m_dwLength = 0;
    HRSRC hRsrc = ::FindResource(hInst, name, type);
    if (!hRsrc) return;
    m_dwLength = SizeofResource(hInst, hRsrc);
    m_pArray = (BYTE*)LoadResource(0, hRsrc);
    if (!m_pArray) m_dwLength = 0;
    }
    STDMETHOD(Read)(void *pv, ULONG cb, ULONG *pcbRead)
    {
        if (!pv) return E_INVALIDARG;
        if (cb == 0) return S_OK;
        if (!m_pArray) return E_UNEXPECTED;
        BYTE *pCurr = m_pArray + m_dwRead;
        memcpy(pv, pCurr, cb);
        if (pcbRead) *pcbRead = cb;
        m_dwRead += cb;
        return S_OK;
    }
    STDMETHOD(Seek)(LARGE_INTEGER move , DWORD origin, ULARGE_INTEGER * pos)
    {
    switch (origin) {
      case STREAM_SEEK_SET: m_dwRead = move.LowPart; break;
      case STREAM_SEEK_CUR: m_dwRead += move.LowPart; break;
      default: return E_NOTIMPL;
    }
    if (pos) {
      pos->HighPart = 0;
      pos->LowPart = m_dwRead;
    }
    return S_OK;
    }
  STDMETHOD(QueryInterface)(REFIID iid, void **ppUnk)
    {
        *ppUnk = NULL;
        if (::InlineIsEqualGUID(iid, IID_IUnknown) ||
            ::InlineIsEqualGUID(iid, IID_ISequentialStream) ||
            ::InlineIsEqualGUID(iid, IID_IStream))
        {
            *ppUnk = (void*)(IStream*)this;
            AddRef();
            return S_OK;
        }
        return E_NOINTERFACE;
    }
  ULONG STDMETHODCALLTYPE AddRef( void)  throw()
    {
        return (ULONG)1;
    }
    ULONG STDMETHODCALLTYPE Release( void)  throw()
    {
        return (ULONG)1;
    }
    // Unimplemented
    STDMETHOD(Write)(const void* , ULONG , ULONG* ) { return E_UNEXPECTED; }
    STDMETHOD(SetSize)(ULARGE_INTEGER ) { return E_NOTIMPL; }
    STDMETHOD(CopyTo)(IStream *, ULARGE_INTEGER , ULARGE_INTEGER *, 
ULARGE_INTEGER *) { return E_NOTIMPL;    }
    STDMETHOD(Commit)(DWORD ) { return E_NOTIMPL; }
    STDMETHOD(Revert)() { return E_NOTIMPL; }
    STDMETHOD(LockRegion)(ULARGE_INTEGER , ULARGE_INTEGER , DWORD ) { return 
E_NOTIMPL; }
    STDMETHOD(UnlockRegion)(ULARGE_INTEGER , ULARGE_INTEGER , DWORD ) { 
return E_NOTIMPL; }
    STDMETHOD(Stat)(STATSTG *, DWORD ) { return E_NOTIMPL; }
    STDMETHOD(Clone)(IStream **) { return E_NOTIMPL; }
};
AliR.
"Somebody" <somebody@cox.net> wrote in message 
news:3HL3i.3622$gM1.3376@newsfe21.lga...
Is there any way to compress resources? My res directory is 1.7MB and 
1.4MB of that is from 4 files. 1 24bit BMP, 1 32bit BMP and 2 TTF files. I 
need to keep all 4 of these files embedded in my DLL. I'd like to avoid 
"heavy baggage" as that would defeat the purpose.
It looks like storing the 2 BMP files as PNG would knock off about 500k to 
600k.
But it seems like I'd have to use GDI+ (CImage class) to display them. I'd 
like to avoid that requirement as a larger DLL is better then that. 
Likewise I'd like to avoid bloated 3rd party libraries that'd bloat my DLL 
by the same amount I'm saving :).
And that doesn't solve the problem of the TTF files.