程式語言 - uC/GUI - Handle Mouse Event



參考資訊:
https://github.com/piyushpandey013/ucGUI
https://github.com/yongzhena/ucgui-linux

main.c

#include <stdio.h>
#include <stdlib.h>
 
#include "GUI.h"
#include "MULTIPAGE.h"

#define ID_TEXT 100

static GUI_WIDGET_CREATE_INFO info[] = {
    { FRAMEWIN_CreateIndirect, "Dialog", 0, 10, 10, 200, 100, WM_CF_SHOW, 0},
    { TEXT_CreateIndirect, "", ID_TEXT, 10, 20, 200, 20, 0, GUI_TA_LEFT },
};
  
static void WndProc(WM_MESSAGE* pMsg)
{
    WM_HWIN hText = 0;
    GUI_RECT rt = { 0 };
    char buf[255] ={ 0 };
    GUI_PID_STATE *mouse = NULL;
   
    switch (pMsg->MsgId) {
    case WM_PAINT:
        WM_GetInsideRect(&rt);
        GUI_SetBkColor(GUI_GREEN);
        GUI_ClearRectEx(&rt);
        break;
    case WM_MOUSEOVER:
        mouse = (GUI_PID_STATE *)pMsg->Data.p;
        sprintf(buf, "Mouse X=%d, Y=%d, Pressed=%d", mouse->x, mouse->y, mouse->Pressed);

        hText = WM_GetDialogItem(pMsg->hWin, ID_TEXT);
        TEXT_SetText(hText, buf);
        break;
    default:
        WM_DefaultProc(pMsg);
    }
}
  
int main(int argc, char *argv[])
{
    GUI_Init();
    GUI_SetBkColor(GUI_GRAY);
    GUI_Clear();

    GUI_CURSOR_Show();
    GUI_CURSOR_SetPosition(60, 60);

    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