📄 sss.h
字号:
/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ \
□──────────────────────────────────□
┋
○┉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 + -