小弟学了点Qt,由于不支持emf图片显示,只好调用win32 api。但是出现了闪烁问题,求各位MFC大神指点哪里出了问题,代码编译通过,但是什么都没画出来。
    HDC MemDC; // 定义一个内存显示设备对象
    rect1.setRect(0,0,width(),height());
    HWND hwnd = this->winId();//在Qt中得到窗口句柄
    HDC hdc = GetDC(hwnd);
    MemDC = CreateCompatibleDC(hdc);
    HBITMAP__* bmp = CreateCompatibleBitmap(MemDC,width(),height());
    SelectObject(MemDC,&bmp);
    HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255));
    SelectObject(MemDC, hBrush);
    Rectangle(MemDC,0,0,width(),height());
    PlayEnhMetaFile(MemDC,(HENHMETAFILE__*)h_emf,(RECT*)&rect1);
    BitBlt(hdc,0,0,width(),height(),MemDC,0,0,SRCCOPY);    
    DeleteDC(MemDC);
    DeleteObject(hBrush);
请各位帮看看是不是双缓存过程的哪里出了逻辑错误,多写啦

解决方案 »

  1.   


    我试了下把rect1变小了些,也不行。rect1是用来显示emf,缩放的时候还必须变大,好像是没有缩放用的函数,只能把rect1写大一点。之前我在一个hdc里画,直接显示就是好的,就是有闪烁,加了中间的MemDC后就显示不出来了。
      

  2.   

    HBITMAP__* bmp = CreateCompatibleBitmap(MemDC,width(),height());MemDC,width(),height() 这些参数是啥啊参考下
    CRect wndRect;
    this->GetClientRect(wndRect);
    memDC.CreateCompatibleDC(&dc);
    memBmp.CreateCompatibleBitmap(&dc, wndRect.Width(), wndRect.Height());
    CBitmap* pOldBmp = memDC.SelectObject(&memBmp);
      

  3.   


    width(),height()是当前欲绘制的hdc所在窗口的长宽。
    MemDC是实现双缓存用的记忆HDC,