Pro/TOOLKIT示例程序:菜单,Checkbox和RadioButton菜单项

转载自: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;
}




你可能感兴趣的:(Pro/TOOLKIT示例程序:菜单,Checkbox和RadioButton菜单项)