2013-09-16 72 views
0

我有一臺服務器同時接收客戶端連接。我主要使用NI提供的MultiClientServer樣本作爲模型來實現使用多線程的服務器。 我最多有4個客戶端連接,每個客戶端發送有關其內部變量的信息。我的目標是根據哪個客戶端發送它在單獨的選項卡中顯示此數據。 我有握住手柄爲每個標籤元素的數組,運行時動態分配UI控件名稱

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和TABPANEL4,則第一個TAB上的UI元素將被稱爲TABPANEL1_CONTROLNAME。 但是我怎麼能在運行時引用一個控件並在SetCtrlVal命令中使用它呢?我不喜歡使用Fmt,因爲它會減慢速度,加上,我不知道如何使用字符串來評估控件名稱。

+1

*** *** [HERE](http://forums.ni。 com/t5/LabWindows-CVI/How-to-get-control-button-handle-HWND/td-p/2041814)***(在NI網站上)講述了獲取ctrl句柄的一般情況,總之這個帖子說不能完成。對於常規的ctrls,我使用了運行時變量賦值,而不是製表符。 LabWindows/CVI中的Tab控件是(如你所發現的)在選項卡面板的句柄下。更重要的是,您不能在運行時「創建」「UI」.h文件中的連接UI參考。它們是在保存.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)。所有的信息中的鏈接,但這裏是它的原型:使用NewCtrl

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

示例代碼在這裏找到:
C:\ Program Files文件(x86)的\國家儀器\ CVIxxxx \ samples \ userint \ buildui.cws
C:\ Program Files(x86)\ National Instruments \ CVIxxxx \ samples \ userint \ ICOViewer.cws