여기는 편의상 스톱워치를 만들었다.

1 -> 프로젝트에 연결된 파일을 표시 합니다.

2 -> GUI 화면을 표시 합니다.

3 -> GUI 화면상에 있는 컴퍼넌트 list 가 대표명으로 표기, 선택 하면 해당 컴퍼넌트가 표시됨

4 -> 선택된 컴퍼넌트의 특성을 표시 합니다.

 

    

마우스를 이용해서 위치 및 크기 등을 조절 할 수 있다.

컴퍼넌트에 마우스 포인트를 이동 후 오른쪽 마우스를 누르면 여러 매뉴가 나타난다.

Generate Control Callback : 이 키를 누르면(이벤트를 발생하면) 동작할 함수를 만든다.

신규 함수 생성시 사용한다. 주의 사항은 함수를 만든 상태에서 소스코드를 입력 하고

다시 만들어 버리면 기존 소스를 지울지 유지할지를 물어보는데 잘못하면 ~~

View Control Callback : 이 키를 누르면(이벤트를 발생하면) 동작할 함수를 보여준다.

타이머를 발생시키기 위해 타이머를 추가 했다.

컴파일이 완료되면 보이지 않는다.

 

소스를 대충 보겠다.

 

변수 선언한다.

#include <ansi_c.h>

#include <cvirte.h>        

#include <userint.h>

#include <utility.h>

#include "test_app1.h"

 

static int panelHandle;

static int flag = 0;    //stop watch 사용용

static int flag1 = 0; // 프로그램 시작 초기화

static int flag2 = 0; //타이머 사용용

static long time_count =0;    //stop watch 사용용

static long time_count2 =0;    //타이머 사용용

char buf[100];

 

Main 함수

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

{

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

        return -1;    /* out of memory */

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

        return -1; //test_app1.uir이 없으면 실행불가

    DisplayPanel (panelHandle);

    RunUserInterface (); //여기서 화면이 표시된다.

    DiscardPanel (panelHandle);

    return 0;

}

 

기능을 선언한다.

int CVICALLBACK panelCB (int panel, int event, void *callbackData,

        int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_GOT_FOCUS:

 

            break;

        case EVENT_LOST_FOCUS:

 

            break;

        case EVENT_CLOSE:

            QuitUserInterface(0); //X 버튼 눌리면 종료

            break;

    }

    return 0;

}

 

버튼이 눌리면 처리하는 함수

int CVICALLBACK COMMANDBUTTON_A (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            //SetCtrlVal( panel,PANEL_STRING,"아빠 바보");

            flag = 1;

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_B (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            //SetCtrlVal( panel,PANEL_STRING,"그 바보가 아니라 천재");

            flag = 0;

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_C (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            //SetCtrlVal( panel,PANEL_STRING,"누구세요 ??");

            flag = 0;

            time_count = 0;

            sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100);

            SetCtrlVal( panel,PANEL_STRING,buf);

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_D (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    switch (event)

    {

        case EVENT_COMMIT:

 

            GetCtrlVal(panel,PANEL_NUMERIC, &info);

            time_count2 = info * 6000 ;

            sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

            SetCtrlVal( panel,PANEL_STRING1,buf);

            flag2 = 1;

            

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_E (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    switch (event)

    {

        case EVENT_COMMIT:

            flag2 = 0;

            break;

    }

    return 0;

}

 

int CVICALLBACK NUMERIC_A (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    

    switch (event)

    {

        case EVENT_COMMIT:

            if(flag2 == 0)

            {

                GetCtrlVal(panel,PANEL_NUMERIC, &info);

                time_count2 = info * 6000 ;

                sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                SetCtrlVal( panel,PANEL_STRING1,buf);

 

            }

            

            break;

    }

    return 0;

}

 

int CVICALLBACK COMMANDBUTTON_F (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    switch (event)

    {

        case EVENT_COMMIT:

 

            if(flag2 == 0)

            {

                GetCtrlVal(panel,PANEL_NUMERIC, &info);

                time_count2 = info * 6000 ;

                sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                SetCtrlVal( panel,PANEL_STRING1,buf);

 

            }

            

            break;

    }

    return 0;

}

 

타이머 동작 실행

int CVICALLBACK Timer_aaa (int panel, int control, int event,

        void *callbackData, int eventData1, int eventData2)

{

    int info;

 

    switch (event)

    {

        case EVENT_TIMER_TICK:

 

            if(flag1 == 0)

            {

                sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100);

                SetCtrlVal( panel,PANEL_STRING,buf);

 

                GetCtrlVal(panel,PANEL_NUMERIC, &info);

                time_count2 = info * 6000 ;

                sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                SetCtrlVal( panel,PANEL_STRING1,buf);

 

                flag1 = 1;

            }

 

            

            if(flag)

            {

                time_count ++;

                sprintf(buf,"%d : %d : %d : %d", (time_count/360000), (time_count/6000)%60,(time_count/100)%60,time_count%100);

                SetCtrlVal( panel,PANEL_STRING,buf);

            }

 

            if(flag2)

            {

                if(time_count2 > 0)

                {

                    time_count2 --;

            

                    sprintf(buf,"%d : %d : %d : %d", (time_count2/360000), (time_count2/6000)%60,(time_count2/100)%60,time_count2%100);

                    SetCtrlVal( panel,PANEL_STRING1,buf);

                    

                    if(time_count2 == 0)

                    {

                        flag2 =0;

                        Beep();

                        Beep();

                        Beep();

 

                    }

                }

            

            }

            break;

    }

    return 0;

}

 

추가로 Uir 파일 실행파일에 추가하기

Target Setting 에서 Embed project .UIRs 를 선택 한다.

 

예제 파일 다운로드 : 00001.zip

 

'공부 > CVI' 카테고리의 다른 글

CVI 프로젝트 만들기 2  (0) 2012.11.20
CVI 프로젝트 만들기 1  (0) 2012.11.20
CVI 가 window 7 64bit 를 지원할까 ?  (0) 2012.11.16
CVI 고찰  (0) 2012.11.16

+ Recent posts