您的位置:程序门 -> vc/mfc -> 界面



memdc绘图怪问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


memdc绘图怪问题[已结贴,结贴人:boman258]
发表于:2007-04-13 18:56:25 楼主
ondraw()中如果是这样:
crect   rc(0,   0,   6400,   12800);
cbrush   brush;
brush.createsolidbrush(rgb(0,255,0));
pdc-> fillrect(&rc,   &brush);
就没问题,如果用memdc,像这样:
crect   rc(0,   0,   6400,   12800);
if   (!m_pmemdc)
m_pmemdc   =   new   cmemdc(pdc,   &rc);
cbrush   brush;
brush.createsolidbrush(rgb(0,255,0));
m_pmemdc-> fillrect(&rc,   &brush);
pdc-> bitblt(0,   0,   200,   500,   m_pmemdc,   0,   0,   srccopy);
在原来应该绘制成绿色的区域,变成了一种很奇怪的花纹,不是纯色,也不是绿色,如果换成其他颜色的话,有可能变成白色,也可能变成其它的花纹,为什么?怎样解决?

memdc是这样的:
                cmemdc(cdc   *pdc,   crect   *prect   =   null,   cbitmap   *pbitmap   =   null)
{
assert(pdc);

bool   bc   =   createcompatibledc(pdc);
if   (!bc)
throwexception(exception_dc);

crect   rect;
if   (prect)
rect   =   *prect;
else
pdc-> getclipbox(&rect);

if   (pbitmap)
m_poldbmp   =   (cbitmap*)selectobject(pbitmap);
else
{
bc   =   m_bitmap.createcompatiblebitmap(this,   rect.width(),   rect.height());
if   (!bc)
throwexception(exception_dc);
m_poldbmp   =   (cbitmap*)selectobject(&m_bitmap);
}
if   (!m_poldbmp)
throwexception(exception_dc);
}
发表于:2007-04-13 20:26:511楼 得分:0
看起来你的memdc是从cdc中继承下来的,但是看起来好像有些问题。最好不要在构造函数里做太多的操作,像createcompatibledc和createcompatiblebitmap函数都有可能需要一个已经构造完成的类实例进行操作。

你可以试着新加一个函数,在里面进行你想要的操作。
发表于:2007-04-13 20:46:042楼 得分:0
你只给了memdc一个rect,没给存储结构,能绘出正常的图形吗?
我没这么用过,你的方法似乎不是很标准,能够画出东西来我已经感觉很奇怪了   -   -
mcmdc我一般都是给个已经构造好大小的bitmap,然后在bitmap上绘制,然后再在适当的时候把bitmap丢出来显示
发表于:2007-04-13 21:41:123楼 得分:0
memdc是从cdc继承的,基本上和网上流传的那个memdc一样,只根据我的程序的需求做了少量修改。
rect增加存储结构之后,显示还是没有改变
发表于:2007-04-14 09:13:554楼 得分:50
bc   =   m_bitmap.createcompatiblebitmap(pdc,   rect.width(),   rect.height());
发表于:2007-04-14 19:19:315楼 得分:0
用4楼的方法,bc返回false
发表于:2007-04-20 19:16:286楼 得分:0
用pdc来创建bitmap好像可以,但前提是只能创建客户区大小的bitmap,能不能创建大于客户区的bitmap?是否需要用getdc()得到的cdc来创建?
发表于:2007-04-20 21:10:097楼 得分:0
明白了,创建bmp时太大,内存不足


快速检索

最新资讯
热门点击