小弟学了点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);
请各位帮看看是不是双缓存过程的哪里出了逻辑错误,多写啦
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);
请各位帮看看是不是双缓存过程的哪里出了逻辑错误,多写啦
解决方案 »
- 请教各位大侠,目前开发windows桌面程序通常用什么开发语言,与开发环境。
- 关于系统资源内存泄露的一些疑问(GDI的对象的正确使用方法)
- VC怎么打开文件夹
- winsows下,用pcap_findalldevs_ex()的错误
- 100分求解,编译的OCX在别的电脑上注册不上,提示找不到指定的模块
- 关于组框(group bcx)的用处
- 求助:一个文件位置的问题
- SetScrollInfo( hwnd, SB_VERT, &si, TRUE );
- 请各位介绍VC书籍
- iProgram(我不是机器人)、farwind(远风)、zhakewei(天外有天),进来拿分。
- 这家伙对篮球好痴迷
- 【求助】实时图像旋转90度出现的问题,有图,谢谢大家
我试了下把rect1变小了些,也不行。rect1是用来显示emf,缩放的时候还必须变大,好像是没有缩放用的函数,只能把rect1写大一点。之前我在一个hdc里画,直接显示就是好的,就是有闪烁,加了中间的MemDC后就显示不出来了。
CRect wndRect;
this->GetClientRect(wndRect);
memDC.CreateCompatibleDC(&dc);
memBmp.CreateCompatibleBitmap(&dc, wndRect.Width(), wndRect.Height());
CBitmap* pOldBmp = memDC.SelectObject(&memBmp);
width(),height()是当前欲绘制的hdc所在窗口的长宽。
MemDC是实现双缓存用的记忆HDC,