⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sss.h

📁 基于C语言的俄罗斯方块游戏机程序,可以很方便的应用到各种游戏机中去.
💻 H
📖 第 1 页 / 共 2 页
字号:
/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \
□──────────────────────────────────□
○┉SSS1.52    SSS API
┋  SCM Simulator Shell
┋  文件: sss.h
┋  版本: 1.52
┋  功能: 提供LCD、触摸屏、按键、定时器、FLASH等器件的功能模拟。
┋  http://www.wbj3000.com                    2003.5.10 吴柏建
□──────────────────────────────────□
\ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/


#ifdef _WIN32

#ifndef _SSS_
#define _SSS_


#ifdef SSS_EXPORTS
#define SSS_API __declspec(dllexport)
#else
#define SSS_API __declspec(dllimport)
#endif

#pragma message("   ----------欢迎使用【SSS v1.52】  www.wbj3000.com  wwwbbbjjj@wbj3000.com  吴柏建----------") 

#include <windows.h>

#ifdef __cplusplus
extern "C" {
#endif


/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□--------------------------------------------------------------------□
□  SSS之基本函数。
□--------------------------------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/


typedef struct _SSS_WINDOW
{
	BOOL IfWndFrame;    //是否有窗口边框,有边框时transColor无效
	int Width;          //窗口的宽
	int Height;         //窗口的高
	char *pTitleStr;    //窗口标题字符串 
	char *pBmpName;     //窗口的背景位图文件名字符串或资源ID,真彩色或非BMP格式资源位图默认类型为"IMAGEDATA",〖资源载入写法: MAKEINTRESOURCE(IDB_xxx)〗 
	COLORREF transColor;//背景位图的透明色

	DWORD iconID;       //窗口ICON的资源ID号
	DWORD menuID;       //窗口菜单的资源ID号
	DWORD popmenuID;    //窗口鼠标右键菜单的资源ID号
	DWORD accelID;      //加速键表资源ID号

	WNDPROC pFuncWndProc;//窗口的消息回调函数 long (__stdcall *pFuncWndProc)(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam);

}SSS_WINDOW;

//SSS初始化函数,必须在使用SSS函数前首先调用。
SSS_API  void SSS_Init( HWND hWnd );
//SSS创建位图界面窗口,内部隐含调用SSS_Init()。
SSS_API  int  SSS_InitWnd( SSS_WINDOW *pSssWnd );
//SSS得到SSS_InitWindow函数创建或传入SSS_Init函数的窗口句柄。
SSS_API  HWND SSS_GetWnd( void );
//SSS释放函数。调用后可以使用SSS_Init()来重新初始化。
SSS_API void SSS_Out(void);
//SSS关闭程序函数。
SSS_API  void SSS_Exit( void );
//SSS设置程序关闭时的回调处理函数。
SSS_API  void SSS_SetExitFunc( void (*pFunc)(void) );
// 临界区保护进入(关中断)。
SSS_API  void SSS_Critical_In( void );
// 临界区保护退出(开中断)。
SSS_API  void SSS_Critical_Out( void );
//SSS注册授权函数。
SSS_API  BOOL SSS_SetRegCode( const char *pUserName, const char *pRegCode );




/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□--------------------------------------------------------------------□
□  SSS之LCD模拟函数。
□--------------------------------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/

//scanmode = LCD_SCAN_H  gray = LCD_GRAY1  bytereverse = LCD_BYTE_NORMAL
//  |-------------------------width----------------------------|
//  |  Line 0 Byte0[bit:7~0] Byte1[bit:7~0]--------------------
//  |  Line 1 -------------------------------------------------
//  h  Line 2 -------------------------------------------------
//  i   .
//  g   .
//  h   .
//  |   .


//scanmode = LCD_SCAN_V  gray = LCD_GRAY1  bytereverse = LCD_BYTE_NORMAL
//  |-------------------------width----------------------------|
//  |  Line 0 Byte0[bit:7] ------------------------------------
//  |  Line 1 Byte0[bit:2] ------------------------------------
//  h  Line 2 Byte0[bit:1] ------------------------------------
//  i   .
//  g  Line 7 Byte0[bit:0] ------------------------------------
//  h  Line 8 Byte1[bit:7] ------------------------------------
//  |   .


//scanmode = LCD_SCAN_HV  gray = LCD_GRAY1  bytereverse = LCD_BYTE_NORMAL
//  |-------------------------width----------------------------|
//  |  Line 0 Byte0[bit:7] Byte1[bit:7] Byte2[bit:7] ...-------
//  |  Line 1 Byte0[bit:6] Byte1[bit:6] Byte2[bit:6] ...-------
//  h  Line 2 Byte0[bit:5] Byte1[bit:5] Byte2[bit:5] ...-------
//  i   .
//  g   .
//  h   .
//  |   .


//scanmode = LCD_SCAN_VH  gray = LCD_GRAY1  bytereverse = LCD_BYTE_NORMAL
//  |-------------------------width----------------------------|
//  |  Line 0 Byte0[bit:7~0] ----------------------------------
//  |  Line 1 Byte1[bit:7~0] ----------------------------------
//  h  Line 2 Byte2[bit:7~0] ----------------------------------
//  i   .
//  g   .
//  h   .
//  |   .


//scanmode
#define LCD_SCAN_H   0 //水平扫描
#define LCD_SCAN_V   1 //垂直扫描
#define LCD_SCAN_HV  2 //数据水平扫描,字节垂直放置。仅在LCD_GRAY1 LCD_GRAY2 LCD_GRAY4时有意义。
#define LCD_SCAN_VH  3 //数据垂直扫描,字节水平放置。仅在LCD_GRAY1 LCD_GRAY2 LCD_GRAY4时有意义。

//bytereverse
#define LCD_BYTE_NORMAL   0 //LCD字节数据以正常顺序显示。
#define LCD_BYTE_RESERVE  1 //LCD字节数据以颠倒顺序显示。仅影响单色,4灰,16灰的显示模式。

//gray
#define LCD_GRAY1         1 //单色,每一象素占1bit。
#define LCD_GRAY2         2 //4灰,每一象素占2bit。
#define LCD_GRAY4         4 //16灰,每一象素占4bit。
#define LCD_GRAY8         8 //256色,每一象素占8bit。

#define LCD_GRAY16       16 //伪彩色,每一象素占16bit。Red[bit15:11] Green[bit10:5] Blue[bit4:0]
#define LCD_GRAY24       24 //真彩色,每一象素占24bit。Red[byte0] Green[byte1] Blue[byte2]
#define LCD_GRAY32       32 //真彩色,每一象素占32bit。Red[bit7:0] Green[bit15:8] Blue[bit23:16]

//mirror
#define LCD_MIRROR_NO    0 //正常LCD显示。
#define LCD_MIRROR_H     2 //LCD水平镜像(图像左右颠倒)。
#define LCD_MIRROR_V     4 //LCD垂直镜像(图像上下颠倒)。
#define LCD_MIRROR_HV    6 //LCD既水平镜像又垂直镜像。


//RGB(r,g,b) -> WORD[R:5,G:6,B:5]
#define RGB_GRAY16(r,g,b) ((((WORD)(r)<<8)&0xf800)|(((WORD)(g)<<3)&0x07e0)|((WORD)(b)>>3))
//RGB(r,g,b) -> DWORD[NULL:8,R:8,G:8,B:8]
#define RGB_GRAY32(r,g,b) RGB(b,g,r)
//WORD[R:5,G:6,B:5] -> COLORREF DWORD[NULL:8,B:8,G:8,R:8]
#define GRAY16_COLORREF( x )  (((x&0xf800)>>8)|((x&0x07e0)<<5)|(((DWORD)(x&0x001f))<<19))


//得到指定LCD的所需显示缓冲区的最小尺寸。
SSS_API  int SSS_Lcd_GetBufferSize(int width, int high, int scanmode, int gray );

SSS_API  BOOL SSS_Lcd_Init( int ID, int x, int y, int width, int high, int zoom, int scanmode, int gray, unsigned char *pLcdBuffer );
SSS_API  BOOL SSS_Lcd_Out( int ID );
SSS_API  BOOL SSS_Lcd_SetAutoRefresh( int ID, int elapse );
SSS_API  BOOL SSS_Lcd_Refresh( int ID, BOOL isWait );
SSS_API  BOOL SSS_Lcd_SetPosition( int ID, int x, int y );
SSS_API  BOOL SSS_Lcd_SetScanMode( int ID, int scanmode,int gray );
SSS_API  BOOL SSS_Lcd_SetMirror( int ID, int mirror );
SSS_API  BOOL SSS_Lcd_SetByteReserve( int ID, int bytereverse );

//设置显示缓冲数据的调整准备函数,参数是显示缓冲区指针,如果设置了该函数,该函数将在每次显示前被调用。
SSS_API  void SSS_Lcd_SetFunc_PrepareLcdData( int ID, void (*pFunc)(unsigned char *pLcdBuffer) );

//函数灰度模式下使用的调色板颜色,index数值范围: LCD_GRAY1 [0,1]、LCD_GRAY2 [0,3]、LCD_GRAY4 [0,15]、LCD_GRAY8 [0,255]。
SSS_API  BOOL SSS_Lcd_SetColor( int ID, int index, COLORREF Color );

//设置彩色模式下使用用户自己定义的色彩转换函数,参数是显示缓冲中的数据,用来解决特殊的显示数据格式。
//COLORREF ( NULL[bit31:24] Blue[bit23:16] Green[bit15:8] Red[bit7:0] )
SSS_API  void SSS_Lcd_SetFunc_Gray16ToColorTranslate( int ID, COLORREF(*pFunc)(WORD) );
SSS_API  void SSS_Lcd_SetFunc_Gray24ToColorTranslate( int ID, COLORREF(*pFunc)(BYTE *) );
SSS_API  void SSS_Lcd_SetFunc_Gray32ToColorTranslate( int ID, COLORREF(*pFunc)(DWORD) );

/*
//默认的彩色模式下使用的色彩转换函数。
COLORREF DefaultGray16ToColorTranslate(WORD c)
{
	return ((((c)&0xf800)>>8)|(((c)&0x07e0)<<5)|(((DWORD)((c)&0x001f))<<19));
}
COLORREF DefaultGray24ToColorTranslate(BYTE *s)
{
	return ((s[2])|(((WORD)s[1])<<8)|(((DWORD)s[0])<<16));
}
COLORREF DefaultGray32ToColorTranslate(DWORD c)
{
	return (((c&0x000000ff)<<16)|(c&0x0000ff00)|(c>>16));
}
*/




/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□--------------------------------------------------------------------□
□  SSS之图像显示模拟函数。
□--------------------------------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/
#ifdef  LPBMP
#undef  LPBMP
#endif
#define LPBMP  void*

SSS_API  LPBMP SSS_Bmp_Load( const char *pBmpName );
SSS_API  LPBMP SSS_Bmp_Create( int w, int h );
SSS_API  BOOL  SSS_Bmp_GetRect( LPBMP pBmp, RECT *pRc );
SSS_API  void  SSS_Bmp_SetColorKey( LPBMP pBmp, COLORREF rgb );
SSS_API  BOOL  SSS_Bmp_GetData24( LPBMP pBmp, unsigned char *pData );
SSS_API  BOOL  SSS_Bmp_SetData24( LPBMP pBmp, unsigned char *pData );
SSS_API  BOOL  SSS_Bmp_Release( LPBMP pBmp );
SSS_API  void  SSS_Bmp_ShowInBmp( RECT *pDrc, LPBMP pDbmp, RECT *pSrc, LPBMP pSbmp, BOOL IfTrans );
SSS_API  void  SSS_Bmp_ShowInWnd( RECT *pDrc, RECT *pSrc, LPBMP pSbmp, BOOL IfTrans );
SSS_API  BOOL  SSS_Bmp_GetDC( LPBMP pBmp, HDC* phDc );
SSS_API  BOOL  SSS_Bmp_ReleaseDC( LPBMP pBmp, HDC hDc );





/*≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
□--------------------------------------------------------------------□
□  SSS之CPU模拟函数。
□--------------------------------------------------------------------□
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡*/

SSS_API  BOOL SSS_Cpu_Init( int ID, void (*Main)(void*pParam), void*pParam );
SSS_API  BOOL SSS_Cpu_Out( int ID );

//模拟休眠,可以被中断唤醒。
SSS_API  void SSS_Cpu_Halt( int ID );

//模拟中断,使SSS_Cpu_Halt退出。
SSS_API  void SSS_Cpu_Interrupt( int ID );

//CPU复位操作。
SSS_API  void SSS_Cpu_Reset( int ID );

//得到调用本函数的代码所在的CPU线程的ID,-1表示不在CPU线程中。
SSS_API  int  SSS_Cpu_GetCurrentID( void );

//CPU线程创建一纤程。只能在CPU线程或纤程代码中调用。
SSS_API  BOOL SSS_Task_Create( int*pTaskID, int StackSize, void (*TaskMain)(void*), void*pParam );
//删除一纤程。在纤程中调用,删除自己时先记录下来,在后续的SSS_Task_Create() SSS_Task_Delete()中完成真正的删除。
SSS_API  BOOL SSS_Task_Delete( int TaskID );
//纤程切换。在CPU线程或纤程中调用但不能自己切换到自己。
SSS_API  BOOL SSS_Task_Switch( int TaskID );


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -