兼容dc的问题(主要是bitblt)
在ondraw函数中写的,已经定义了一个成员变量CDC mydc,基本上正确,但是为什么在运行的时候,窗口的上半部分背景是很色的,我猜想可能是两个bitblt用得不正确的原因,看了很久没看懂,那位高手能帮一把,谢谢。。。
if (!mydc.m_hDC)
{
mydc.CreateCompatibleDC(pDC);
}
CRect clientrect;
GetClientRect(&clientrect);//得到的是像素点,绝对的值
LONG k=800*clientrect.bottom/clientrect.right;//利用比例确定窗口范围的y值,在这里要让窗口和视口的比例相同
pDC->SetMapMode(MM_ISOTROPIC);//让窗口的x轴的单位长和y轴的单位长相同
pDC->SetWindowExt(800,-k);//设定窗口的范围和方向,x轴网游,范围为0~800,y轴往上,范围为0~-k。
pDC->SetViewportExt(clientrect.right,clientrect.bottom);//设定视口的范围和方向,x轴往右,y轴玩下
pDC->SetViewportOrg(50,clientrect.bottom/2);//让窗口的坐标点移动到视口的中间
mydc.SetMapMode(MM_ISOTROPIC);//让窗口的x轴的单位长和y轴的单位长相同
mydc.SetWindowExt(800,-k);//设定窗口的范围和方向,x轴网游,范围为0~800,y轴往上,范围为0~-k。
mydc.SetViewportExt(clientrect.right,clientrect.bottom);//设定视口的范围和方向,x轴往右,y轴玩下
mydc.SetViewportOrg(50,clientrect.bottom/2);//让窗口的坐标点移动到视口的中间
CBitmap bit;
bit.CreateCompatibleBitmap(pDC,clientrect.Width(),clientrect.Height());
mydc.SelectObject(bit);
mydc.BitBlt(0,0,800,-k,pDC,0,0,SRCCOPY);
mydc.MoveTo(-50,0);
mydc.LineTo(750,0);
mydc.MoveTo(0,k/2);
mydc.LineTo(0,-k/2);
CPen pen1(PS_SOLID,0,RGB(255,0,0));
CPen* poldpen1=(CPen*)mydc.SelectObject(&pen1);
for (int i=1;i<=800/(m_numofpoint*increase);i++)
{
mydc.MoveTo(i*increase*m_numofpoint,k/2);
mydc.LineTo(i*increase*m_numofpoint,-k/2);
}
mydc.SelectObject(poldpen1);
CPen pen2(PS_DASH,0,RGB(0,255,0));
CPen* poldpen2=(CPen*)mydc.SelectObject(&pen2);
for (int j=0;j<=800/(m_numofpoint*increase);j++)
{
mydc.MoveTo((j+0.5)*increase*m_numofpoint,k/2);
mydc.LineTo((j+0.5)*increase*m_numofpoint,-k/2);
}
mydc.SelectObject(poldpen2);
if (isstart)
{
for (int i=0;i<m_time;i++)
{
mydc.MoveTo(i*increase,s1[m_time-i]);
mydc.LineTo((i+1)*increase,s1[m_time-i-1]);
}
}
CString str;
str.Format("周期是%d毫秒(ms)",m_t);
mydc.TextOut(600,-k/2+75,str);
str.Format("幅值是%d",m_y);
mydc.TextOut(600,-k/2+50,str);
str.Format("采样频率是%d毫秒(ms)",m_int);
mydc.TextOut(600,-k/2+25,str);
pDC->BitBlt(0,k/2,800,-k,&mydc,0,k/2,SRCCOPY);