/*============================================================================*\ Function: ProUtilMenuIntValueSelect Purpose: Create menu/Select int value/Close menu Return: PRO_TK_NO_ERROR if value selected, or PRO_TK_GENERAL_ERROR \*============================================================================*/ ProError ProUtilMenuIntValueSelect( ProUtilMenuButtons *buttons_array, /* In : The menu button array */ int *output_value) { ProError err; int i, n_buttons, menu_id; wchar_t **w_menu_buttons; for (n_buttons = 0; buttons_array[n_buttons].button[0]!='\0'; n_buttons++); if (n_buttons <= 1) return PRO_TK_NO_ERROR; ProUtilMenuStringsAlloc(&w_menu_buttons); for (i=1; i<n_buttons; i++) ProUtilMenuStringsStrAdd(&w_menu_buttons, buttons_array[i].button); ProMenuFromStringsRegister ( buttons_array[0].button, NULL, w_menu_buttons, NULL, NULL, &menu_id); ProUtilMenuStringsFree(&w_menu_buttons); for (i=0; i<n_buttons; i++) { if (buttons_array[i].special_flag & (TEST_CALL_PRO_MENU_DELETE | TEST_CALL_PRO_MENU_HOLD)) ProMenubuttonActionSet(buttons_array[0].button, buttons_array[i].button, (ProMenubuttonAction) (buttons_array[i].special_flag & TEST_CALL_PRO_MENU_DELETE ? ProMenuDelete : ProMenuHold), NULL, 0); else ProMenubuttonActionSet(buttons_array[0].button, buttons_array[i].button, (ProMenubuttonAction) ProUtilMenubuttonDeleteWithStatus, NULL, buttons_array[i].value); } for (i=1; i<n_buttons; i++) { if (buttons_array[i].special_flag & TEST_CALL_PRO_MENUBUTTON_DELETE) ProMenubuttonDelete(buttons_array[0].button, buttons_array[i].button, &menu_id); } err = ProMenuCreate( PROMENUTYPE_MAIN, buttons_array[0].button, &menu_id ); for (i=1; i<n_buttons; i++) { if (buttons_array[i].special_flag & (TEST_CALL_PRO_MENU_ACTIVATE | TEST_CALL_PRO_MENU_DEACTIVATE)) ProUtilMenubuttonActivate(buttons_array[0].button, buttons_array[i].button, buttons_array[i].special_flag & TEST_CALL_PRO_MENU_ACTIVATE); if (buttons_array[i].special_flag & (TEST_CALL_PRO_MENU_HIGHLIGHT | TEST_CALL_PRO_MENU_UNHIGHLIGHT)) ProUtilMenubuttonActivate(buttons_array[0].button, buttons_array[i].button, buttons_array[i].special_flag & TEST_CALL_PRO_MENU_HIGHLIGHT); } err = ProMenuProcess(buttons_array[0].button, output_value); return (err); }
// 显示快捷菜单 void ShowShortCutMenu() { /*if (!QuickCheckValidLicense(SMART_PROFESSIONAL)) return;*/ static char *compoundmenu[] = {"Smart3DCoating_ShortCut", "ShortCut_Create", "ShortCut_Edit", "ShortCut_Export", ""}; int nMenuid; ProError status =ProCompoundmenuCreate(compoundmenu, &nMenuid); if (status == PRO_TK_NO_ERROR) { ProMenuProcess(compoundmenu[0], &nMenuid); } }
/*============================================================================*\ Function: ProUtilMenuStringManySelect Purpose: Select many string from menu with submenu Select All/Unsell All \*============================================================================*/ ProError ProUtilMenuStringManySelect( char *menu_name, /* In : Menu name */ wchar_t **w_menu_buttons, /* In : Menu buttons */ int **output_array, /* Out: ProArray of numbers of selected strings, use ProArrayFree to free memory */ int *p_n_sel) /* Out: Number of selected components */ { int i, n_but, n_sel, menu_id, action; ProError err, ret_status = PRO_TK_USER_ABORT; int *toggle_array; MenuToggleInfo toggle_info; ProCharName name; wchar_t **w_menus; for(n_but=0; w_menu_buttons[n_but][0] != '\0'; n_but++); err = ProArrayAlloc(n_but, sizeof(int), 1, (ProArray*)&toggle_array); toggle_info.w_menu_buttons = w_menu_buttons; toggle_info.button_status = toggle_array; toggle_info.n_buttons = n_but; toggle_info.menu_name = menu_name; err = ProMenuFromStringsRegister ( menu_name, NULL, w_menu_buttons, NULL, NULL, &menu_id); for (i=0; i<n_but; i++) { toggle_array[i] = 0; ProWstringToString(name, w_menu_buttons[i]); err = ProMenubuttonActionSet(menu_name, name, (ProMenubuttonAction)ProUtilMenuToggleOne, &toggle_info, i); } err = ProMenubuttonActionSet(menu_name, menu_name, (ProMenubuttonAction)ProMenuDelete, NULL, 0); err = ProMenuModeSet(menu_name, PROMENUMODE_DATA); err = ProMenuDatamodeSet(menu_name, PRO_B_TRUE ); err = ProMenuCreate(PROMENUTYPE_MAIN, menu_name, &menu_id); err = ProUtilMenuStringsAlloc(&w_menus); err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Select All"); err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Unsel All"); err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Done Sel"); err = ProUtilMenuStringsStrAdd(&w_menus, (char *)"Quit Sel"); ProMenuFromStringsRegister ( (char *)"TkMenuUtilSelect", NULL, w_menus, NULL, NULL, &menu_id); err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Select All", (ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, SELECT_ALL); err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Unsel All", (ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, UNSEL_ALL); err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Done Sel", (ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, DONE_SEL); err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"Quit Sel", (ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, QUIT_SEL); err = ProMenubuttonActionSet((char *)"TkMenuUtilSelect", (char *)"TkMenuUtilSelect", (ProMenubuttonAction)ProUtilMenuToggleDone, &toggle_info, QUIT_SEL); err = ProMenuCreate(PROMENUTYPE_SUB, (char *)"TkMenuUtilSelect", &menu_id); err = ProMenuProcess((char *)"TkMenuUtilSelect", &action); if(err == PRO_TK_NO_ERROR && action == DONE_SEL) { err = ProArrayAlloc(0, sizeof(int), 1, (ProArray*)output_array); n_sel = 0; for (i=0; i<n_but; i++) if (toggle_array[i]) { ProArrayObjectAdd((ProArray*)output_array, PRO_VALUE_UNUSED, 1, &i); n_sel++; } if (n_sel>0) { *p_n_sel = n_sel; ret_status = PRO_TK_NO_ERROR; } else err = ProArrayFree((ProArray*)output_array); } err = ProArrayFree((ProArray*)&toggle_array); return (ret_status); }