⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cvidemo.c

📁 使用ActiveX控件控制NI公司的Labwindows/CVI开发环境。
💻 C
📖 第 1 页 / 共 2 页
字号:
//----------------------------------------------------------------------------
// 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 + -