Qt一般是用来写界面,而当系统对图片绘制速度要求较高时,Qt自带的图像绘制引擎往往不能达到我们的要求,这个时候我们就需要更加底层的绘图API,如DiretDraw(DirectDraw已经很旧了,目前使用的是Direct3D)。
在DirectDraw中,可以使用如下函数,将绘制操作映射到指定的窗口:
// create IDirectDraw interface 7.0 object and test for error
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
return(0);
// set cooperation to full screen
if (FAILED(lpdd->SetCooperativeLevel(m_pWnd->GetSafeHwnd(), DDSCL_NORMAL | DDSCL_NOWINDOWCHANGES)))
return(0);
|
关于DirectDraw API的使用,可以参考《windows游戏编程大师技巧》第5-7章。
在MFC程序中,我们可以很容易的得到一个窗口的句柄pWnd,那如何在Qt程序获得Qt窗口(QWidget)的句柄呢?
很简单,直接调用winId()获得HWnd,然后通过FromHandle将HWnd转换成CWnd。
假设我们要在videoWidget(QWidget对象)上显示视频,调用如下代码即可。
m_ddraw = new MyDDraw(CWnd::FromHandle