m_MemDC是一个类成员变量,CDC m_MemDC,
下面函数里的mdc进行SelectObject之后不知道该如何处理了,
m_MemDC.StretchBlt(rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top, &mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
以上这部分代码没把我想要的位图画到内存里去,谁指点一下?谢谢了!
void CMyDlg::UpdateMemDC(void)
{
CPaintDC dc(this);
CDC mdc;
mdc.CreateCompatibleDC(NULL);
for (int i=0; i<Y_TOTAL_BLOCKS; i++)
{
for (int j=0; j<X_TOTAL_BLOCKS; j++)
{
int state = m_blockMatrix[i][j].m_state;
BITMAP bm;
switch(state)
{
case ST_EMPTY:
mdc.SelectObject(m_bmpEmpty);
m_bmpEmpty.GetBitmap(&bm);
break;
case ST_DOUBT:
mdc.SelectObject(m_bmpDoubt);
m_bmpDoubt.GetBitmap(&bm);
break;
case ST_BOMB:
mdc.SelectObject(m_bmpBomb);
m_bmpBomb.GetBitmap(&bm);
break;
case ST_UNKNOWN:
mdc.SelectObject(m_bmpUnknown);
m_bmpUnknown.GetBitmap(&bm);
break;
case ST_ERROR:
mdc.SelectObject(m_bmpError);
m_bmpError.GetBitmap(&bm);
break;
default:
break;
}
LPRECT rc = &m_blockMatrix[i][j].m_rect;
m_MemDC.StretchBlt(rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top,
&mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
} CRect rect;
GetClientRect(&rect);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&m_MemDC,
0,0,SRCCOPY);
下面函数里的mdc进行SelectObject之后不知道该如何处理了,
m_MemDC.StretchBlt(rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top, &mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
以上这部分代码没把我想要的位图画到内存里去,谁指点一下?谢谢了!
void CMyDlg::UpdateMemDC(void)
{
CPaintDC dc(this);
CDC mdc;
mdc.CreateCompatibleDC(NULL);
for (int i=0; i<Y_TOTAL_BLOCKS; i++)
{
for (int j=0; j<X_TOTAL_BLOCKS; j++)
{
int state = m_blockMatrix[i][j].m_state;
BITMAP bm;
switch(state)
{
case ST_EMPTY:
mdc.SelectObject(m_bmpEmpty);
m_bmpEmpty.GetBitmap(&bm);
break;
case ST_DOUBT:
mdc.SelectObject(m_bmpDoubt);
m_bmpDoubt.GetBitmap(&bm);
break;
case ST_BOMB:
mdc.SelectObject(m_bmpBomb);
m_bmpBomb.GetBitmap(&bm);
break;
case ST_UNKNOWN:
mdc.SelectObject(m_bmpUnknown);
m_bmpUnknown.GetBitmap(&bm);
break;
case ST_ERROR:
mdc.SelectObject(m_bmpError);
m_bmpError.GetBitmap(&bm);
break;
default:
break;
}
LPRECT rc = &m_blockMatrix[i][j].m_rect;
m_MemDC.StretchBlt(rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top,
&mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
}
} CRect rect;
GetClientRect(&rect);
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&m_MemDC,
0,0,SRCCOPY);
显示第一张图的时候,使用memory dc ,SelectBitmap 改变其大小,然后StretchBlt到屏幕,
当我紧接着再SelectBitmap一副比较小的位图时,StretchBlt到屏幕,显示的就是错误的.
所以我不得不在第二次SelectBitmap之前先DeleteDC,再CreateCompatibleDC.
出现这种问题,我想应该是内存设备的大小影响的,后来也没再研究
谁知道怎么回事,给解答下啊....
m_MemDC.CreateCompatibleDC(NULL);
CRect rect;
GetClientRect(&rect);
m_Bmp.CreateCompatibleBitmap(&m_MemDC,BLOCK_WIDTH*X_TOTAL_BLOCKS,BLOCK_WIDTH*Y_TOTAL_BLOCKS);
::SelectObject(m_MemDC.GetSafeHdc(),m_Bmp);
m_MemDC.FillSolidRect(0,0,BLOCK_WIDTH*X_TOTAL_BLOCKS,BLOCK_WIDTH*Y_TOTAL_BLOCKS,0x00ffffff);