PainterEngine
PainterEngine是一个由C语言编写的完整开源的跨平台图形应用框架,可移植到Windows Linux Android iOS 支持WebAssembly的Web端及嵌入式MCU上
主页
https://www.painterengine.com/index.html
教程
https://www.painterengine.com/tutorial.html
建议先把教程先了解下
PainterEngine 自建GUI控件对象
多选框(checkbox)
1.声明checkbox
PX_Object *checkbox;
PX_Object *checkbox1;
PX_Object *checkbox2;
PX_Object *checkbox3;
PX_Object *checkbox4;
const char text[] = "default";
const char text1[] = "背景颜色";
const char text2[] = "边框颜色";
const char text3[] = "指针颜色";
const char text4[] = "文本颜色";
2.创建字体和checkbox,并设置颜色
px_bool PX_ApplicationInitialize(PX_Application *pApp,px_int screen_width,px_int screen_height)
{
PX_ApplicationInitializeDefault(&pApp->runtime, screen_width, screen_height);
if (!PX_FontModuleInitialize(&pApp->runtime.mp_resources, &pApp->fm)) return PX_FALSE;
if (!PX_LoadFontModuleFromFile(&pApp->fm, "fzltzhunh.pxf")) return PX_FALSE;
checkbox = PX_Object_CheckBoxCreate(&pApp->runtime.mp_ui, PX_NULL, 0, 0, 200, 40, text, &pApp->fm);
checkbox1 = PX_Object_CheckBoxCreate(&pApp->runtime.mp_ui, PX_NULL, 0, 40, 200, 40, text1, &pApp->fm);
checkbox2 = PX_Object_CheckBoxCreate(&pApp->runtime.mp_ui, PX_NULL, 0, 80, 200, 40, text2, &pApp->fm);
checkbox3 = PX_Object_CheckBoxCreate(&pApp->runtime.mp_ui, PX_NULL, 0, 120, 200, 40, text3, &pApp->fm);
checkbox4 = PX_Object_CheckBoxCreate(&pApp->runtime.mp_ui, PX_NULL, 0, 160, 200, 40, text3, &pApp->fm);
PX_Object_CheckBoxSetBackgroundColor(checkbox1, PX_COLOR(255, 100, 100, 100));
PX_Object_CheckBoxSetBorderColor(checkbox2, PX_COLOR(255, 255, 0, 0));
PX_Object_CheckBoxSetCursorColor(checkbox3, PX_COLOR(255, 0, 255, 0));
PX_Object_CheckBoxSetTextColor(checkbox4, PX_COLOR(255, 0, 0, 255));
return PX_TRUE;
}
3.渲染
px_void PX_ApplicationRender(PX_Application *pApp,px_dword elapsed)
{
px_surface *pRenderSurface=&pApp->runtime.RenderSurface;
PX_RuntimeRenderClear(&pApp->runtime,PX_OBJECT_UI_DEFAULT_BACKGROUNDCOLOR);
PX_ObjectRender(pRenderSurface, checkbox, elapsed);
PX_ObjectRender(pRenderSurface, checkbox1, elapsed);
PX_ObjectRender(pRenderSurface, checkbox2, elapsed);
PX_ObjectRender(pRenderSurface, checkbox3, elapsed);
PX_ObjectRender(pRenderSurface, checkbox4, elapsed);
}
4.发送事件,不然不能响应鼠标
px_void PX_ApplicationPostEvent(PX_Application *pApp,PX_Object_Event e)
{
PX_ApplicationEventDefault(&pApp->runtime, e);
PX_ObjectPostEvent(checkbox, e);
PX_ObjectPostEvent(checkbox1, e);
PX_ObjectPostEvent(checkbox2, e);
PX_ObjectPostEvent(checkbox3, e);
PX_ObjectPostEvent(checkbox4, e);
}