#ifndef MY_FRAME__HH__
#define MY_FRAME__HH__
#include <QtGui/QWidget> struct IDirect3D9;
struct IDirect3DDevice9; class QD3DWidget : public QWidget
{
Q_OBJECT public:
QD3DWidget( QWidget* pParent = NULL); ~QD3DWidget(); QSizePolicy sizePolicy() const { return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); }
QPaintEngine *paintEngine() const { return NULL; } protected:
void Setup(); void Close(); void paintEvent( QPaintEvent* pEvent); private:
IDirect3D9* mD3D;
IDirect3DDevice9* mDevice;
};
#endif
#include <QMessageBox>
#define WIN32_LEAN_AND_MEAN
#include <d3d9.h>
#include <d3dx9.h>
#include "MyFrame.h"
#pragma comment(lib, "d3dx9d.lib")
#pragma comment(lib, "d3d9.lib")
QD3DWidget::QD3DWidget( QWidget* pParent)
: QWidget( pParent)
{ mD3D = NULL;
mDevice = NULL; setMinimumSize( , );
setAttribute( Qt::WA_OpaquePaintEvent, true);
setAttribute( Qt::WA_PaintOnScreen, true); Setup();
} QD3DWidget::~QD3DWidget()
{
Close();
} void QD3DWidget::Setup()
{
HWND windowHandle = winId(); mD3D = Direct3DCreate9( D3D_SDK_VERSION);
if( NULL == mD3D)
QMessageBox::critical(this,
"ERROR",
"Failed to create D3D object",
QMessageBox::Ok); D3DPRESENT_PARAMETERS d3dpp; ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.hDeviceWindow = windowHandle; HRESULT hr = mD3D->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
windowHandle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,
&mDevice); if( FAILED( hr))
QMessageBox::critical(this,
"ERROR",
"Failed to create D3D device",
QMessageBox::Ok);
} void QD3DWidget::Close()
{
if( mDevice)
mDevice->Release();
if( mD3D)
mD3D->Release();
} void QD3DWidget::paintEvent( QPaintEvent* pEvent)
{
HRESULT hr = mDevice->Clear(, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(, , ), 1.0f, );
if( FAILED( hr))
QMessageBox::critical(this,
"ERROR",
"Failed to clear backbuffer.",
QMessageBox::Ok); mDevice->BeginScene(); mDevice->EndScene(); hr = mDevice->Present(NULL, NULL, NULL, NULL);
if( FAILED( hr))
QMessageBox::critical(this,
"ERROR",
"Failed to Present().",
QMessageBox::Ok); update();
}

Qt_DX的更多相关文章

随机推荐

  1. usaco 2.2.4 生日派对灯(最近写题碰到的,虽然知道现在写这个有点晚了)

    经过分析,他看似很多的开灯的方法其实合并起来就只有八个. 首先,一个开关在执行的时候只能按一次(因为你就算按了两次就相当于一次也没有按). 当一个都不按的时候  当然就只有一种:不按. 当按一下的时候 ...

  2. android 控件ui

    公共参数: android:id="@+id/text_view"  给当前控件定义了 一个唯一标识符如:text_view android:layout_width=" ...

  3. 伪AP检测技术研究

    转载自:http://www.whitecell-club.org/?p=310 随着城市无线局域网热点在公共场所大规模的部署,无线局域网安全变得尤为突出和重要,其中伪AP钓鱼攻击是无线网络中严重的安 ...

  4. Java 内部类 this

    内部类访问外部类的一个例子: public class Abc { private class Bc { public void print() { System.out.println(Abc.th ...

  5. JDK版本问题 发展史

    jdk是 Java 语言的软件开发工具包,主要用于移动设备.嵌入式设备上的java应用程序.JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).SE(J2 ...

  6. dplyr 数据操作 常用函数(1)

    上面介绍完dplyr中,几个主要的操作函数后,我们再进一步了解dplyr中那些函数可能我们会经常要用到. 这里主要根据dplyr包作者的书籍目录来把它列出来. 1.add_rownames 添加行名称 ...

  7. UML(Unified Modeling Language)同一建模语言

    wiki定义: UML is a general-purpose, developmental, modeling language in the field of software engineer ...

  8. Python基础知识学习_Day3

    一.字典用法 字典是一种key-value数据类型,通过key获取具体value的内容,字典的特性是无序.去重. 增删改查用法如下: 1.1基本增删改查操作 name = {"," ...

  9. maven构建这么慢,怎么改变?

    Apache Maven是当今非常流行的项目构建和管理工具,它把开发人员从繁杂的项目依赖关系处理事务中解放出来,完全自动化管理依赖问题.在Web应用开发过程中,通常我们会用到maven的archety ...

  10. Registry Workshop(注册表编辑器) V4.6.3 官方中文版

    软件名称: Registry Workshop(注册表编辑器)软件语言: 简体中文授权方式: 免费试用运行环境: Win7 / Vista / Win2003 / WinXP 软件大小: 1.1MB图 ...