0

我有一个接收同时客户端连接的服务器。我主要使用 NI 提供的 MultiClientServer 示例作为模型来实现使用多线程的服务器。我有多达 4 个客户端连接,每个客户端发送有关其内部变量的信息。我的目标是根据发送数据的客户端将这些数据显示在单独的选项卡中。我有一个数组来保存每个选项卡元素的句柄,

static int ClientTABHandle[4] = {0,0,0,0};  

当客户端连接并报告其 ID 时,该 ID 用于在调用 SetCtrlVal 时引用正确的 ClientTABHandle。例如,

SetCtrlVal(boardTABHandle[clientInfoPtr->clientID],<control name>, <value>);

<> 中的值是符号。

现在,这让我可以在运行时使用正确的 TAB 句柄,具体取决于我正在处理的客户端,但我找不到动态引用的方法。由于 UI 控件位于单独的选项卡中,因此每个控件都将具有其 TAB 名称的前缀。例如,如果 TAB 称为 TABPANEL1、TABPANEL2、TABPANEL3 和 TABPANEL 4,则第一个 TAB 上的 UI 元素将称为 TABPANEL1_CONTROLNAME。但是如何在运行时创建一个引用控件的字符串并在 SetCtrlVal 命令中使用它?我不喜欢使用 Fmt,因为它会减慢速度,而且,我不知道如何使用会评估为控件名称的字符串。

4

1 回答 1

1

您的问题how can I make a string at runtime that refers to a control and use that in the SetCtrlVal command?
如果您的方法允许您以编程方式创建以后需要的控件SetCtrlVal,或者SetCtrlAttribute,那么答案可能是尝试使用NewCtrl(,,,) 函数。它将允许您在选项卡面板上创建控件,并且将为它创建的每个控件返回一个唯一的句柄 (ControlID)。所有信息都在链接中,但这里是它的原型:

int NewCtrl (int Panel_Handle, int Control_Style, char Control_Label[], int control_Top, int Control_Left);

使用 NewCtrl 的示例代码位于:
C:\Program Files (x86)\National Instruments\CVIxxxx\samples\userint\buildui.cws
C:\Program Files (x86)\National Instruments\CVIxxxx\samples\userint\ICOViewer.cws

于 2013-09-18T14:38:15.107 回答