I tried to show a png Image using CImage ( Visual Studio 2008 prof )
It works pretty good, but only in Release Mode. If I run it in Debug Mode
there is a Message:
"Debug Assertion Failed!
Program: ....[..]\application.exe
File: g:[...]\atlimage.h
Line: 503
Expression: m_hbitmap == 0
[..]
if I ignore the message the picture is schown. How can I avoid this Failure
My Code:
BOOL OK;
LPCTSTR lpBitSource=_T("D:\\Daten\\Visual Studio
2008\\Projects\\LitLaunchTestbox\\LitLaunch\\brett1.png");
CRect rect;
GetClientRect(&rect);
CWindowDC pDC(this);
CDC dc;
OK=m_Image.Load(lpBitSource);
dc.CreateCompatibleDC(&pDC);
m_Image.Draw(pDC.m_hDC,CRect(&rect));
Thanks for answers.
Manu
-Seetharam
You will want to support any images that you create with the CImage class
(or any other GDI+ functions) otherwise you will get resource leaks.
Tom
"Manuel Hoeger" <Manuel...@physik.stud.uni-erlangen.de> wrote in message
news:7u037s...@mid.dfncis.de...
>Hi,
>
>I tried to show a png Image using CImage ( Visual Studio 2008 prof )
>
>It works pretty good, but only in Release Mode. If I run it in Debug Mode
>there is a Message:
>
>"Debug Assertion Failed!
>Program: ....[..]\application.exe
>File: g:[...]\atlimage.h
>Line: 503
>
>Expression: m_hbitmap == 0
>[..]
****
It is pretty clear what this means. It means that the m_hBitmap member of the class MUST
be NULL, and it ISN'T NULL. Why not? Because you already have an image attached to it!
Nowhere did I see where m_Image is freeing the image.
Which leads to the question of why, in your OnDraw/OnPaint handler, you are storing the
image which you are just loading into a class member, instead of a local variable.
****
>
>
>if I ignore the message the picture is schown. How can I avoid this Failure
>
>My Code:
>
>BOOL OK;
> LPCTSTR lpBitSource=_T("D:\\Daten\\Visual Studio
>2008\\Projects\\LitLaunchTestbox\\LitLaunch\\brett1.png");
****
I presume the goal here is that this program will run correctly only today, on your
machine, and you never expect it to run anywhere else. Otherwise, hardwiring a path like
this in represents a serious problem.
****
> CRect rect;
> GetClientRect(&rect);
>
> CWindowDC pDC(this);
****
Do you really want a window DC? Why? Wouldn't CClientDC dc(this) be more appropriate?
****
> CDC dc;
> OK=m_Image.Load(lpBitSource);
****
Once it is loaded, it is loaded forever, and any attempt to load it again generates the
error you see. You must explicitly delete this image with CImage::Destroy, e.g., after
you draw it, you must do
m_Image.Destroy();
but why does m_Image exist at all? A local variable would be perfect for this!
****
> dc.CreateCompatibleDC(&pDC);
>
> m_Image.Draw(pDC.m_hDC,CRect(&rect));
****
I am presuming this is in your OnDraw/OnPaint handler. If it isn't, all of the above code
is incorrect. It would be correct only if it were in the OnDraw/OnPaint handler.
joe
****
>
>Thanks for answers.
>
>Manu
>
>
>
Joseph M. Newcomer [MVP]
email: newc...@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm