15,979
社区成员
发帖
与我相关
我的任务
分享
void InitBackgroundImage(CDC* pDC)
{
if (m_nModMove==VIEW_MOD_MOVE)
return;
DestroyBackgroundImage();
CRect rectClient;
GetClientRect(&rectClient);
CDC dcBkgnd;
m_dcMemory.CreateCompatibleDC(pDC);
ASSERT(m_dcMemory.GetSafeHdc());
m_bitmapTemp.CreateCompatibleBitmap(pDC,m_nScreenWidth, m_nScreenHeight);
ASSERT(m_bitmapTemp.GetSafeHandle());
m_pOldBitmap = m_dcMemory.SelectObject(&m_bitmapTemp);
m_dcMemory.FillSolidRect(0,0,m_nScreenWidth, m_nScreenHeight,VIEWCOLOR);
DrawBox(&m_dcMemory);//绘制自定义背景图
}
void OnPaint()
{
InitBackgroundImage(&dc);//回背景,背景不改变时不绘制
CDC dcMemory;
dcMemory.CreateCompatibleDC(&m_dcMemory);
CBitmap bmp;
bmp.CreateCompatibleBitmap(&m_dcMemory, m_nScreenWidth, m_nScreenHeight);
CBitmap *pOldBitmap = dcMemory.SelectObject(&bmp);
dcMemory.SetBkMode(TRANSPARENT);
dcMemory.BitBlt(0, 0, m_nScreenWidth, m_nScreenHeight, &m_dcMemory, 0, 0, SRCCOPY);//CDC拷贝
DrawMoveingBox(&dcMemory);//画移动的矩形
dc.BitBlt(0,0,m_nScreenWidth,m_nScreenHeight,&dcMemory,0,0,SRCCOPY);//绘制图片到主DC
dcMemory.SelectObject(pOldBitmap);
dcMemory.DeleteDC();
bmp.DeleteObject();
}
//DrawMoveingBox()里面是绘制移动的矩形,保存在m_vSelectCard向量中,测试的时候这个向量的size仅为1
int nBoxCount=m_vSelectCard.size();
for (int i=0;i<nBoxCount;i++)
{
//测试矩形
int l=m_vSelectCard[i].nCrdStartX;
int t=m_vSelectCard[i].nCrdStartY;
int r=m_vSelectCard[i].nCrdStartX+m_vSelectCard[i].nCrdWidth;
int b=m_vSelectCard[i].nCrdStartY+m_vSelectCard[i].nCrdHeight;
CRect BoxRect=CRect(l,t,r,b);
BoxRect.OffsetRect(-m_nScrollPos_X,-m_nScrollPos_Y);
pDC->FillSolidRect(BoxRect,SRECTCOLOR);
CPen pen(PS_SOLID,1,RCLINECOLORS);
CPen *pOldPen = pDC->SelectObject((&pen));
pDC->MoveTo(BoxRect.left,BoxRect.top);
pDC->LineTo(BoxRect.right,BoxRect.top);
pDC->LineTo(BoxRect.right,BoxRect.bottom);
pDC->LineTo(BoxRect.left,BoxRect.bottom);
pDC->LineTo(BoxRect.left,BoxRect.top);
pDC->SelectObject(pOldPen);
pen.DeleteObject();
pOldPen=NULL;
pDC->SetBkMode(TRANSPARENT);
}