200分!谁有dx transform 原代码??help!! dx 文档资料里面没有说明啊!谁能帮我?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /************************************************************************************************************ THIS FUNCTION DESIGN BY WYLING MUST USE CoInitialze(NULL); and CoUninitialize(); INCLUDE:#include "ddraw.h" //#include <DXTrans.h> //#include <DXTGuid.c> //#include <DXBounds.h> #include <DXHelper.h> //#include <DXTError.h> //#include <dxtmsftguid.h> * LIB: kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib *************************************************************************************************************/#define SafeRelease(x) if (x) { x->Release(); x=NULL;}class DXTRANS{public: LPDIRECTDRAW lpDD; IDXSurface* lpDDSPrimary; IDXSurface* lpOutputSurface; IDXSurfaceFactory* lpSurfaceFactory; IDXTransformFactory* lpTransformFactory; IDXTransform* lpTransform; IDXEffect* lpDXEffect; DXTRANS() { lpDD = NULL; lpDDSPrimary = NULL; lpOutputSurface = NULL; lpSurfaceFactory = NULL; lpTransformFactory = NULL; lpTransform = NULL; lpDXEffect = NULL; } ~DXTRANS() { Cleanup(); } bool InitDDraw(HWND hWnd)//初始化DirectDraw组件,使lpDD有效 { HRESULT ddrval; ddrval = DirectDrawCreate(NULL, &lpDD, NULL); if (ddrval != DD_OK){return false;} ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL); if (ddrval != DD_OK){return false;} return true; }/************************************************************************************************************** const CLSID CLSID_effect1 = {0xAF279B30,0x86EB,0x11D1,0x81,0xBF,0x00,0x00,0xF8,0x75,0x57,0xDB};//抹去 const CLSID CLSID_effect2 = {0xAA0D4D03,0x06A3,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//波浪 const CLSID CLSID_effect3 = {0xAA0D4D0A,0x06A3,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//液体流过 const CLSID CLSID_effect4 = {0x3F69F351,0x0379,0x11D2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//方块分割 const CLSID CLSID_effect5 = {0x107045C8,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//向两边扩散 const CLSID CLSID_effect6 = {0x0E6AE022,0x0C83,0x11D2,0x8C,0xD4,0x00,0x10,0x4B,0xC7,0x5D,0x9A};//虫孔 const CLSID CLSID_effect7 = {0x107045CA,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//透镜 const CLSID CLSID_effect8 = {0x16B280C5,0xEE70,0x11D1,0x90,0x66,0x00,0xC0,0x4F,0xD9,0x18,0x9D};//退色 const CLSID CLSID_effect9 = {0x2A54C908,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//Color退色 const CLSID CLSID_effect10 ={0x2A54C90B,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//吹风 const CLSID CLSID_effect11 ={0xAA0D4D0C,0x06A3,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//剥落 const CLSID CLSID_effect12 ={0x107045D1,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//黑色的晕 const CLSID CLSID_effect13 ={0x00C429C0,0x0BA9,0x11d2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//卷连门 const CLSID CLSID_effect14 ={0xC3BDF740,0x0B58,0x11d2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//从中间向两边扩散 const CLSID CLSID_effect15 ={0x9C61F46E,0x0530,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//卷动 const CLSID CLSID_effect16 ={0x7658F2A2,0x0A83,0x11d2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//拉伸 const CLSID CLSID_effect17 ={0x107045C5,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//左右摇摆的波浪 const CLSID CLSID_effect18 ={0x2A54C915,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//侵蚀 const CLSID CLSID_effect19 ={0x2A54C904,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//峡口***************************************************************************************************************/ bool InitDTransform(int cx,int cy,REFCLSID transStyle)//cx,cy表示输出界面的大小 { CDXDBnds ImageBounds; HRESULT hres, ddrval; hres = CoCreateInstance(CLSID_DXTransformFactory,NULL,CLSCTX_INPROC,IID_IDXTransformFactory,(void**)&lpTransformFactory); if (hres != S_OK){return false;} hres = lpTransformFactory->QueryInterface(IID_IDXSurfaceFactory,(void**)&lpSurfaceFactory); if (hres != S_OK){return false;} hres = lpTransformFactory->CreateTransform( NULL,0,NULL,0,NULL,NULL,transStyle,IID_IDXTransform,(void**)&lpTransform); if (hres != S_OK){return false;} hres = lpTransform->QueryInterface(IID_IDXEffect,(void**)&lpDXEffect); if (hres != S_OK){return false;} ImageBounds.SetXYSize(cx, cy); hres = lpSurfaceFactory->CreateSurface( NULL,NULL,&DDPF_PMARGB32,&ImageBounds,0,NULL,IID_IDXSurface,(void**)&lpOutputSurface); if (hres != S_OK){return false;} DDSURFACEDESC ddsd; ZeroMemory(&ddsd,sizeof(ddsd)); ddsd.dwSize = sizeof(ddsd); ddsd.dwFlags = DDSD_CAPS; ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE; ddrval=lpSurfaceFactory->CreateSurface(NULL,&ddsd,NULL,NULL,0,NULL,IID_IDXSurface,(void **)&lpDDSPrimary); if (ddrval != DD_OK){return false;} return true; } bool SetupTransform(IUnknown **in,int inNum)//用法: IUnknow *in[2];in[0]=(IDXSurface). { HRESULT hres; IUnknown* out[1]; out[0] = lpOutputSurface; hres = lpTransform->Setup(in, inNum, out, 1, 0); if (hres != S_OK){return false;} return true; } bool LoadDXSurface(char FileName[256],IDXSurface** surface) { HRESULT hres; WCHAR WFileName[256]; mbstowcs(WFileName, FileName, 256); SafeRelease((*surface)); if (lpSurfaceFactory == NULL){return false;} hres = lpSurfaceFactory->LoadImage(WFileName,NULL,NULL,NULL,IID_IDXSurface,(void**)surface); if (hres != S_OK){return false;} return true; } bool RunImageTransform(float step,DXVEC desc,DXBNDS src)//step应该是1.0的倍数 //desc:目标坐标 CDXDVec Placement( (WindowWidth - width)/2, (WindowHeight - height)/2, 0, 0 ); //src: 源距形 CDXDBnds PortionBnds(width, height); { HRESULT hres; DXVEC TransformPlacement = { DXBT_DISCRETE, 0 }; if (lpOutputSurface == NULL){return false;} hres = DXFillSurface(lpOutputSurface, 0x0, FALSE); if (hres != S_OK) return false; static float progress=0.0f,add=step; progress += add; if (progress > 1.0f) { add = (-step); progress = 1.0f; } if (progress < 0.0f) { add = step; progress = 0.0f; } lpDXEffect->put_Progress(progress);// 0:代表第一个图形 1:代表第二个图形 hres = lpTransform->Execute(NULL,NULL,&TransformPlacement); hres = lpSurfaceFactory->BitBlt( lpDDSPrimary,&desc,lpOutputSurface,&src,DXBOF_DO_OVER); if (hres != S_OK)return false; return true; } void Cleanup() { SafeRelease(lpDDSPrimary); SafeRelease(lpOutputSurface); SafeRelease(lpSurfaceFactory); SafeRelease(lpTransform); SafeRelease(lpTransformFactory); SafeRelease(lpDD); }};只实现了几个效果,你看看DX的文档资料,里面有说明 CEdit 字体设置问题 Motion JPEG 格式中的jpg数据中可以带Exif?我找不到FFE1(exif的maker) 如何把对话框设置成最顶层的 关于内存泄漏 工作与作品和文凭的关系 ????? 谁能提供《vc++编程高手》光盘所附源代码,300百分等着你~~ 什么是hook程序,怎样使用?在先等待 数据库操作时出现游标错误,什么原因呀? 请问例如在IE中的工具条上添加按钮是如何实现得,怎样映射消息呢 关于软件发布的问题` DX transform问题,wyljery来领分 如何得到窗体中 具有“焦点”的控件?
THIS FUNCTION DESIGN BY WYLING
MUST USE CoInitialze(NULL); and CoUninitialize();
INCLUDE:#include "ddraw.h"
//#include <DXTrans.h>
//#include <DXTGuid.c>
//#include <DXBounds.h>
#include <DXHelper.h>
//#include <DXTError.h>
//#include <dxtmsftguid.h>
* LIB: kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ddraw.lib
*************************************************************************************************************/
#define SafeRelease(x) if (x) { x->Release(); x=NULL;}class DXTRANS
{
public:
LPDIRECTDRAW lpDD;
IDXSurface* lpDDSPrimary;
IDXSurface* lpOutputSurface;
IDXSurfaceFactory* lpSurfaceFactory;
IDXTransformFactory* lpTransformFactory;
IDXTransform* lpTransform;
IDXEffect* lpDXEffect; DXTRANS()
{
lpDD = NULL;
lpDDSPrimary = NULL;
lpOutputSurface = NULL;
lpSurfaceFactory = NULL;
lpTransformFactory = NULL;
lpTransform = NULL;
lpDXEffect = NULL;
} ~DXTRANS()
{
Cleanup();
}
bool InitDDraw(HWND hWnd)//初始化DirectDraw组件,使lpDD有效
{
HRESULT ddrval;
ddrval = DirectDrawCreate(NULL, &lpDD, NULL);
if (ddrval != DD_OK){return false;}
ddrval = lpDD->SetCooperativeLevel(hWnd, DDSCL_NORMAL);
if (ddrval != DD_OK){return false;}
return true;
}
/**************************************************************************************************************
const CLSID CLSID_effect1 = {0xAF279B30,0x86EB,0x11D1,0x81,0xBF,0x00,0x00,0xF8,0x75,0x57,0xDB};//抹去
const CLSID CLSID_effect2 = {0xAA0D4D03,0x06A3,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//波浪
const CLSID CLSID_effect3 = {0xAA0D4D0A,0x06A3,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//液体流过
const CLSID CLSID_effect4 = {0x3F69F351,0x0379,0x11D2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//方块分割
const CLSID CLSID_effect5 = {0x107045C8,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//向两边扩散
const CLSID CLSID_effect6 = {0x0E6AE022,0x0C83,0x11D2,0x8C,0xD4,0x00,0x10,0x4B,0xC7,0x5D,0x9A};//虫孔
const CLSID CLSID_effect7 = {0x107045CA,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//透镜
const CLSID CLSID_effect8 = {0x16B280C5,0xEE70,0x11D1,0x90,0x66,0x00,0xC0,0x4F,0xD9,0x18,0x9D};//退色
const CLSID CLSID_effect9 = {0x2A54C908,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//Color退色
const CLSID CLSID_effect10 ={0x2A54C90B,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//吹风
const CLSID CLSID_effect11 ={0xAA0D4D0C,0x06A3,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//剥落
const CLSID CLSID_effect12 ={0x107045D1,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//黑色的晕
const CLSID CLSID_effect13 ={0x00C429C0,0x0BA9,0x11d2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//卷连门
const CLSID CLSID_effect14 ={0xC3BDF740,0x0B58,0x11d2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//从中间向两边扩散
const CLSID CLSID_effect15 ={0x9C61F46E,0x0530,0x11D2,0x8F,0x98,0x00,0xC0,0x4F,0xB9,0x2E,0xB7};//卷动
const CLSID CLSID_effect16 ={0x7658F2A2,0x0A83,0x11d2,0xA4,0x84,0x00,0xC0,0x4F,0x8E,0xFB,0x69};//拉伸
const CLSID CLSID_effect17 ={0x107045C5,0x06E0,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//左右摇摆的波浪
const CLSID CLSID_effect18 ={0x2A54C915,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//侵蚀
const CLSID CLSID_effect19 ={0x2A54C904,0x07AA,0x11D2,0x8D,0x6D,0x00,0xC0,0x4F,0x8E,0xF8,0xE0};//峡口
***************************************************************************************************************/ bool InitDTransform(int cx,int cy,REFCLSID transStyle)//cx,cy表示输出界面的大小
{
CDXDBnds ImageBounds;
HRESULT hres, ddrval;
hres = CoCreateInstance(CLSID_DXTransformFactory,NULL,CLSCTX_INPROC,IID_IDXTransformFactory,(void**)&lpTransformFactory);
if (hres != S_OK){return false;}
hres = lpTransformFactory->QueryInterface(IID_IDXSurfaceFactory,(void**)&lpSurfaceFactory);
if (hres != S_OK){return false;}
hres = lpTransformFactory->CreateTransform( NULL,0,NULL,0,NULL,NULL,transStyle,IID_IDXTransform,(void**)&lpTransform);
if (hres != S_OK){return false;}
hres = lpTransform->QueryInterface(IID_IDXEffect,(void**)&lpDXEffect);
if (hres != S_OK){return false;}
ImageBounds.SetXYSize(cx, cy);
hres = lpSurfaceFactory->CreateSurface( NULL,NULL,&DDPF_PMARGB32,&ImageBounds,0,NULL,IID_IDXSurface,(void**)&lpOutputSurface);
if (hres != S_OK){return false;}
DDSURFACEDESC ddsd;
ZeroMemory(&ddsd,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS;
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
ddrval=lpSurfaceFactory->CreateSurface(NULL,&ddsd,NULL,NULL,0,NULL,IID_IDXSurface,(void **)&lpDDSPrimary);
if (ddrval != DD_OK){return false;}
return true;
}
bool SetupTransform(IUnknown **in,int inNum)//用法: IUnknow *in[2];in[0]=(IDXSurface).
{
HRESULT hres;
IUnknown* out[1];
out[0] = lpOutputSurface;
hres = lpTransform->Setup(in, inNum, out, 1, 0);
if (hres != S_OK){return false;}
return true;
}
bool LoadDXSurface(char FileName[256],IDXSurface** surface)
{
HRESULT hres;
WCHAR WFileName[256];
mbstowcs(WFileName, FileName, 256);
SafeRelease((*surface));
if (lpSurfaceFactory == NULL){return false;}
hres = lpSurfaceFactory->LoadImage(WFileName,NULL,NULL,NULL,IID_IDXSurface,(void**)surface);
if (hres != S_OK){return false;}
return true;
}
bool RunImageTransform(float step,DXVEC desc,DXBNDS src)//step应该是1.0的倍数
//desc:目标坐标 CDXDVec Placement( (WindowWidth - width)/2, (WindowHeight - height)/2, 0, 0 );
//src: 源距形 CDXDBnds PortionBnds(width, height);
{
HRESULT hres;
DXVEC TransformPlacement = { DXBT_DISCRETE, 0 };
if (lpOutputSurface == NULL){return false;}
hres = DXFillSurface(lpOutputSurface, 0x0, FALSE);
if (hres != S_OK) return false;
static float progress=0.0f,add=step;
progress += add;
if (progress > 1.0f)
{
add = (-step);
progress = 1.0f;
}
if (progress < 0.0f)
{
add = step;
progress = 0.0f;
}
lpDXEffect->put_Progress(progress);// 0:代表第一个图形 1:代表第二个图形
hres = lpTransform->Execute(NULL,NULL,&TransformPlacement);
hres = lpSurfaceFactory->BitBlt( lpDDSPrimary,&desc,lpOutputSurface,&src,DXBOF_DO_OVER);
if (hres != S_OK)return false;
return true;
} void Cleanup()
{
SafeRelease(lpDDSPrimary);
SafeRelease(lpOutputSurface);
SafeRelease(lpSurfaceFactory);
SafeRelease(lpTransform);
SafeRelease(lpTransformFactory);
SafeRelease(lpDD);
}
};只实现了几个效果,你看看DX的文档资料,里面有说明