本帖最后由 glory 于 2022-12-19 12:41 编辑
emwin库都会配套一个GUIConfig.h,切记不要改动。改动不但无效,而且会导致不确定的错误!
比如:这里面的某些宏会影响其它头文件中结构体的布局,这是导致你的程序和库中的abi不一致!举例,若修改GUI_SUPPORT_MEMDEV宏,导致IMAGE_OBJ结构的尺寸变化,使得预编译好的库跟你的代码不一致。
更严重的是结构体成员的偏移发生变化,而你毫无知觉。
[C] 纯文本查看 复制代码 typedef struct {
WIDGET Widget;
IMAGE_PROPS Props;
const void * pData; // Data pointer of the object to be drawn (Bitmap, BMP, GIF, JPEG, PNG)
void (* pfDrawImageAt) (IMAGE_Handle hObj, int xPos, int yPos); // Object specific (Bitmap, BMP, GIF, JPEG, PNG) code
void (* pfPaint) (IMAGE_Handle hObj); // Drawing method specific (Default, Tiled, Magnified) code
void (* pfGetImageSize)(IMAGE_Handle hObj, int * pxSize, int * pySize); // Returns the image size of the attached item
void (* pfOnTimer) (IMAGE_Handle hObj); // Timer function for animated images (currently only animated GIFs are supported)
U32 FileSize;
//
// Data items used by IAMGE_GIF.c
//
int NumImages; // Number of (sub)images
int CurrentImage; // Image index used for animated images
GUI_TIMER_HANDLE hTimer; // Timer used for animated images
//
// Data items used by IAMGE_DTA.c
//
GUI_BITMAP Bitmap; // Bitmap structure
GUI_LOGPALETTE Palette; // Palette structure
//
// Data items used by Image_...Ex() - functions
//
void * pVoid; // Void pointer passed to GetData() function
GUI_GET_DATA_FUNC * pfGetData; // Pointer to GetData() function
//
// Alignment (Important: When tiling is active, alignment does not have any effect)
//
I16 xOff, yOff; // Additional offsets
U8 Align; // Alignment
//
// Data items used if memory devices are available and IMAGE_CF_MEMDEV has been set
//
#if GUI_SUPPORT_MEMDEV
GUI_MEMDEV_Handle hMem;
unsigned Scale;
unsigned Angle;
U8 Alpha;
U8 IsDirty;
//
// Pointer to scaling function
//
void (* pFunc)(GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
#endif
} IMAGE_OBJ;
|