双缓冲的问题
我想在客户区画一个动态图形,为了消除抖动,我使用了双缓冲区
代码如下,怎么也画不上,经我跟踪发现,是函数BitBlt()没有发挥作用,可我不知为什么会出这样的毛病,?请大虾们指点。
void CVcgearView::OnDraw(CDC* pDC)
{
CVcgearDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CDC memDC;
memDC.CreateCompatibleDC(pDC);
myDraw(&memDC);
CRect rect;
GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,SRCCOPY);
DeleteDC(memDC);
// TODO: add draw code for native data here
}
问题点数:20、回复次数:9Top
1 楼abbot(yama)回复于 2003-09-04 00:12:16 得分 0
这应该不太难吧,怎么没人帮忙呢??Top
2 楼WQ771211(SyanSea)回复于 2003-09-05 17:26:21 得分 0
这是API的代码:
Dim hMemDC As Long, hBmp As Long
Dim hBrush As Long, hOldBrush As Long
hMemDC = CreateCompatibleDC(0) '用0代替NULL
hBmp = CreateCompatibleBitmap(hMemDC, 100, 100)
Call SelectObject(hMemDC, hBmp) '这句没把握
hBrush = CreateSolidBrush(RGB(255, 0, 0))
hOldBrush = SelectObject(hMemDC, hBrush)
Call Rectangle(hMemDC, 10, 10, 50, 50)
Call SelectObject(hMemDC, hOldBrush)
Call DeleteObject(hBrush)
Call BitBlt(Me.hdc, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY)
Call DeleteObject(hBmp)
Call ReleaseDC(0, hMemDC)
我的也有问题:为什么没有把红色的矩形画出来?好象只有黑白
Top
3 楼hiphop(小风)回复于 2003-09-05 18:01:16 得分 0
我也是用双缓冲 还是抖动~Top
4 楼hiphop(小风)回复于 2003-09-05 18:02:32 得分 0
我看过双缓冲的代码要用到2个CDC对象的Top
5 楼WQ771211(SyanSea)回复于 2003-09-05 18:05:37 得分 0
to hiphop(小风)
是不是用了InvalidaRect和UpdateWindow只类的东西,会每次把窗口刷白
想想,在动画的侦与侦之间插入一些空白侦,有什么后果,闪。。。Top
6 楼hiphop(小风)回复于 2003-09-05 23:52:31 得分 0
这个我没看过呀 不过网上有动画显示的例子 你去看看吧Top
7 楼hiphop(小风)回复于 2003-09-05 23:54:05 得分 0
我看过别人写的 也没用InvalidaRect和UpdateWindow呀
但就没抖动 再琢磨琢磨Top
8 楼everandforever(Forever)回复于 2003-09-06 02:58:04 得分 20
void CVcgearView::OnDraw(CDC* pDC)
{
CVcgearDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HDC hMemDC = ::CreateCompatibleDC(NULL);//创建兼容内存DC
HBITMAP hBmp = ::CreateCompatibleBitmap(pDC->m_hDC/*一定要创建和pDC兼容的DC*/, ... );
HBITMAP hOldBmp = ::SelectObject(hMemDC, hBmp);
myDraw(...);
CRect rect;
GetClientRect(&rect);
::BitBlt(pDC->m_hDC, 0,0,rect.Width(),rect.Height(),hMemDC,0,0,SRCCOPY);
//完工
::SelectObject(hMemDC, hOldBmp);
::DeleteObject(hBmp);
::DeleteDC(hMemDC);
}
Top
9 楼everandforever(Forever)回复于 2003-09-06 03:02:20 得分 0
"我的也有问题:为什么没有把红色的矩形画出来?好象只有黑白"
是因为:
hBmp = CreateCompatibleBitmap(hMemDC/*这个DC是黑白两色的*/, 100, 100)
所以你应该用 Me.hdc 这个DC来创建BITMAP.Top




