最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

LabVIEW和LabWindows/CVI調(diào)用ActiveX控件的編程方法

2022-09-05 16:39 作者:江南拱橋夜  | 我要投稿

? ? ? ? LabVIEW是由美國國家儀器(NI)公司研制開發(fā)一種圖形化的編程語言,它不僅是虛擬儀器軟件開發(fā)的一種編程工具,同時也是一種通用的、完善的、開放的高級編程語言,并提供了強大的外部接口編程技術(shù),如DLL技術(shù)、ActiveX技術(shù)等等,可以實現(xiàn)LabVIEW與C、Basic、Matlab等編程語言,甚至與外部應(yīng)用軟件(如Word、Excel等)之間的通信,合理使用這些接口技術(shù),可以充分利用其它軟件的優(yōu)勢,彌補LabVIEW自身的不足,編寫出功能更加強大的應(yīng)用軟件。

? ? ? ??LabWindows/CVI是一個NI公司推出的交互式C語言開發(fā)平臺,他類似于LabVIEW的高端版本,它的集成化開發(fā)環(huán)境、交互式編程方法、函數(shù)面板和豐富的庫函數(shù)大大增強了語言的功能,主要應(yīng)用在各種測試、控制、故障分析及信息處理軟件的開發(fā)中。與LabVIEW一樣,也提供了強大的外部接口編程技術(shù),如DLL技術(shù)、ActiveX技術(shù)等等??梢詫崿F(xiàn)與Matlab等編程語言,甚至與外部應(yīng)用軟件(如Word、Excel等)之間的通信。

? ? ? ??ActiveX控件基于COM服務(wù)器進行操作,且與開發(fā)平臺無關(guān),因此,在一種編程語言上開發(fā)的ActiveX控件無需任何修改,就可在另一種編程語言中使用。由于其可重用性的特點,目前,除操作系統(tǒng)本身提供的ActiveX控件外,在網(wǎng)絡(luò)資源上也能得到相當多的ActiveX控件,可以幫助我們完成各種各樣的軟件開發(fā)任務(wù)。

? ? ? ?下面通過一個例子說明在LabVIEW和LabWindows/CVI平臺中使用ActiveX控件編程的方法(以Chart控件為例)。

? ? ? ?Chart控件可以用于繪制各種圖表,支持真正的三維顯示,支持所有主要的圖表類型。值和數(shù)據(jù)點可以用棒圖、線段圖、區(qū)域圖、臺階圖、餅圖等形式顯示。還具有標題、背景、圖例、圖形和腳注屬性。

? ? ? ?使用Chart控件必須注冊MSChart控件。注冊方法:mschrt20.ocx下載放在目錄c:\windows\syswow64目錄下。CMD管理員運行,命令行中輸入regsvr32 mschrt20.ocx,regsvr32 c:\Windows\SysWOW64\MSCHRT20.OCX(相應(yīng)控件名)。

LabVIEW使用Chart控件

前面板中插入狀態(tài)欄控件的方法為,在前面板“ActiveX容器”控件的右鍵菜單中選擇“插入ActiveX對象...”命令,彈出“選擇ActiveX對象”對話框,選擇“Microsoft Chart Control”控件。如對于本例,右鍵菜單中選擇“MSChart”-“Properties”,彈出如圖所示的狀態(tài)欄屬性框。它是ActiveX控件本身提供的對話框,由ActiveX控件的開發(fā)者提供給用戶使用的屬性設(shè)置的工具,在這個工具中可以對所有的可寫屬性進行修改或查看。然后添加其它控件。

“選擇ActiveX對象”對話框


ActiveX對象本身提供的屬性設(shè)置

LabVIEW前面板設(shè)計

? ? ? 本例VI程序運行前面板如圖所示,在前面板上中間位置調(diào)用了操作系統(tǒng)提供的ActiveX控件——“Microsoft Chart Control”,當按下面板上相應(yīng)的按鈕,數(shù)據(jù)以相應(yīng)的顯示形式顯示在界面上,點擊“退出”按鈕則退出程序。

