기본적인 내용
Mouse_Over_Event 구문
pvapp.h 헤더파일에 보면 trace 가 정의 되어 있다. 스레드의 경우 기본적으로 trace = 1 이다. 이 값이 1 이면 서버 도스창에 printf 메시지가 표시된다. 메시지 보기가 귀찮거나, 필요없다면 0을 선택하면된다. 개발 과정에선 매우 요긴하게 사용된다.
메시지 표시 후 바로 slotMouseOverEvent 함수를 수행한다.
slotMouseOverEvent 함수
Mask*_Slot 헤더 파일 생성 시 자동으로 만들어지는 slotMouseOverEvent() 코드는 다음과 같다. 간단하게 retrun을 빼면 에러 확인용 코드 1줄 밖에 없다.이 함수로 전달되는 인자는 다음과 같다.
- PARAM *p
우선은 pvserver 프로그램 전역 변수 정도로만 알아두자. - int id
위젯별 고유 넘버,UI 화면에 생성되는 순서대로 붙는 것 같다.(확실하지 않음) - DATA *d
Mask 프로그램용 전역 변수.
Mask*_slot.h 윗 부분에 structure 로 선언되어있다.
기본은 blank..., Mask프로그램 내부적으로 사용할 변수들을 정의하여 사용하면 된다.
기본적으로 포인터로 정의 되므로 변수 참조시 -> 을 사용하여야 한다.
자세한 내용은 기회되는 대로... - int enter
이 이벤트의 경우 0 이면 위젯 밖, 1 이면 위젯 위
위젯 Text 변경
Label 위젯 위에 마우스가 있으면 "Mouse Over", 밖에 있으면 "Mouse Outer" 텍스트를 라벨에 표시하는 코드를 작성해보자 하자.slotMouseOverEvent에 다음 코드에 있는 내용을 추가하자.
추가된 구문을 간략히 설명하면 다음과 같다.
printf("slot Mouse Over id=%d, enter=%d\n", id, enter);
slotMouseOverEvent 함수로 입력되는 값을 확인하기 위한 구문으로 나중에 주석처리하면 된다.
- id
위젯 고유 넘버 - enter
slotMouseOverEvent의 경우 0 이면 배경, 1 이면 위젯 위
{
enter ? pvSetText(p, id, "Mouse Over") : pvSetText(p, id, "Mouse Outer");
}
enter 변수는 정수형이지만 0, 1 값만 갖기 때문에 (조건) ? 참 : 거짓; 을 이용하여 1인 경우 "Mouse Over", 0 이면 "Mouse Outer" 를 라벨 위젯 text로 표시 하게 하였다.
pvsetText(p, id, "text");
pv 함수들 가운데 pvQLabel의 Text 값을 변경하기 위해 사용하는 함수이다. 꼭 라벨 위젯에서 만 사용되는 것은 아니고 id 의 위젯 Text 항목을 변경시킨다.
자 그럼 server Start를 눌러 컴파일 후 pvbrowser에서 확인해 보자. 동영상을 넣는 방법을 몰라 이미지만 첨부한다.
그림 1. 마우스 가 위젯 밖에 있을때(녹색부분) |
그림 2. 마우스가 위젯 위에 있을때(녹색부분) |
그림 1은 마우스가 위젯 밖에 있을 때 그림 2는 마우스가 위젯 위에 있는 경우이다
코드를 더 단순화 하면 다음과 같이 한 줄로도 가능하다.
if (id == 13) enter ? pvSetText(p,id,"Mouse Over") : pvSetText(p,id,"Mouse Outer");
다른 위젯도 마우스가 위에 있을 때 텍스트 내용을 변경하고 싶다면 slotMouseOverEvent() 함수에 id 값을 판단하여 원하는 동작을 수행하는 코드를 작성하면 된다.
댓글 없음:
댓글 쓰기