15,979
社区成员
发帖
与我相关
我的任务
分享
void CCDPatternView::OnDraw(CDC* pDC)
{
CCDPatternDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码;
//自适应窗口,大于窗口调用滚动条;
CSize sizeTotal;
sizeTotal.cx =m_change.Width();
sizeTotal.cy =m_change.Height() ;
SetScrollSizes(MM_TEXT, sizeTotal);
m_ImageSize=sizeTotal;
//m_ImgHScrollPos;
//m_ImgVScrollPos;
//解决图像闪烁问题;
CRect client;
CRect rect_2;
CClientDC dc_1(this);
OnPrepareDC(&dc_1);
GetClientRect(&rect_2);
dc_1.DPtoLP(&rect_2);
GetClientRect(&client);
//dc_1.DPtoLP(&client);
long offsetx=client.Width()/2-(m_change.right-m_change.left)/2;//中心
long offsety=client.Height()/2-(m_change.bottom-m_change.top)/2;
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(NULL);
long x,y;
x=client.Width();
y=client.Height();
int a=((int)client.right/m_rate+1)*m_rate;
int b=((int)client.bottom/m_rate+1)*m_rate;
MemBitmap.CreateCompatibleBitmap(pDC,a,b);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(0,0,a,b,RGB(155,205,255));
//CRect partDIB;
//partDIB=m_rcDIB;
int PartrcDIBx=(int)client.right/m_rate+1;
int PartrcDIBy=(int)client.bottom/m_rate+1;
CPoint pt;
CSize sz(PartrcDIBx,PartrcDIBy);
CRect partDIB(pt,sz);//用于指定原图里要放大的区域;
int PartsrcDIBx=PartrcDIBx*(m_rate);
int PartsrcDIBy=PartrcDIBy*(m_rate);
CRect clientPro(0,0,PartsrcDIBx,PartsrcDIBy);//用于变成客户区大小(为了精确);
PaintDIB(MemDC.GetSafeHdc(),
0,
0,
clientPro,
// 0,0,client
pDoc->m_hDIB,
partDIB,
NULL,
SRCCOPY);
if(m_rate>=4) //大于4倍画网格
{
if (offsetx<0)
{
DrawGrid(&MemDC,client.right,m_change.bottom);
}
else if (offsety<0)
{
DrawGrid(&MemDC,m_change.right,client.bottom);
}
else if(offsetx>0&&offsety>0)
{
DrawGrid(&MemDC,m_change.right,m_change.bottom);
}
else
{
DrawGrid(&MemDC,client.right,client.bottom);
}
}
if (offsety>=0)
{
m_ImgVScrollPos=0;
m_ImgHScrollPos=rect_2.left;
}
else if(offsetx>=0)
{
m_ImgHScrollPos=0;
m_ImgVScrollPos=rect_2.top;//这个值;
}
else if (offsety>0&&offsety>0)
{
m_ImgHScrollPos=0;
m_ImgVScrollPos=0;
}
pDC->BitBlt(m_ImgHScrollPos,m_ImgVScrollPos,x,y,&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
UpdateRulersInfo(RW_VSCROLL, GetScrollPosition());
UpdateRulersInfo(RW_HSCROLL, GetScrollPosition());
}