我有一臺服務器同時接收客戶端連接。我主要使用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,因爲它會減慢速度,加上,我不知道如何使用字符串來評估控件名稱。
*** *** [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