I'm writing a program that will display bitmaps in its view. It is a view without a document. When the CBitmap does the LoadBitmap(nID) function, the CGDIObject does not initialize the CBitmap object and obtain the m_hObject value - it remains NULL. I have used the exact same code elsewhere, and it works fine, can anyone tell me how it may work in one place, and not another?
Here is some of the code:
Code:
in CChildView.h file derived from CView
CBitmap
m_bmpServer_0,
m_bmpServer_1,
m_bmpServer_2,
m_bmpServer_3,
m_bmpServer_4,
m_bmpServer_5;
==================================================
in CChildView.cpp file in init() function
// fails to initialize, CGDIObject m_hObject = NULL
m_bmpServer_0.LoadBitmap( IDB_SERVER0 );
m_bmpServer_1.LoadBitmap( IDB_SERVER1 );
m_bmpServer_2.LoadBitmap( IDB_SERVER2 );
m_bmpServer_3.LoadBitmap( IDB_SERVER3 );
m_bmpServer_4.LoadBitmap( IDB_SERVER4 );
m_bmpServer_5.LoadBitmap( IDB_SERVER5 );
==================================================
in CChildView.cpp file in OnDraw(CDC* pDC) function
CBitmap *
pBitmap[] =
{
&m_bmpServer_0,
&m_bmpServer_1,
&m_bmpServer_2,
&m_bmpServer_3,
&m_bmpServer_4,
&m_bmpServer_5,
};
BITMAP
bm;
CDC
dcMem;
int
i,
nOffSet,
nYpos;
dcMem.CreateCompatibleDC(pDC);
for ( i = 1; i < 7; i++ )
{
nOffSet = (i - 1) * 115;
pBitmap[i]->GetObject( sizeof(BITMAP), &bm );
dcMem.SelectObject(pBitmap[i]);
nYpos = 76 + nOffSet;
pDC->BitBlt( 10, nYpos, bm.bmWidth, bm.bmHeight, &dcMem, 0, 0, SRCCOPY );
}
dcMem.DeleteDC();
... When the CBitmap does the LoadBitmap(nID) function, the CGDIObject does not initialize the CBitmap object and obtain the m_hObject value - it remains NULL.
Did you check the return value of LoadBitmap? Isn't it zero (FALSE)?
Does your resource file contain these bitmaps?
Are the resource IDs in the resource file the same as you use in your CChildView class?
The return from the LoadBitmap() is FALSE (0), should be returning TRUE (1). The resource,h contains all of the resource ID's they are all correct and accurate, and the same as I am using in CChildView. The indices are correct, and work fine in another project. This really has ma stumped.
Thank you so much for your assistance, I really do appreciate it.
I took a closer to the resource info, and found a very interesting dilema. resource has the exact same resource ID's with the correct values, however, when I open the Resource ID editor (right-click on .rc file and select "Resource ID") the data names are exactly the same, but all of the values are different. I have never seen anything like this before. I have corrected the value discrepancies, and now it works fine. Thank you for mentioning the resources as this drew me in to look closer.
I took a closer to the resource info, and found a very interesting dilema. resource has the exact same resource ID's with the correct values, however, when I open the Resource ID editor (right-click on .rc file and select "Resource ID") the data names are exactly the same, but all of the values are different. I have never seen anything like this before. I have corrected the value discrepancies, and now it works fine. Thank you for mentioning the resources as this drew me in to look closer.
You still didn't answer Philip.
Those indices are not correct. You have a buffer overrun. Whether they "work" in another project doesn't matter. When you overrun the array buffer, anything can happen, including "working", crashing, working today and not tomorrow, etc.
Bookmarks