directmanage.h
来自「应用程序向导已为您创建了这个 SH 应用程序。此应用程序不仅演示 Microso」· C头文件 代码 · 共 86 行
H
86 行
#pragma once
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib,"winmm.lib")
#include <windows.h>
#include <mmsystem.h>
#include <ddraw.h>
//#include <io.h>
class CDirectManage
{
public:
CDirectManage(void);
public:
~CDirectManage(void);
public:
//自定义DDraw变量
LPDIRECTDRAW m_lpDD; //DirectDraw对象
LPDIRECTDRAWSURFACE m_lpDDSPrimary; //主页面
LPDIRECTDRAWSURFACE m_lpDDSBack; //后台页面
LPDIRECTDRAWSURFACE m_lpDDSSour; //临时页面
LPDIRECTDRAWSURFACE m_lpDDSTemp;
LPDIRECTDRAWSURFACE m_lpDDSBackGround; // 背景页面
HWND m_hWnd;
//
WORD m_RMask, m_GMask, m_BMask; //颜色遮罩
BYTE m_RMove,m_GMove; //移动到最右边的位数
DWORD m_rgbMask, m_rgbTemp;
BOOL m_bIs555; //是否是555格式
WORD m_ColorKey16; //16位透明色
DWORD m_ColorKey; //32位透明色
DDSURFACEDESC m_ddsd;//离屏页面
//****************Lock 相关*********************
WORD *m_GraphBuffer; // 绘图缓冲区
int m_GraphPitch; // 缓冲区跨度
int m_GraphWidth; //页面宽度
int m_GraphHeight; //页面高度
public:
void SetDrawhWnd(HWND hWnd);
//初始化DirectDraw环境
BOOL InitDDraw(void);
HRESULT FreeDDraw( void );
//创建一个GDI裁减器
BOOL CreateClipper();
//创建页面
BOOL CreateBitmap(LPDIRECTDRAWSURFACE &lpTemp,int x,int y,LPCTSTR BitmapFile=NULL, DWORD MemoryFlag=DDSCAPS_SYSTEMMEMORY );
//获得位图文件的尺寸大小
BOOL LoadBitmapFileInfo(HWND hwnd, LPCTSTR filename, int &dx, int &dy);
//初始化失败的处理函数
BOOL initFail(LPCTSTR str);
public:
//显示一个bmp到一个页面
HRESULT DDReLoadBitmap(IDirectDrawSurface *pdds, LPCTSTR szBitmap);
//在一个页面上显示一个bmp图片
HRESULT DDCopyBitmap(IDirectDrawSurface *pdds, HBITMAP hbm, int x, int y, int dx, int dy);
//位图拷贝
void Blt(LPDIRECTDRAWSURFACE SS,int x,int y,LPDIRECTDRAWSURFACE DS,RECT rcRect,DWORD Flog);
//恢复系统页面
HRESULT restoreAll( void );
//直接在缓冲区中操作
BOOL BeginDraw(LPDIRECTDRAWSURFACE lpSur);
//关闭缓冲区
BOOL EndDraw(LPDIRECTDRAWSURFACE lpSur);
//以单色填充页面
void FillSurface(LPDIRECTDRAWSURFACE surf, DWORD color);
//以单色填充页面
void FillSurface(LPDIRECTDRAWSURFACE surf, WORD color);
//
WORD RGB16(WORD r, WORD g, WORD b);
WORD RGB16(DWORD color); //24位转16位
void ColorIn(int time=50, WORD Color=0);
void ColorOut(LPDIRECTDRAWSURFACE dest, int time=50);
//延时
void Delay(long time);
//更新到屏幕
void UpdateScreen(LPDIRECTDRAWSURFACE lpSurf, RECT DestRect);
//更新到屏幕
void _UpdateScreen(LPDIRECTDRAWSURFACE lpSurf, RECT DestRect);
//两个点的ALPHA混合(0-31)
WORD Alpha_Pixel(WORD sour, WORD dest, int alpha);
};
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?