代码片-Demo 演示..

本文通过一个Demo展示了Direct7.h在实际应用中的使用,涵盖了关键功能和实现细节。
摘要由CSDN通过智能技术生成

Direct7.h

#ifndef ______G35IOSA__
#define ______G35IOSA__

#define _RGB32BIT(a,r,g,b)  ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))

#define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10))

#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))

#define _RGB24BIT(a,r,g,b)  ((b) + ((g) << 8) + ((r) << 16))

#include "g3x.h"

typedef struct TAGDIRECTRECT
{
    LONG    im_left   ;
    LONG    im_top    ;
    LONG    im_right  ;
    LONG    im_bottom ;
	LONG    wk_pos_x  ;
    LONG    wk_pos_y  ;
} GRAVERECT, *GPRECT ;

typedef struct DX7Graph_TAG
   {
	 LPDIRECTDRAWSURFACE7  Auxil_Surface   ;   
     DDSURFACEDESC2        Auxil_ddsd    ;   
	 UINT                  ExtraIO ;
	 RECT                  Hera ;
   } DX7Graph_STRUCT,*DX7Graph_STRUCT_PTR ;

struct INTS
{
  int x,y,height,width,Bit,L_BYTE ;
    
	unsigned char* image_PTR ;

	unsigned short IX_width,IX_height,IX_Pox_X,IX_Pox_Y ;

	   BITMAPFILEHEADER bitmapfileheader ;
       BITMAPINFOHEADER bitmapinfoheader ;

	 int (*Flip)(struct INTS*,unsigned char*,int,int) ;
	 int (*Load)(struct INTS*,LPWSTR) ;
     int (*Del)(struct INTS*) ; 
	void (*SetRECT)(struct INTS*,UINT,UINT,UINT,UINT,UINT,UINT) ;
	  RECT       INTS_RECT ;
	  GRAVERECT  Casion ;
} ;



void INTS_Slot(struct INTS*) ;

class DX7Graph : virtual public Gin
{
public:

     LPDIRECTDRAW7         lpdd ;
	 LPDIRECTDRAWSURFACE7  Source_Surface ;
	 LPDIRECTDRAWPALETTE   lpddpal     ;   
     LPDIRECTDRAWCLIPPER   lpddclipper ;   
     PALETTEENTRY          v_palette[256] ;        
     PALETTEENTRY          g_palette[256] ;     
     DDSURFACEDESC2        source_ddsd ;                  
     DDBLTFX               ddbltfx ;             
     DDSCAPS2              ddscaps ;              
     HRESULT               ddrval ;   
	 RECT                  source_RECT ;

	 DX7Graph::DX7Graph() ;
	 DX7Graph::~DX7Graph() ;

	 DWORD DX7Graph::InitMainSrf() ;
	 DWORD DX7Graph::InitAuxilSrf(DX7Graph_STRUCT&,bool,int) ;
	 DWORD DX7Graph::DirectDrawClipper(LPRECT) ;
	 DWORD DX7Graph::__24PixelPaint(INTS&,DX7Graph_STRUCT_PTR DX7 = NULL,UINT Pos_x = 0,UINT Pos_y = 0,UINT p_W = 0,UINT p_H = 0) ;
	 
protected:
private:

	vector <LPDIRECTDRAWSURFACE7> mT ;
	void   DX7Graph::Delete_DX7_STRUCT() ;
	DWORD  DX7Graph::ExchangeGL() ;
} ;

#endif
Direct7.cpp

#include "stdafx.h"
#include "GraphicsDevice.h"

extern HRESULT DIRECTEXTERMINATE ;

static int    mapper_Flip(struct INTS*,unsigned char*,int,int) ;

static int    mapper_Load(struct INTS*,LPWSTR) ; 

static int    mapper_Del(struct INTS*) ;

static void   mapper_SetRECT(struct INTS*,UINT,UINT,UINT,UINT,UINT,UINT) ;

static        UCHAR* CallBack_PTR = NULL ;

static        pSTK  V_K_S ;

static        ULONG V_W_Q ;

extern        RECT  DirectX_Window_Model_RECT ;

