參考資訊:
https://github.com/piyushpandey013/ucGUI
https://github.com/yongzhena/ucgui-linux
main.c
#include <stdio.h>
#include <stdlib.h>
#include "GUI.h"
#include "MENU.h"
#include "MULTIPAGE.h"
static GUI_WIDGET_CREATE_INFO info[] = {
{ FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 200, 100, WM_CF_SHOW, 0 },
};
static int add_menu(MENU_Handle hMenu, MENU_Handle hSubMenu, const char *pText, U16 dwID, U16 dwFlags)
{
MENU_ITEM_DATA m = { 0 };
m.pText = pText;
m.hSubmenu = hSubMenu;
m.Flags = dwFlags;
m.Id = dwID;
MENU_AddItem(hMenu, &m);
return 0;
}
static int create_menu(WM_HWIN hParent)
{
MENU_Handle hMenu = 0;
MENU_Handle hMenuFile = 0;
hMenu = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_HORIZONTAL, 100);
hMenuFile = MENU_CreateEx(0, 0, 0, 0, WM_UNATTACHED, 0, MENU_CF_VERTICAL, 0);
add_menu(hMenuFile, 0, "New", 101, 0);
add_menu(hMenuFile, 0, "Open", 102, 0);
add_menu(hMenuFile, 0, 0, 0, MENU_IF_SEPARATOR);
add_menu(hMenuFile, 0, "Exit", 103, 0);
add_menu(hMenu, hMenuFile, "File", 0 ,0);
FRAMEWIN_AddMenu(hParent, hMenu);
}
static void WndProc(WM_MESSAGE* pMsg)
{
char buf[255] = { 0 };
WM_KEY_INFO* pKeyInfo = NULL;
MENU_MSG_DATA *pMenuInfo = NULL;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
create_menu(pMsg->hWin);
break;
case WM_MENU:
pMenuInfo = (MENU_MSG_DATA *)pMsg->Data.p;
switch (pMenuInfo->MsgType) {
case MENU_ON_ITEMSELECT:
if (pMenuInfo->ItemId == 103) {
GUI_EndDialog(pMsg->hWin, 0);
break;
}
sprintf(buf, "ID %d", pMenuInfo->ItemId);
GUI_MessageBox(buf, "main", GUI_MB_OK);
break;
}
break;
default:
WM_DefaultProc(pMsg);
}
}
int main(int argc, char *argv[])
{
GUI_Init();
GUI_SetBkColor(GUI_GRAY);
GUI_Clear();
GUI_ExecDialogBox(info, GUI_COUNTOF(info), WndProc, 0, 0, 0);
return 0;
}
編譯、執行
$ gcc main.c -o main libucgui.a -IGUI_X -IGUI/Core -IGUI/Widget -IGUI/WM -lSDL $ ./main
