/* 辅助函数-Log信息台-配置右键弹出菜单 */ void showLogBoxRightClickMenu(int pHdl, int ctrlID, int xPoint, int yPoint){ int menuBar = NewMenuBar(0); int menuIDForPop = NewMenu(menuBar, "" , -1); NewMenuItem(menuBar, menuIDForPop, "Save Log to File", -1, 0, logBoxRightClickMenuCallback, NULL); NewMenuItem(menuBar, menuIDForPop, "Clear Log Console", -1, 0, logBoxRightClickMenuCallback, NULL); RunPopupMenu(menuBar, menuIDForPop, pHdl, yPoint, xPoint, 0, 0, 0, 0); }
/* 辅助函数-为图表创建右键弹出菜单(只对Graph类的控件有效) */ void showMenuPopup(int pHdl, int ctrlID, int xPoint, int yPoint){ int i = getGraphIndex(pHdl, 0); int menuBar = NewMenuBar(0); int menuIDForPop = NewMenu(menuBar, "" , -1); char openStr[25]="Open Analysis Window"; char closeStr[25]="Close Analysis Window"; char pauseStr[20] = "Pause"; char startStr[20] = "Start"; if(tabFlag == 0){ NewMenuItem(menuBar, menuIDForPop, signalShowingStat[i]>0?pauseStr:startStr, -1, 0, menuPopupCallback, NULL); NewMenuItem(menuBar, menuIDForPop, PopPanels[i]>0?closeStr:openStr, -1, 0, menuPopupCallback, NULL); }else{ NewMenuItem(menuBar, menuIDForPop, signalShowingStat[i]>0?pauseStr:startStr, -1, 0, menuPopupCallback, NULL); NewMenuItem(menuBar, menuIDForPop, PopPanels[i]>0?closeStr:openStr, -1, 0, menuPopupCallback, NULL); }//if-else RunPopupMenu(menuBar, menuIDForPop, pHdl, yPoint, xPoint, 0, 0, 0, 0); ///DisplayPanel(menuPopupHdl); }
UIMenuItem* CSkelMeshViewer::GetObjectMenu(UIMenuItem* menu) { assert(!menu); menu = &NewSubmenu("SkeletalMesh"); (*menu) [ NewMenuCheckbox("Show bone names\tB", &ShowLabels) +NewMenuCheckbox("Show sockets\tA", &ShowAttach) +NewMenuCheckbox("Show influences\tI", &DrawFlags, DF_SHOW_INFLUENCES) +NewMenuCheckbox("Show mesh UVs\tCtrl+U", &ShowUV) +NewMenuSeparator() +NewMenuItem(bIsUE4Mesh ? "Find animations ...\tCtrl+A" : "Cycle AnimSets\tCtrl+A") .SetCallback(BIND_MEMBER(&CSkelMeshViewer::AttachAnimSet, this)) +NewMenuItem("Cycle skeleton display\tS") .SetCallback(BIND_LAMBDA([this]() { ProcessKey('s'); })) // simulate keypress +NewMenuItem("Tag mesh\tCtrl+T") .SetCallback(BIND_LAMBDA([this]() { ProcessKey(KEY_CTRL|'t'); })) // simulate keypress +NewMenuItem("Untag all meshes") .SetCallback(BIND_LAMBDA([this]() { UntagAllMeshes(); })) ]; return CMeshViewer::GetObjectMenu(menu); }
//callback associated with the controls on a panel that is loaded at run-time int CVICALLBACK RuntimeCtrlCB (int panelHandle, int control, int event, void *callbackdata, int eventData1, int eventData2) { char childWindowMenu[MAX_STRING_SIZE]; int isChildPanel; int numCtrls; int menuBarHandle; int menuID; int ctrlType; char ctrlString[MAX_STRING_SIZE]; char menuString[MAX_STRING_SIZE]; CTRLSTRUCT* ctrlArray = callbackdata; int releaseID =0; switch(event) { case EVENT_RIGHT_CLICK: if(ctrlArray == NULL) return 0; menuBarHandle = NewMenuBar (0); menuID = NewMenu(menuBarHandle,"",-1); GetCtrlAttribute(panelHandle,control,ATTR_CTRL_STYLE,&ctrlType); GetStyleNameForCtrl(ctrlType, ctrlString); sprintf(menuString,"Control Type: %s",ctrlString); NewMenuItem(menuBarHandle,menuID,menuString,-1,0,NULL,NULL); GetPanelAttribute(panelHandle,ATTR_NUM_CTRLS,&numCtrls); strcpy(ctrlString, FindCtrlCBName(ctrlArray,control,numCtrls)); sprintf(menuString,"Ctrl Callback: %s",strlen(ctrlString)==0?"<null>":ctrlString); NewMenuItem(menuBarHandle,menuID,menuString,-1,0,NULL,NULL); InsertSeparator(menuBarHandle, menuID, -1); GetPanelAttribute (panelHandle, ATTR_PANEL_PARENT, &isChildPanel); if(!isChildPanel) sprintf(childWindowMenu,"Confine Window"); else sprintf(childWindowMenu,"Release Window"); releaseID = NewMenuItem (menuBarHandle, menuID, childWindowMenu, -1, 0, 0, 0); if(releaseID == RunPopupMenu(menuBarHandle,menuID,panelHandle,eventData1,eventData2,0,0,0,0)) { SetPanelParenthood(panelHandle,isChildPanel); } DiscardMenu(menuBarHandle,menuID); DiscardMenuBar(menuBarHandle); //indicate to the panel that this is a control callback gbCtrlCB = 1; break; } return 0; }