/********************************************************************* * * FRAMEWIN_AddMenu */ void FRAMEWIN_AddMenu(FRAMEWIN_Handle hObj, WM_HWIN hMenu) { if (hObj) { FRAMEWIN_Obj* pObj; WM_LOCK(); pObj = FRAMEWIN_H2P(hObj); if (pObj) { int TitleHeight, BorderSize, IBorderSize = 0; int x0, y0, xSize; TitleHeight = FRAMEWIN__CalcTitleHeight(pObj); BorderSize = pObj->Props.BorderSize; if (pObj->Widget.State & FRAMEWIN_SF_TITLEVIS) { IBorderSize = pObj->Props.IBorderSize; } x0 = BorderSize; y0 = BorderSize + TitleHeight + IBorderSize; xSize = WM__GetWindowSizeX(&pObj->Widget.Win); xSize -= BorderSize * 2; pObj->hMenu = hMenu; if (pObj->cb) { MENU_SetOwner(hMenu, pObj->hClient); } MENU_Attach(hMenu, hObj, x0, y0, xSize, 0, 0); WM_SetAnchor(hMenu, WM_CF_ANCHOR_LEFT | WM_CF_ANCHOR_RIGHT); FRAMEWIN__UpdatePositions(pObj); FRAMEWIN_Invalidate(hObj); } WM_UNLOCK(); } }
/********************************************************************* * * MENU_Popup */ void MENU_Popup(MENU_Handle hObj, WM_HWIN hDestWin, int x, int y, int xSize, int ySize, int Flags) { GUI_USE_PARA(Flags); if (hObj && hDestWin) { MENU_Obj* pObj; WM_LOCK(); pObj = MENU_H2P(hObj); if (pObj) { pObj->Flags |= MENU_SF_POPUP; pObj->Width = ((xSize > 0) ? xSize : 0); pObj->Height = ((ySize > 0) ? ySize : 0); x += WM_GetWindowOrgX(hDestWin); y += WM_GetWindowOrgY(hDestWin); MENU_SetOwner(hObj, hDestWin); WM_AttachWindowAt(hObj, WM_HBKWIN, x, y); MENU__SendMenuMessage(hDestWin, hObj, MENU_ON_OPEN, 0); } WM_UNLOCK(); } }