用directx画底图后,在ondraw中画其他东西,底图不见,why?

hbiczuo 2002-03-14 11:31:23
我现在用 directx 画一个 bmp 图,在画一些gdi的图形,但现在的现象是gdi的图形在,而底图没有出现,但拖动scrollbar,底图出现,gdi的图形没有了。

why ?


onpaint(),ondraw如下:


void CView::OnPaint()
{
CDoc * pDoc = GetDocument();

pDoc->DrawGraph(this); //画底图

CPaintDC dc(this); // device context for painting
OnPrepareDC(&dc,NULL);
OnDraw(&dc);
}

void CView::OnDraw(CDC* pDC)
{
CDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

CDC dc;
CDC* pDrawDC = pDC;
CBitmap bitmap;
CBitmap* pOldBitmap;

// only paint the rect that needs repainting
CRect client;

pDC->GetClipBox(client);
CRect rect = client;
DocToClient(rect);

if (!pDC->IsPrinting()) {
// draw to offscreen bitmap for fast looking repaints
if (dc.CreateCompatibleDC(pDC)) {
if (bitmap.CreateCompatibleBitmap(pDC, rect.Width(), rect.Height())){
OnPrepareDC(&dc, NULL);
pDrawDC = &dc;

// offset origin more because bitmap is just piece of the whole drawing
dc.OffsetViewportOrg(-rect.left, -rect.top);
pOldBitmap = dc.SelectObject(&bitmap);
dc.SetBrushOrg(rect.left % 8, rect.top % 8);

// might as well clip to the same rectangle
dc.IntersectClipRect(client);
}
}
}

pDoc->Draw(pDrawDC, this);

if (pDrawDC != pDC) {
pDC->SetViewportOrg(0, 0);
pDC->SetWindowOrg(0,0);
pDC->SetMapMode(MM_TEXT);
dc.SetViewportOrg(0, 0);
dc.SetWindowOrg(0,0);
dc.SetMapMode(MM_TEXT);
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),
&dc, 0, 0, SRCCOPY);
dc.SelectObject(pOldBitmap);
}

}
...全文
62 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
spark_zh 2002-03-14
  • 打赏
  • 举报
回复
把代码全写在OnDraw里面。
kimryo 2002-03-14
  • 打赏
  • 举报
回复
你需要用到GDI API的话直接用GetDC取得hdc再画就是了,不用在OnDraw里处理,不过注意ReleaseDC.
ATField 2002-03-14
  • 打赏
  • 举报
回复
不能把GDI与DirectX混用吧?要么都用GDI,要么都用DirectX,用DX时要用GDI就用DirectDrawSurface::GetDC()得到DC再用GDI函数。把代码都写在OnDraw中也许可以解决问题,但我觉得混用两者并不好。还请高手指点。
hbiczuo 2002-03-14
  • 打赏
  • 举报
回复
问题是一样的!

16,551

社区成员

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

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

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