Re: resource files and the CPicture
Assuming that you are using Visual Studio and you are writing VC++/MFC
application.
Create a new project/open your project. From the menu select View->Resource
View. You should see a tab where Solution Explorer is also displayed.
Expand the item that is the same as your project's name and whala your
resource. You can add resources, you can remove resources, and so on.
In order to add the Jpg, write click somewhere in the resource view, select
Add Resource, then click the Import... Button, and import the jpg. When it
asks for a Resource type, type in JPG
It then opens it in a hex viewer window, close that!
Then you can load it into a CImage object like this.
CResourceStream Stream(0,MAKEINTRESOURCE(IDR_JPG1),_T("JPG"));
CImage Image;
Image.Load(&Stream);
//and here is the part to attach it to a picture control (static control),
m_PictureCtrl.SetBitmap(Image.Detach());
in order to get the m_PictureCtrl variable, you need to give the picture
control an ID other than IDC_STATIC, then right click on it and select Add
Variable. When you give you variable a name and press OK, that is the name
you use in place of m_PictureCtrl.
Here is the CResourceStream class. (I'm sorry I don't remember where it
came from, the file doesn't have any information about the author either)
#pragma once
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.
"MC Felon" <paec.nwa@gmail.com> wrote in message
news:4582a1c1-be7b-4bc2-829f-7fccfe724a20@v4g2000hsf.googlegroups.com...
Hello all
I want to know how exactly to edit my project resource file. To begin
with i have no idea what a resource file is.
Google has not been much help... Then i want to know how to include a
jpg in my rc and load and display it using the CPicture object.
Thanks a bunch in advance!