前面板

? ? ? ? LabVIEW程序框圖的代碼實現(xiàn):

? ? ? ? 本例程序框圖使用了事件結(jié)構(gòu),在事件結(jié)構(gòu)中響應(yīng)前面板的所有命令按鈕的“值改變”事件。通過事件結(jié)構(gòu)使數(shù)據(jù)點可以用棒圖、線段圖、區(qū)域圖、臺階圖、餅圖等形式顯示。部分程序框圖如下:

程序框圖

? ? ? ?其中左邊的公式節(jié)點用于產(chǎn)生數(shù)據(jù),利用“Microsoft Chart Control”控件的屬性節(jié)點,通過對屬性節(jié)點中的chartType選項來確定圖形的顯示形式。

? ? ? ?首先說明一下什么是屬性,屬性是指對象(如控件、VI或應(yīng)用程序等)的特性,相當于C++類中的數(shù)據(jù)。具有“可讀”、“可寫”或“可讀寫”等操作方式。在程序框圖中的屬性節(jié)點函數(shù)上有一個小箭頭,若在左邊,表明該屬性可寫,若在右邊,表明該屬性可讀。對于可讀可寫的屬性,右鍵單擊屬性節(jié)點中的某個屬性,可以在右鍵菜單中選擇“轉(zhuǎn)換為讀取”或“轉(zhuǎn)換為寫入”,在兩者之間進行切換。關(guān)于屬性節(jié)點的生成不在本文論述的范圍內(nèi)。

? ? ? ?LabWindows/CVI使用Chart控件

? ? ?? 1????? 添加控件,面板右鍵菜單,選擇Activex....,然后在對話框中選擇“Microsoft Chart Control 6.0(其文件名為MSCHART20.0.OCX)”,添加到面板上。

? ? ? ? ?2????? 控件出現(xiàn)后,右鍵菜單,選擇屬性,Chart Type選擇3D。

? ? ? ? 3????? 右鍵菜單---》Generate ActiveX Control Driver創(chuàng)建控件驅(qū)動,也就是引入一堆操作頭文件,否則無法編碼操作。本操作實際上引入了fp和.h文件。本程序中引入的fp文件為MSCHART20.fp,h文件為:#include "MSCHRT20.h"。

? ? ? ? ? ?4????? 添加其它控件,然后編寫其它控件的回調(diào)函數(shù)。前面板效果如圖:

前面板

? ? ? ?LabWindows/CVI前面板設(shè)計

? ? ? 本例VI程序運行前面板如圖所示,在前面板上的中間位置調(diào)用了操作系統(tǒng)提供的ActiveX控件——“Microsoft Chart Control”,當按下面板上相應(yīng)的按鈕,數(shù)據(jù)以相應(yīng)的顯示形式顯示在界面上,點擊“退出”按鈕則退出程序。

? ? ? LabWindows/CVI程序的代碼實現(xiàn):

部分代碼

部分代碼如下:

#include "MSCHRT20.h"

#include <cviauto.h>

#include <cvirte.h>??????????

#include <userint.h>

#include "chartsample.h"

static CAObjHandle objecthandle;

static int panelHandle;

//產(chǎn)生繪圖數(shù)據(jù)

void getchart (void);

int main (int argc, char *argv[])

{

?????? if (InitCVIRTE (0, argv, 0) == 0)

????????????? return -1;????? /* out of memory */

?????? if ((panelHandle = LoadPanel (0, "chartsample.uir", PANEL)) < 0)

????????????? return -1;

?????? GetObjHandleFromActiveXCtrl (panelHandle, PANEL_MSCHART, &objecthandle);

?????? DisplayPanel (panelHandle);

?????? RunUserInterface ();

?????? DiscardPanel (panelHandle);

?????? return 0;

}

