Вообще полностью и специально я такой вариант не пробовал, но "кусочно" пришлось поковыряться с Callback функцией для фонового окна (для стандартного элемента типа кнопки она по сути та же). Выглядит примерно так:
// объявляем свою Callback функцию:
static void _cbBk(WM_MESSAGE * pMsg) {
uint32_t NCode, Id;
WM_KEY_INFO *KeyPtr;
switch (pMsg->MsgId)
{
case WM_PAINT:
GUI_ClearRect(0, 0, 239, 319);
GUI_SetBkColor(GUI_TRANSPARENT);
GUI_SetTextMode(GUI_TM_NORMAL);
// рисуем линии
GUI_SetColor(GUI_MY_GREY);
GUI_DrawLine(0,16,239,16);
GUI_DrawLine(119,17,119,319);
GUI_DrawLine(0,171,239,171);
// рисуем всё, что нам угодно любыми доступными способами
// копируем битовое изображение на это всё
WM_SetFocus(pMsg->hWin);
break; // обратите внимание - никакого последующего вывоза WM_DefaultProc(pMsg); далее не произойдет !!!
case WM_TOUCH:
ScreenSaverOff();
break;
case WM_SET_FOCUS:
if( pMsg->Data.v==1 ) pMsg->Data.v = 0;
break;
case WM_KEY:
{
KeyPtr = (WM_KEY_INFO*)(pMsg->Data.p);
if(KeyPtr->Key==GUI_KEY_CONTROL && KeyPtr->PressedCnt==1 ) CreateFramewinMainMenu(pMsg->hWin);
break;
}
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (NCode)
{
case WM_NOTIFICATION_CLICKED:
if (Id == '0')
{
// здесь так понимаю обработчик сообщений от принадлежащих окну других (дочерних) окон
.
.
.
.
}
break;
default:
break;
}
break;
default:
WM_DefaultProc(pMsg); // для кнопки это будет вызов BUTTON_Callback(pMsg); (прототип в Button.h)
}
}
// в главном потоке вызываем:
hDeskWin = WM_GetDesktopWindow();
WM_SetCallback( hDeskWin, _cbBk);
WM_SetFocus(hDeskWin);