Ответ подсказали на ru.stackoverflow.com, привожу весь код:
require("iuplua")
cv = iup.canvas {size="300x100", xmin=0, xmax=99, posx=0, dx=10}
dlg = iup.dialog{iup.frame{cv}; title="IupCanvas"}
mnu = iup.menu
{
iup.submenu
{
iup.menu
{
iup.item{title="IupItem 1 Checked",value="ON"},
iup.separator{},
iup.item{title="IupItem 2 Disabled",active="NO"}
}
;title="IupSubMenu 1"
},
iup.item{title="IupItem 3"},
iup.item{title="IupItem 4"}
}
function cv:button_cb(button, pressed, x, y, status)
if button == 51 and pressed == 0 then
mnu:popup(iup.MOUSEPOS, iup.MOUSEPOS)
end
end
dlg:showxy(iup.CENTER,iup.CENTER)
if (iup.MainLoopLevel()==0) then
iup.MainLoop()
iup.Close()
end
Вся изюминка в функции
function cv:button_cb(button, pressed, x, y, status)
переопределяя
cv можно делать всплывающие меню для любого элемента интерфейса.