int CVICALLBACK QuitCallback (int panel, int control, int event,

????????????? void *callbackData, int eventData1, int eventData2)

{

?????? switch (event)

?????? {

????????????? case EVENT_COMMIT:

???????????????????? QuitUserInterface (0);

???????????????????? break;

?????? }

?????? return 0;

}

?

int CVICALLBACK colum3d (int panel, int control, int event,

????????????? void *callbackData, int eventData1, int eventData2)

{

?????? switch (event)

?????? {

????????????? case EVENT_COMMIT:

????????????????????

???????????????????? //產(chǎn)生3D棒圖

???????????????????? MSChart20Lib__DMSChartSetchartType (objecthandle, NULL, MSChart20LibConst_VtChChartType3dBar);

???????????????????? getchart ();

???????????????????? break;

?????? }

?????? return 0;

}

?

void getchart (void)

{

?????? VARIANT myvariantarray;

?????? int myarray[3][4]={0};

?????? int i;

?????? int j;

??????

?????? for (i = 0; i <= 2; i++)

?????? {

????????????? for (j = 0; j <= 3; j++)

????????????? {

???????????????????? myarray[i][j] = i + j;??

????????????? }

?????? }

??????

?????? //2維整型數(shù)組存儲到VARIANT變量中

?????? CA_VariantSet2DArray (&myvariantarray, CAVT_INT, 3, 4, myarray);

?????? //VARIANT變量中數(shù)據(jù)顯示到Chart控件中

?????? MSChart20Lib__DMSChartSetChartData (objecthandle, NULL, myvariantarray);

?????? //顯示圖標

?????? MSChart20Lib__DMSChartSetShowLegend (objecthandle, NULL, VTRUE);? ?

}

……

? ? ? ? ?其中void getchart (void) 函數(shù)用于產(chǎn)生數(shù)據(jù)并把數(shù)據(jù)顯示到Chart控件中。

HRESULT CA_VariantSet2DArray (VARIANT *variant, unsigned int arrayType, size_t sizeOfDim1, size_t sizeOfDim2, const void *array)函數(shù)將2維整型數(shù)組存儲到VARIANT變量中。*variant,用來存放VARIANT類型的指針;arrayType為數(shù)組數(shù)據(jù)類型;sizeOfDim1為第一維數(shù)組個數(shù);sizeOfDim2為第二維數(shù)組個數(shù);*array為原始數(shù)組指針。? ? ? ? ??MSChart20Lib__DMSChartSetShowLegend (CAO bjHandle objecthandle, ERRORINFO *errorInfo, VBOOL showLegend)函數(shù)用于表示是否顯示圖標。showLegendVTRUE VFALSE兩種選擇。

? ? ? ?結(jié)論

? ? ? ?由上面的例子可以看出,ActiveX控件類似于LabVIEW和LabWindows/CVI本身的控件,具有獨立的顯示界面,以及獨立的屬性、方法甚至事件,在系統(tǒng)中安裝注冊一個ActiveX控件后,操作系統(tǒng)中所有應(yīng)用程序都可以使用這個控件,同時,LabVIEW和LabWindows/CVI語言調(diào)用ActiveX控件的編程也相對比較簡單。


LabVIEW和LabWindows/CVI調(diào)用ActiveX控件的編程方法的評論 (共 條)

分享到微博請遵守國家法律
靖边县| 姜堰市| 商丘市| 青冈县| 慈溪市| 绿春县| 沂南县| 马山县| 吴忠市| 涟水县| 浙江省| 西乌珠穆沁旗| 苗栗县| 龙井市| 宁城县| 临猗县| 台湾省| SHOW| 当雄县| 英山县| 富裕县| 嘉鱼县| 尼玛县| 安仁县| 新余市| 新绛县| 腾冲县| 无为县| 广灵县| 灵山县| 兴城市| 会东县| 萝北县| 柘荣县| 宝清县| 双鸭山市| 渭南市| 阿尔山市| 锦屏县| 山西省| 都兰县|