2013-09-16 5 views
0

У меня есть сервер, который получает одновременные клиентские соединения. Я в основном использовал образец MultiClientServer, предоставленный NI, в качестве модели для реализации сервера, использующего многопоточность. У меня есть до 4 клиентов, с которыми каждый клиент отправляет информацию о своих внутренних переменных. Моя цель - отображать эти данные на отдельных вкладках, в зависимости от того, какой клиент отправил его. У меня есть массив, который содержит ручку для каждого элемента вкладок,Динамически назначать имена элементов управления пользовательским интерфейсом во время выполнения

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

Когда клиент подключения и сообщать о своих идентификаторов, идентификатор используется для обозначения правой ClientTABHandle при вызове SetCtrlVal. Например,

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

Значения в <> являются symblic.

Теперь это позволяет мне использовать правую дескриптор TAB во время выполнения в зависимости от того, с каким клиентом я имею дело, но я не могу найти способ динамического обращения. Поскольку элементы управления пользовательского интерфейса находятся в отдельных вкладках, каждый элемент управления будет иметь префикс своего имени TAB. Например, если TAB называются TABPANEL1, TABPANEL2, TABPANEL3 и TABPANEL 4, тогда элемент пользовательского интерфейса в первой TAB будет называться TABPANEL1_CONTROLNAME. Но как я могу создать строку во время выполнения, которая ссылается на элемент управления и использовать его в команде SetCtrlVal? Мне не нравится использовать Fmt, так как это замедлит работу, и, кроме того, я не знаю, как использовать строку, которая будет оценивать имя элемента управления.

+1

сообщение *** [ЗДЕСЬ] (http://forums.ni. com/t5/LabWindows-CVI/How-to-get-control-button-handle-HWND/td-p/2041814) *** (на веб-сайте NI) обратился к общему случаю получения дескриптора в ctrl,Короче говоря, сообщение говорит, что это невозможно. Я использовал назначения переменных времени выполнения для обычных ctrls, никогда не для вкладок. Элементы управления вкладками в LabWindows/CVI - это (как вы обнаружили) слой под дескриптором панели вкладок. Что еще более важно, вы не можете «создать» конкатенированные ссылки интерфейса, найденные в файле «UI» .h во время выполнения. Они создаются при сохранении файла .uir (редактирование этого не рекомендуется) – ryyker

ответ

1

Ваш вопрос how can I make a string at runtime that refers to a control and use that in the SetCtrlVal command?:
Если ваш подход позволит вам программно создать элементы управления, для которого позже нужно SetCtrlVal или SetCtrlAttribute, то ответ может быть поэкспериментировать с NewCtrl(,,,) function. Это позволит вам создавать элементы управления на вкладках, и он вернет уникальный дескриптор (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

Смежные вопросы