extern        RECT rectX ;

string         ClipperBitmapSize(UINT,UINT,UINT,UINT) ;

HRESULT       CheckDirectDrawError(HRESULT DIR_IVAS) // Error Msg
{
	switch(DIR_IVAS)
	{
    	case DDERR_DIRECTDRAWALREADYCREATED :
          MsgErr("DDERR_DIRECTDRAWALREADYCREATED","IDirectDraw7 0x88760232")
			  return DIR_IVAS ;

		case DDERR_GENERIC :
		  MsgErr("DDERR_GENERIC","IDirectDraw7 0x80004005")
			  return DIR_IVAS ;

        case DDERR_INVALIDDIRECTDRAWGUID:
		  MsgErr("DDERR_INVALIDDIRECTDRAWGUID","IDirectDraw7 0x88760231")
			  return DIR_IVAS ;

		case DDERR_INVALIDPARAMS:
		  MsgErr("DDERR_INVALIDPARAMS","IDirectDraw7 0x80070057")
			  return DIR_IVAS ;

        case DDERR_NODIRECTDRAWHW:
		  MsgErr("DDERR_NODIRECTDRAWHW","IDirectDraw7 0x88760233")
			  return DIR_IVAS ;

        case DDERR_OUTOFMEMORY:
		  MsgErr("DDERR_OUTOFMEMORY","IDirectDraw7 0x8007000E")
			  return DIR_IVAS ;

		case DDERR_EXCLUSIVEMODEALREADYSET:
		  MsgErr("DDERR_EXCLUSIVEMODEALREADYSET","IDirectDraw7 0x88760245")
			  return DIR_IVAS ;

        case DDERR_INVALIDOBJECT:
		  MsgErr("DDERR_INVALIDOBJECT","IDirectDraw7 0x88760082")
			  return DIR_IVAS ;

		case DDERR_OUTOFVIDEOMEMORY:
		  MsgErr("DDERR_OUTOFVIDEOMEMORY","IDirectDraw7 0x8876017C")
			  return DIR_IVAS ;

		case DDERR_PRIMARYSURFACEALREADYEXISTS:
		  MsgErr("DDERR_PRIMARYSURFACEALREADYEXISTS","IDirectDraw7 0x88760234")
			  return DIR_IVAS ;
		  
		default:
		  MsgErr("Unknown Error","IDirectDraw7 Unknown")
			  return DIR_IVAS ;
	}
}

/*-----------------------------------------------------------

       懒得写的了 .... 太多了 .. 自己去看 DirectX SDK文档吧...

       DDERR_INCOMPATIBLEPRIMARY    0x8876005F
       DDERR_INVALIDCAPS            0x88760064
       DDERR_INVALIDPIXELFORMAT     0x88760091
       DDERR_NOALPHAHW              0x887600B4
       DDERR_NOCOOPERATIVELEVELSET  0x887600D4
       DDERR_NODIRECTDRAWHW         0x88760233
       DDERR_NOEMULATION            0x88760235

--------------------------------------------------------------*/

DX7Graph::DX7Graph() // 构造函数 填NULL  初始化 DDSURFACEDESC2 Struct
{
	 lpdd           = NULL ;
	 Source_Surface = NULL ;
	 lpddpal        = NULL ;   
     lpddclipper    = NULL ;   
     ddrval         = 0 ; 

     _asm0(source_ddsd) ;                  

	 RtlZeroMemory(v_palette,1024) ;
	 RtlZeroMemory(g_palette,1024) ;
}

DWORD DX7Graph::InitMainSrf() // 初始化主表面..
{
	if (FAILED(DirectDrawCreateEx(NULL,(void**)(&lpdd),IID_IDirectDraw7,NULL)))
	{
	    __asm MOV DIRECTEXTERMINATE,EAX
	  CheckDirectDrawError(DIRECTEXTERMINATE) ;
	}

      if (FAILED(lpdd->SetCooperativeLevel(hWnd,DDSCL_NORMAL)))

	        {
	             __asm MOV DIRECTEXTERMINATE,EAX
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值