여기는 편의상 스톱워치를 만들었다.
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 |