📄 cvidemo.c
字号:
//----------------------------------------------------------------------------
// Example which illustrates how to use ActiveX Automation to control the
// LabWindows/CVI IDE.
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------------
#include <cviauto.h>
#include <ansi_c.h>
#include "cvisrvr.h"
#include <utility.h>
#include <cvirte.h>
#include <userint.h>
#include "cvidemo.h"
//----------------------------------------------------------------------------
// Variables
//----------------------------------------------------------------------------
static CAObjHandle cviAutoObj = 0;
static int panel = 0;
//----------------------------------------------------------------------------
// Prototypes
//----------------------------------------------------------------------------
static void MessagePopupCAError(int status);
static void MessagePopupCVIError(int status);
//----------------------------------------------------------------------------
// Main
//----------------------------------------------------------------------------
int main (int argc, char *argv[])
{
HRESULT hresult = S_OK;
int retVal = 0;
if (InitCVIRTE (0, argv, 0) == 0) /* Initialize CVI libraries */
return -1; /* out of memory */
if ((panel = LoadPanel (0, "cvidemo.uir", PANEL)) < 0)
return -1;
// Run UIR
DisplayPanel (panel);
RunUserInterface();
// If CVI was launched, shutdown the application
if (cviAutoObj)
{
hresult = CVI_AppExitCVI (cviAutoObj, NULL, TRUE, &retVal);
if (hresult<0)
MessagePopupCAError(hresult);
if (retVal<0)
MessagePopupCVIError(retVal);
CA_DiscardObjHandle (cviAutoObj);
cviAutoObj = 0;
}
DiscardPanel (panel);
return 0;
}
//----------------------------------------------------------------------------
// Callbacks
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// LaunchCVI
//----------------------------------------------------------------------------
int CVICALLBACK LaunchCVI (int panel, int control, int event, void *callbackData,
int eventData1, int eventData2)
{
HRESULT hresult = S_OK;
switch (event) {
case EVENT_COMMIT:
// Launch CVI Application
SetWaitCursor(1);
hresult = CVI_NewApp (NULL, 1, LOCALE_NEUTRAL, 0, &cviAutoObj);
SetWaitCursor(0);
if (hresult)
MessagePopupCAError(hresult);
else
{
SetCtrlAttribute(panel, PANEL_LOADPROJECT, ATTR_DIMMED, 0);
SetCtrlAttribute(panel, PANEL_VIEWSOURCE, ATTR_DIMMED, 0);
SetCtrlAttribute(panel, PANEL_RUNPROJECT, ATTR_DIMMED, 0);
SetCtrlAttribute(panel, PANEL_CREATEEXE, ATTR_DIMMED, 0);
SetCtrlAttribute(panel, PANEL_SHUTDOWNCVI, ATTR_DIMMED, 0);
}
break;
}
return 0;
}
//----------------------------------------------------------------------------
// LoadProject
//----------------------------------------------------------------------------
int CVICALLBACK LoadProject (int panel, int control, int event, void *callbackData,
int eventData1, int eventData2)
{
HRESULT hresult = S_OK;
int retVal = 0;
char pathName[MAX_PATHNAME_LEN];
switch (event) {
case EVENT_COMMIT:
// Get project file from user
while(1)
{
retVal = FileSelectPopup ("..\\..\\userint", "*.prj", "*.prj",
"Select Project", VAL_LOAD_BUTTON,
FALSE, FALSE, TRUE, FALSE, pathName);
// Load project file
if (retVal == VAL_EXISTING_FILE_SELECTED)
{
if (strstr(pathName, "cvidemo"))
{
MessagePopup ("CVI ActiveX Server Demo",
"Please choose a different project file other than CVIDEMO.");
} else
{
SetWaitCursor(1);
hresult = CVI_AppOpenProject (cviAutoObj, NULL, pathName, FALSE, &retVal);
SetWaitCursor(0);
if (retVal<0 || hresult<0)
goto Error;
break;
}
}
else break;
retVal = 0;
}
break;
}
return 0;
Error:
if (hresult<0)
MessagePopupCAError(hresult);
if (retVal<0)
MessagePopupCVIError(retVal);
return 0;
}
//----------------------------------------------------------------------------
// ViewSource
//----------------------------------------------------------------------------
int CVICALLBACK ViewSource (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
HRESULT hresult = S_OK;
int retVal = 0;
int index;
int found;
int numFiles = 0;
char *pathName = NULL;
char shortName[MAX_PATHNAME_LEN];
switch (event) {
case EVENT_COMMIT:
// See if the
hresult = CVI_AppGetNumProjectFiles (cviAutoObj, NULL, &numFiles, &retVal);
if (retVal<0 || hresult<0)
goto Error;
if (numFiles)
{
// Load prompt panel
if (!(panel = LoadPanel (0, "cvidemo.uir", CHOOSEFILE)))
goto Error;
// Loop thru and add file to listbox
for (index=0; index<numFiles; index++)
{
hresult = CVI_AppGetFileNameByIndex (cviAutoObj,
NULL, index, &pathName, &found, &retVal);
if (retVal<0 || hresult<0)
goto Error;
SplitPath (pathName, NULL, NULL, shortName);
if (!strstr(shortName, ".lib") && !strstr(shortName, ".obj"))
InsertListItem(panel, CHOOSEFILE_LISTBOX, -1, shortName, pathName);
if (pathName)
{
CA_FreeMemory (pathName);
pathName = NULL;
}
}
// Make sure there are files in the list
GetNumListItems (panel, CHOOSEFILE_LISTBOX, &numFiles);
if (numFiles<1)
{
MessagePopup ("CVI ActiveX Server Demo",
"There are no editable files in the project.");
break;
}
// Install panel and get choose from user
InstallPopup (panel);
while (GetUserEvent (1, &panel, &control)!=1);
RemovePopup (0);
if (control!=CHOOSEFILE_CANCEL)
{
GetCtrlVal(panel, CHOOSEFILE_LISTBOX, shortName);
DiscardPanel(panel);
// Display file
hresult = CVI_AppGetAbsPathFromProject (
cviAutoObj, NULL, shortName, &pathName, &retVal);
if (retVal<0 || hresult<0)
goto Error;
SetWaitCursor(1);
hresult = CVI_AppOpenWindow (cviAutoObj, NULL,
pathName, &retVal);
SetWaitCursor(0);
if (retVal<0 || hresult<0)
goto Error;
if (pathName)
{
CA_FreeMemory (pathName);
pathName = NULL;
}
}
else
DiscardPanel(panel);
}
else
MessagePopup ("CVI ActiveX Server Demo",
"There are no editable files in the project.");
break;
}
return 0;
Error:
if (pathName)
CA_FreeMemory (pathName);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -