csxs::event::EventErrorCode RegisterCSXSEventListeners(); csxs::event::EventErrorCode RemoveEventListeners(); ASErr SendData(); void ParseData(const char* eventData);
其中RegisterCSXSEventListeners()方法是在当前工程下注册监听,RemoveEventListeners()是AI关闭时回收这些监听,SendData()是在UI面板展示的时候向它发送数据,ParseData(const char* eventData)是处理UI面板发送过来的数据。
其中,在AI启动的时候,消息机制下,运行到error = Notify(msg);这里的时候
if (fPanelController != NULL)
{
fPanelController->RegisterCSXSEventListeners();
}运行上面的代码,这里的fPanelController是你的PanelController的实例化对象。具体注册的代码如下:
csxs::event::EventErrorCode TestPanelController::RegisterCSXSEventListeners()
{
csxs::event::EventErrorCode result = csxs::event::kEventErrorCode_Success;
do
{
result = fPPLib.AddEventListener(DIALOG_READY, PanelReadyFunc, this);
if ( result != csxs::event::kEventErrorCode_Success )
{
break;
}
result = fPPLib.AddEventListener(GET_PARAMS_RESP, GetParamsFromPanel, this);
if ( result != csxs::event::kEventErrorCode_Success )
{
break;
}
}
while ( false );
return result;
} 其中, static const char* GET_PARAMS_RESP = "com.lm.shpToAI.shpToAIGetParamsResp"; static const char* DIALOG_READY = "com.lm.shpToAI.shpToAIDialogReady"; 如果你细心,你会发现,添加监听的第一个参数是上一篇文章UI中的参数,这里的第一个参数一定要相对应,第二个参数就是响应的TestPanelController下你自定义的方法,分别是PanelReadyFunc,GetParamsFromPanel 值得注意的是DIALOG_READY这个消息代表的是面板快展示调用的方法,这里在C++工程函数是,PanelReadyFunc,里面调用了SendData(),代码如下:
ASErr SHP2AIPanelController::SendData()
{
stringstream payload;
payload << "
";
ai::int16 numOfConstants = sizeof(params) / sizeof(ParamConstant);
for (ai::int16 i = 0; i < numOfConstants; i++)
{
payload << "<" << params[i].label << ">"
<< "<" << CORNERS_TAG << ">"
<< params[i].params.corners
<< "
"
<< "<" << SIZE_TAG << ">"
<< params[i].params.size
<< "
"
<< "
";
}
payload << "
";
std::string payload_str = payload.str();
const char* payload_cstr = payload_str.c_str();
csxs::event::Event event =
{
GET_PARAMS_REQ,
csxs::event::kEventScope_Application,
"SHP2AI",
NULL,
payload_cstr
};
fPPLib.DispatchEvent(&event);
return kNoErr;
} 可以很明显看到 fPPLib.DispatchEvent(&event);证明这里向UI界面,也就是Adobe Illustrator界面程序发送了消息,看我的上一篇文章发现,第一行监听了这个GET_PARAMS_REQ
这样就可以很好理解两个编译工具之间的消息交互了,具体机制可以看下面的图。