兼容dc的问题(主要是bitblt)

iamdom 2011-10-07 02:56:13
在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);
...全文
91 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
巴斯_ 2011-10-26
  • 打赏
  • 举报
回复
pDC->BitBlt(0,k/2,800,-k,&mydc,0,k/2,SRCCOPY);
最后这一句的参数错了,将SRCCOPY改为SRCPAINT
g15896894 2011-10-13
  • 打赏
  • 举报
回复
直接画到pDC上面看看,别用兼容DC,假如还是有问题那就不是bitblt的问题了。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