📄 graphics.h
字号:
#include <windows.h>
#include <windowsx.h>
#include <mmreg.h>
#include <stdio.h>
#include <ddraw.h>
#include <dinput.h>
#include <dsound.h>
#include <dplay.h>
#include <dplobby.h>
#ifndef _GRAPHICS_H_
#define _GRAPHICS_H_
////////// options //////////
// 打开这个选项,强行设置为555
// #define _SET_555
// 打开这个选项将关闭DirectInput对鼠标的支持
#define OFF_MOUSE_DIRECTINPUT
// 打开这个选项初始化为窗口模式
#define WINDOW_MODE
/////////////////////////////
#define NORMAL_BITMAP 0x1
#define PTR_BITMAP 0x2
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_PITCH 1280
#define SCREEN_SURFACE 153600
#define UPDATE_NORMAL 0x1
#define UPDATE_SHADOW 0x2
#define UPDATE_INTERVAL 0x3
#define FONT_NORMAL 0x1
#define FONT_SHADOW 0x2
#define FONT_HOLLOW 0x3
#define MAX_DEBUG_MSG 10 // 屏幕上最多能显示的信息数
#define MAX_DEBUG_CHAR 80 // 每条信息最多能显示的字符数
#define DEBUG_MSG_LEFT 50 // 信息在屏幕上的X坐标
#define DEBUG_MSG_TOP 50 // 最新的一条信息在屏幕上的Y坐标
#define DEBUG_MSG_SPACING 20 // 每一条信息的纵向间距
#define DEBUG_MSG_COLOR 0xffff // 调试信息的颜色
#define DEBUG_DELAY 100 // 每条信息显示多少次
#define DRAW_NORMAL 0x1
#define DRAW_OR 0x2
#define DRAW_XOR 0x3
#define DRAW_AND 0x4
#define DRAW_NOT 0x5
#define DRAW_ALPHA 0x6
#define DRAW_ADDITIVE 0x7
#define DATA_NORMALFILE 0x1
#define DATA_PACKFILE 0x2
#define PAINT_MOUSE_NORMAL 0x1
#define PAINT_MOUSE_ADDITIVE 0x2
#define MUSIC_IN_FILE 0x1
#define MUSIC_IN_PACKFILE 0x2
#define STATICTIME 10
#define STREAMTIME 20
#define SAMPLE_BUFFER_SIZE ((((SOUNDBPS * 2) >> 3) * SOUNDSPS * STATICTIME / 10) & 0xfffffff8)
#define MUSIC_BUFFER_SIZE ((SOUNDSPS * ((SOUNDBPS * 2) >> 3) * STREAMTIME / 10) & 0xfffffff8)
#define PLAYLOOP 0x1 // 循环播放
#define MAXSAMPLE 16 // 最大可同时播放的音效数
#define SOUNDBPS 16 // 声音采样点数
#define SOUNDSPS 22050 // 声音采样率
#define CONNECT_TCPIP 0x1 // TCPIP连接
#define CONNECT_IPX 0x2 // IPX连接
#define CONNECT_MODEM 0x3 // MODEM连接
#define CONNECT_SERIAL 0x4 // 串行口连接
#define NETDSYS_CHAT 1
#define NETDSYS_CREATEPLAYER 2
#define NETDSYS_DESTROYPLAYER 3
#define NETDSYS_HOST 4
#define NETDSYS_SESSIONLOST 5
#define NETDSYS_PLAYERNAME 6
#define NETDSYS_SESSIONDESC 7
#define NETDSYS_SEND 8
#define NETDSYS_USERMSG 65536
// 位图结构
typedef struct
{
int type; // 位图的类型
int width, height; // 位图的宽度和高度
DWORD pitch_byte; // 以字节计算的位图一行所占的内存空间
DWORD pitch_word; // 以字计算的位图所一行占的内存空间
DWORD pitch_dword; // 以双字计算的位图一行所占的内存空间
DWORD surface_byte; // 以字节计算的位图所占的内存空间
DWORD surface_word; // 以字计算的位图所占的内存空间
DWORD surface_dword; // 以双字计算的位图所占的内存空间
int clipleft, cliptop, // 剪裁矩形的范围
clipright, clipbottom;
int pixelbitcount; // 每个点所占的位数
WORD colorkey; // 透明色
int draw_x, draw_y; // 当前绘图笔坐标
WORD *draw_ptr; // 指向当前绘图位置的指针
WORD *bit; // 指向位图数据的指针
}BMP;
// FST位图结构
typedef struct
{
int width, height; // 位图的宽度和高度
DWORD surface_byte; // 以字节计算的压缩位图所占的内存空间
DWORD surface_word; // 以字计算的压缩位图所占的内存空间
DWORD surface_dword; // 以双字计算的压缩位图所占的内存空间
int pixelbitcount; // 每个点所占的位数
WORD colorkey; // 透明色
WORD *bit; // 指向位图数据的指针
}FST_BMP;
typedef struct
{
char *msg; // 信息
int delay; // 还显示多少次消除
} DEBUG_MESSAGE;
// 链表的节点
typedef struct _LIST_POINT_
{
_LIST_POINT_ *prev; // 上一个节点
void *data; // 指向数据区的指针
_LIST_POINT_ *next; // 下一个节点
}LIST_POINT;
// 链表结构
typedef struct
{
LIST_POINT *first, *last, *entry;
DWORD count;
}LIST;
// 数据包文件
typedef struct
{
DWORD ID; // 文件的ID号
DWORD pos; // 文件指针
char filename[64]; // 虚拟文件名
DWORD oldsize; // 未压缩的文件大小
DWORD filesize; // 文件大小
BOOL compress; // 是否经过压缩
}PACK_FILE;
// 数据文件
typedef struct
{
DWORD file_count; // 数据包文件总数
FILE *fp; // 文件指针
LIST *pack_file_list; // 数据包文件列表
}DATA_FILE;
// 鼠标光标
typedef struct
{
int count; // 光标的帧数
int entry; // 当前帧
int width, height; // 鼠标的宽和高
int hot_x, hot_y; // 鼠标的热点
int delay; // 每次切换帧的延时(毫秒)
BMP *cur; // 光标的位图
}MOUSE_CURSOR;
// 音效的数据
typedef struct
{
DWORD size; // 数据长度
int number; // 代号
char *bit; // 声音数据
}SAMPLE;
// 音乐的数据
typedef struct
{
DWORD size; // 数据长度
BOOL source; // 音乐数据来源
FILE *fp; // 指向当前音乐文件的指针
DWORD pos; // 当前播放位置
DWORD pack_offset; // 音乐文件在声音文件中的位置
}MUSIC;
// 静态声音
typedef struct
{
LPDIRECTSOUNDBUFFER lpDSB; // DirectSoundBuffer对象
LPDIRECTSOUNDNOTIFY lpDSN; // DirectSoundNotify对象
SAMPLE *sample; // 静态声音
long pan; // 均衡
long volume; // 音量
DWORD pos; // 播放的起始位置
int status; // 播放状态
DSBPOSITIONNOTIFY dsbpn[2]; // 事件数组
}STATICSOUND;
// 流声音
typedef struct
{
LPDIRECTSOUNDBUFFER lpDSB; // DirectSoundBuffer对象
LPDIRECTSOUNDNOTIFY lpDSN; // DirectSoundNotify对象
MUSIC *music; // 静态声音
long pan; // 均衡
long volume; // 音量
int status; // 播放状态
DSBPOSITIONNOTIFY dsbpn[2]; // 事件数组
}STREAMSOUND;
// 输入法结构
typedef struct
{
char name[9]; // 输入法名称
char key[102]; // 码元表
BYTE len; // 最大码长
char hotkey; // 万能键
BOOL autosel; // 是否自动选择输入
BOOL active; // 当前是否激活
LIST *mb; // 码表
}CODE_TYPE;
// 码表结构
typedef struct
{
char *code; // 编码
LIST *hz;
}MB;
// 汉字
typedef struct
{
char *hz; // 汉字字符串
}HZ;
// 连接类型
typedef struct
{
char name[256]; // 连接名称
LPVOID connect; // 连接函数
DWORD size; // 函数长度
int type; // 连接类型
}CONNECT_TYPE;
// 会话属性
typedef struct
{
char name[256]; // 会话的名称
DWORD maxplayer; // 最大玩家数
LPGUID lpguid; // 对话的标识
}NETSESSION;
// 玩家属性
typedef struct
{
DPID playerid; // 玩家ID
DWORD type; // 类型,组或玩家
char names[64]; // 玩家的短名
char namel[256]; // 玩家的全名
}PLAYER;
// 消息结构
typedef struct
{
DWORD type; // 消息类型
DWORD size; // 用户消息数据长度
DPID idfrom, idto; // 发送消息的玩家和接收消息的玩家
DWORD currentplayer; // 当前的玩家
union
{
LPVOID data; // 用户消息的数据
char *message; // DPSYS_CHAT消息的话
char *shortname; // 玩家的短名
};
union
{
char * longname; // 玩家的长名
LPDPSESSIONDESC2 desc; // DPSYS_SETSESSIONDESC消息的会话属性
};
}NETMESSAGE;
extern HINSTANCE app_hInst;
extern MSG Msg; // 消息类
extern HWND hWnd; // 窗口句柄
extern WNDCLASS Wndclass; // 窗口类
extern LPDIRECTDRAW lpDD; // DirectDraw对象
extern LPDIRECTDRAWSURFACE lpDDPrimary; // 主显示页面
extern DDSURFACEDESC PrimarySurfaceDesc; // 主显示页面的属性
extern LPDIRECTDRAWCLIPPER lpClipper; // 剪裁对象
extern LPDIRECTINPUT lpDI;
extern LPDIRECTINPUTDEVICE lpDIKeyboard;
extern LPDIRECTINPUTDEVICE lpDIMouse;
extern BYTE KEY_INPUT[256];
extern BOOL mouse_button1, mouse_button2,
mouse_button3, mouse_button4;
extern int mouse_x, mouse_y, mouse_z; // 鼠标的坐标
extern int mouse_speed;
extern BOOL show_cursor;
extern DATA_FILE *data_file;
extern BOOL Is555; // 像素格式是555 如果值是假的话为565
extern BOOL IsActive; // 应用程激活
extern BOOL TransBitblt; // 值为真为透明复制
extern int Alpha; // Alpha混合的等级
extern int DrawMode; // 绘图模式
extern BMP *screen, *directscreen; // 主表面位图和指向DirectDrawSurface主表面的位图
extern BOOL ScreenIsLock; // 值为真为屏幕锁定
extern int UpdateMode; // 更新屏幕的模式
extern int valid_screen_buffer; // 有效的缓冲区帧数
extern BMP *temp_screen; // 临时屏幕缓冲区
extern int screen_left, screen_top, screen_right, screen_bottom;
extern int fps; // 每秒钟显示的帧数
extern int data_source; // 数据文件来源
extern MOUSE_CURSOR *cursor;
extern char *hzk_16, *hzk_24, *asc_16; // 指向汉字库的指针
extern int font_style; // 字体的样式
extern int font_shadow_x, font_shadow_y; // 汉字阴影的偏移坐标
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -