转载自:http://www.icaxdev.com/?p=869
示例效果如下图:
代码如下:
#pragma once #include "stdafx.h" #include "PTKHeaders.h" #include <string> #include <vector> using std::wstring; using std::vector; // 函数声明 uiCmdAccessState TestAccess(uiCmdAccessMode access_mode); int Test1(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data); int Test2(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data); int UserCheckOptionCmd(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data); int UserCheckOptionCmd_ValFunc(uiCmdCmdId command, uiCmdValue *p_value); int UserRadioOptionCmd(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data); int UserRadioOptionCmd_ValFunc(uiCmdCmdId command, uiCmdValue *p_value); // Check Button typedef struct user_check_button { uiCmdCmdId command; wstring cmdName; ProBoolean state; }UserCheckButton; static UserCheckButton myChkBtns[3] = { 0 }; static ProMenuItemName radio_group_items[] = {"TestRadio1", "TestRadio2", "TestRadio3", ""}; static ProMenuItemLabel radio_group_labels[] = {"TestRadio1", "TestRadio3", "TestRadio3", ""}; static ProMenuLineHelp radio_group_helps[] = {"TestRadio1_Help", "TestRadio2_Help", "TestRadio3_Help", ""}; // Pro/TOOLKIT入口函数 extern "C" int user_initialize() { ProError err; // 信息文件名称 ProFamilyName MsgFile; ProStringToWstring(MsgFile, "Test_Msg.txt"); // 添加菜单:TestMenu err = ProMenubarMenuAdd("TestMenu", "TestMenu", "Help", PRO_B_TRUE, MsgFile); uiCmdCmdId cmdTestId1; err = ProCmdActionAdd("cmdTestId1", Test1, uiCmdPrioDefault, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmdTestId1); err = ProCmdIconSet(cmdTestId1, "cmd_test_id_1.gif"); err = ProMenubarmenuPushbuttonAdd("TestMenu", "Test1", "Test1", "Test1_Help", NULL, PRO_B_TRUE, cmdTestId1, MsgFile); err = ProMenubarmenuMenuAdd("TestMenu", "Menu1", "Menu1", NULL, PRO_B_TRUE, MsgFile); uiCmdCmdId cmdTestId2; err = ProCmdActionAdd("cmdTestId2", Test2, uiCmdPrioDefault, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmdTestId2); err = ProMenubarmenuPushbuttonAdd("Menu1", "Test2", "Test2", "Test2_Help", NULL, PRO_B_TRUE, cmdTestId2, MsgFile); //------------------------------------------- // Check Button //------------------------------------------- err = ProMenubarmenuMenuAdd("TestMenu", "Menu2", "Menu2", NULL, PRO_B_TRUE, MsgFile); uiCmdCmdId cmdOptionA; err = ProCmdOptionAdd("option_cmd_A", UserCheckOptionCmd, PRO_B_TRUE, UserCheckOptionCmd_ValFunc, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmdOptionA); myChkBtns[0].command = cmdOptionA; myChkBtns[0].cmdName = L"A"; myChkBtns[0].state = PRO_B_TRUE; err = ProMenubarmenuChkbuttonAdd("Menu2", "OptionA", "OptionA", "OptionA_Help", NULL, PRO_B_TRUE, cmdOptionA, MsgFile); uiCmdCmdId cmdOptionB; err = ProCmdOptionAdd("option_cmd_B", UserCheckOptionCmd, PRO_B_TRUE, UserCheckOptionCmd_ValFunc, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmdOptionB); myChkBtns[1].command = cmdOptionB; myChkBtns[1].cmdName = L"B"; myChkBtns[1].state = PRO_B_TRUE; err = ProMenubarmenuChkbuttonAdd("Menu2", "OptionB", "OptionB", "OptionB_Help", NULL, PRO_B_TRUE, cmdOptionB, MsgFile); uiCmdCmdId cmdOptionC; err = ProCmdOptionAdd("option_cmd_C", UserCheckOptionCmd, PRO_B_TRUE, UserCheckOptionCmd_ValFunc, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &cmdOptionC); myChkBtns[2].command = cmdOptionC; myChkBtns[2].cmdName = L"C"; myChkBtns[2].state = PRO_B_FALSE; err = ProMenubarmenuChkbuttonAdd("Menu2", "OptionC", "OptionC", "OptionC_Help", NULL, PRO_B_TRUE, cmdOptionC, MsgFile); err = ProMenubarmenuMenuAdd("TestMenu", "Menu4", "Menu4", NULL, PRO_B_TRUE, MsgFile); //------------------------------------------- // Radio Button //------------------------------------------- err = ProMenubarmenuMenuAdd("TestMenu", "Menu3", "Menu3", NULL, PRO_B_TRUE, MsgFile); uiCmdCmdId radioCmd; err = ProCmdOptionAdd("test_radio_cmd", UserRadioOptionCmd, PRO_B_FALSE, UserRadioOptionCmd_ValFunc, TestAccess, PRO_B_FALSE, PRO_B_FALSE, &radioCmd); err = ProMenubarmenuRadiogrpAdd("Menu3", "TestRadioGroup", 3, radio_group_items, radio_group_labels, radio_group_helps, NULL, PRO_B_TRUE, radioCmd, MsgFile); return 0; } // Pro/TOOLKIT结束时调用的函数 extern "C" void user_terminate() { } int Test1(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { AfxMessageBox(_T("Test1")); return 0; } int Test2(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { AfxMessageBox(_T("Test2")); return 0; } int UserCheckOptionCmd(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { for (int i = 0; i < sizeof(myChkBtns) / sizeof(myChkBtns[0]); ++i) { if (myChkBtns[i].command == command) { if (PRO_B_TRUE == myChkBtns[i].state) { myChkBtns[i].state = PRO_B_FALSE; } else { myChkBtns[i].state = PRO_B_TRUE; } MessageBoxW(NULL, myChkBtns[i].cmdName.c_str(), L"www.icaxdev.com", MB_OK); } } return 0; } int UserCheckOptionCmd_ValFunc(uiCmdCmdId command, uiCmdValue *p_value) { for (int i = 0; i < sizeof(myChkBtns) / sizeof(myChkBtns[0]); ++i) { if (myChkBtns[i].command == command) { ProMenubarmenuChkbuttonValueSet(p_value, myChkBtns[i].state); break; } } return 0; } int UserRadioOptionCmd(uiCmdCmdId command, uiCmdValue *p_value, void *p_push_command_data) { ProError err; ProMenuItemName name; err = ProMenubarMenuRadiogrpValueGet(p_value, name); MessageBoxA(NULL, name, "www.icaxdev.com", MB_OK); return 0; } int UserRadioOptionCmd_ValFunc(uiCmdCmdId command, uiCmdValue *p_value) { /*ProError err; err = ProMenubarMenuRadiogrpValueGet(p_value, name); TEST_CALL_REPORT("ProMenubarMenuRadiogrpValueGet()", "ProTestRadioButtonValue()", err, err != PRO_TK_NO_ERROR); err = ProMenubarMenuRadiogrpValueSet(p_value, name);*/ /*for (int i = 0; i < sizeof(myChkBtns) / sizeof(myChkBtns[0]); ++i) { if (myChkBtns[i].command == command) { ProMenubarmenuChkbuttonValueSet(p_value, myChkBtns[i].state); break; } }*/ return 0; } uiCmdAccessState TestAccess(uiCmdAccessMode access_mode) { return ACCESS_AVAILABLE; }